From 246e50e41387685e3c0a3b6cffde9ff51d4f9b22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20Russ?= Date: Mon, 25 Sep 2023 08:52:03 +0200 Subject: [PATCH 01/19] infra: switch to monorepo --- .github/workflows/build-and-deploy.yml | 10 +- .github/workflows/test-and-build.yml | 5 +- .github/workflows/test.yml | 7 +- .gitignore | 14 +- README.md | 52 +- docs/decisions/0002-use-monorepo.md | 33 + docs/decisions/README.md | 4 + package-lock.json | 22670 ++--------- package.json | 174 +- packages/open-scd/.gitignore | 22 + .nojekyll => packages/open-scd/.nojekyll | 0 CC-EULA.pdf => packages/open-scd/CC-EULA.pdf | Bin .../open-scd/CHANGELOG.md | 0 LICENSE.md => packages/open-scd/LICENSE.md | 0 packages/open-scd/README.md | 65 + ROADMAP.md => packages/open-scd/ROADMAP.md | 0 .../open-scd/browserconfig.xml | 0 favicon.ico => packages/open-scd/favicon.ico | Bin index.html => packages/open-scd/index.html | 0 .../open-scd/manifest.json | 0 packages/open-scd/package-lock.json | 32472 ++++++++++++++++ packages/open-scd/package.json | 170 + .../open-scd/public}/ace/ext-searchbox.js | 0 .../open-scd/public}/ace/mode-xml.js | 0 .../public}/ace/theme-solarized_dark.js | 0 .../public}/ace/theme-solarized_light.js | 0 .../open-scd/public}/ace/worker-xml.js | 0 .../open-scd/public}/apple-touch-icon.png | Bin .../open-scd/public}/css/normalize.css | 0 .../open-scd/public}/favicon-16x16.png | Bin .../open-scd/public}/favicon-32x32.png | Bin .../fonts/roboto-mono-v13-latin-300.ttf | Bin .../fonts/roboto-mono-v13-latin-300.woff | Bin .../fonts/roboto-mono-v13-latin-300.woff2 | Bin .../public}/google/fonts/roboto-mono-v13.css | 0 .../google/fonts/roboto-v27-latin-300.ttf | Bin .../google/fonts/roboto-v27-latin-300.woff | Bin .../google/fonts/roboto-v27-latin-300.woff2 | Bin .../google/fonts/roboto-v27-latin-500.ttf | Bin .../google/fonts/roboto-v27-latin-500.woff | Bin .../google/fonts/roboto-v27-latin-500.woff2 | Bin .../google/fonts/roboto-v27-latin-regular.ttf | Bin .../fonts/roboto-v27-latin-regular.woff | Bin .../fonts/roboto-v27-latin-regular.woff2 | Bin .../public}/google/fonts/roboto-v27.css | 0 .../google/icons/material-icons-outlined.css | 0 .../icons/material-icons-outlined.woff2 | Bin .../open-scd/public}/icon-192x192.png | Bin .../open-scd/public}/icon-512x512.png | Bin {public => packages/open-scd/public}/icon.svg | 0 .../open-scd/public}/js/plugins.js | 0 .../open-scd/public}/js/worker.js | 0 .../open-scd/public}/js/xmlvalidate.js | 0 .../open-scd/public}/js/xmlvalidate.wasm | Bin .../open-scd/public}/maskable_icon.png | Bin .../public}/md/Add-DAType-from-templates.md | 0 .../public}/md/Add-DOType-from-templates.md | 0 .../public}/md/Add-EnumType-from-templates.md | 0 .../md/Add-LNodeType-from-templates.md | 0 .../public}/md/All-template-editor-wizards.md | 0 .../open-scd/public}/md/Bay.md | 0 .../open-scd/public}/md/ClientLN.md | 0 .../public}/md/Communication-Basics.md | 0 .../public}/md/Conducting-Equipment.md | 0 .../open-scd/public}/md/ConnectedAP.md | 0 .../public}/md/Create-GOOSE-Control-Blocks.md | 0 .../md/Create-Report-Control-Blocks.md | 0 .../Create-Sampled-Values-Control-Blocks.md | 0 ...Create-Specification-IED-from-functions.md | 0 .../public}/md/Data-attribute-type-DAType.md | 0 .../md/Data-attribute-type-child-BDA.md | 0 .../public}/md/Data-object-type-DOType.md | 0 .../public}/md/Data-object-type-child-DA.md | 0 .../public}/md/Data-object-type-child-SDO.md | 0 .../open-scd/public}/md/DataTypeTemplates.md | 0 .../public}/md/Edit-GOOSE-Control-Blocks.md | 0 .../public}/md/Edit-Report-Control-Blocks.md | 0 .../md/Edit-Sampled-Value-Control-Blocks.md | 0 .../public}/md/Enumeration-EnumType.md | 0 .../public}/md/Enumeration-EnumVal.md | 0 .../open-scd/public}/md/Extensions.md | 0 .../open-scd/public}/md/Function.md | 0 .../public}/md/Functional-Naming-Basics.md | 0 .../md/Generic-Substation-Event-Basics.md | 0 .../public}/md/Global-SCL-manipulation.md | 0 .../public}/md/Guess-substation-structure.md | 0 .../open-scd/public}/md/Home.md | 0 .../open-scd/public}/md/IED.md | 0 .../open-scd/public}/md/Import-IEDs.md | 0 .../open-scd/public}/md/Install-OpenSCD.md | 0 .../open-scd/public}/md/Interface.md | 0 .../public}/md/Logical-Node-Reference.md | 0 .../public}/md/Logical-node-type-LNodeType.md | 0 .../public}/md/Logical-node-type-child-DO.md | 0 .../public}/md/Merge-functionality.md | 0 .../open-scd/public}/md/Power-Transformer.md | 0 .../open-scd/public}/md/Project-workflow.md | 0 .../open-scd/public}/md/Report-Basics.md | 0 .../public}/md/Sampled-Values-Basics.md | 0 .../open-scd/public}/md/Save-project.md | 0 .../open-scd/public}/md/Start-from-scratch.md | 0 .../public}/md/Start-from-template.md | 0 .../open-scd/public}/md/Subnetwork.md | 0 .../public}/md/Subscribe-complete-GOOSE.md | 0 .../public}/md/Subscribe-complete-SMV.md | 0 .../open-scd/public}/md/Subscriber-basics.md | 0 .../public}/md/Substation-Section-Basics.md | 0 .../open-scd/public}/md/Substation.md | 0 .../public}/md/Update-subscriber-info.md | 0 .../open-scd/public}/md/Validate-schema.md | 0 .../open-scd/public}/md/Validate-template.md | 0 .../open-scd/public}/md/Validators.md | 0 .../open-scd/public}/md/Voltage-Level.md | 0 .../open-scd/public}/md/XML-code-editor.md | 0 .../open-scd/public}/md/_Sidebar.md | 0 .../open-scd/public}/monochrome_icon.png | Bin .../open-scd/public}/mstile-144x144.png | Bin .../open-scd/public}/mstile-150x150.png | Bin .../open-scd/public}/mstile-310x150.png | Bin .../open-scd/public}/mstile-310x310.png | Bin .../open-scd/public}/mstile-70x70.png | Bin .../public}/xml/IEC_61850-7-2_2007B3.nsd | 0 .../public}/xml/IEC_61850-7-3_2007B3.nsd | 0 .../public}/xml/IEC_61850-7-420_2019A4.nsd | 0 .../public}/xml/IEC_61850-7-4_2007B3.nsd | 0 .../public}/xml/IEC_61850-8-1_2003A2.nsd | 0 .../open-scd/public}/xml/templates.scd | 0 .../open-scd/snowpack.config.mjs | 0 {src => packages/open-scd/src}/Editing.ts | 0 {src => packages/open-scd/src}/Hosting.ts | 0 {src => packages/open-scd/src}/Logging.ts | 0 {src => packages/open-scd/src}/Plugging.ts | 0 {src => packages/open-scd/src}/Setting.ts | 0 {src => packages/open-scd/src}/Waiting.ts | 0 .../open-scd/src}/WizardDivider.ts | 0 {src => packages/open-scd/src}/Wizarding.ts | 0 {src => packages/open-scd/src}/action-icon.ts | 0 {src => packages/open-scd/src}/action-pane.ts | 0 .../open-scd/src}/editors/Cleanup.ts | 0 .../open-scd/src}/editors/Communication.ts | 0 .../editors/GooseSubscriberDataBinding.ts | 0 .../editors/GooseSubscriberLaterBinding.ts | 0 .../editors/GooseSubscriberMessageBinding.ts | 0 {src => packages/open-scd/src}/editors/IED.ts | 0 .../open-scd/src}/editors/Protocol104.ts | 0 .../open-scd/src}/editors/Publisher.ts | 0 .../src}/editors/SMVSubscriberDataBinding.ts | 0 .../src}/editors/SMVSubscriberLaterBinding.ts | 0 .../editors/SMVSubscriberMessageBinding.ts | 0 .../src}/editors/SingleLineDiagram.ts | 0 .../open-scd/src}/editors/Substation.ts | 0 .../open-scd/src}/editors/Templates.ts | 0 .../cleanup/control-blocks-container.ts | 0 .../editors/cleanup/datasets-container.ts | 0 .../editors/cleanup/datatypes-container.ts | 0 .../src}/editors/cleanup/foundation.ts | 0 .../communication/connectedap-editor.ts | 0 .../src}/editors/communication/gse-editor.ts | 0 .../src}/editors/communication/smv-editor.ts | 0 .../communication/subnetwork-editor.ts | 0 .../editors/ied/access-point-container.ts | 0 .../open-scd/src}/editors/ied/da-container.ts | 0 .../open-scd/src}/editors/ied/da-wizard.ts | 0 .../open-scd/src}/editors/ied/do-container.ts | 0 .../open-scd/src}/editors/ied/do-wizard.ts | 0 .../open-scd/src}/editors/ied/element-path.ts | 0 .../open-scd/src}/editors/ied/foundation.ts | 0 .../src}/editors/ied/ied-container.ts | 0 .../src}/editors/ied/ldevice-container.ts | 0 .../open-scd/src}/editors/ied/ln-container.ts | 0 .../src}/editors/ied/server-container.ts | 0 .../editors/protocol104/base-container.ts | 0 .../editors/protocol104/connectedap-editor.ts | 0 .../src}/editors/protocol104/doi-container.ts | 0 .../editors/protocol104/foundation/actions.ts | 0 .../editors/protocol104/foundation/cdc.ts | 0 .../protocol104/foundation/foundation.ts | 0 .../editors/protocol104/foundation/p-types.ts | 0 .../editors/protocol104/foundation/private.ts | 0 .../src}/editors/protocol104/ied-container.ts | 0 .../editors/protocol104/network-container.ts | 0 .../protocol104/subnetwork-container.ts | 0 .../editors/protocol104/values-container.ts | 0 .../editors/protocol104/wizards/address.ts | 0 .../protocol104/wizards/connectedap.ts | 0 .../protocol104/wizards/createAddresses.ts | 0 .../src}/editors/protocol104/wizards/doi.ts | 0 .../editors/protocol104/wizards/logiclink.ts | 0 .../protocol104/wizards/redundancygroup.ts | 0 .../editors/protocol104/wizards/selectDo.ts | 0 .../editors/protocol104/wizards/subnetwork.ts | 0 .../src}/editors/publisher/data-set-editor.ts | 0 .../publisher/data-set-element-editor.ts | 0 .../src}/editors/publisher/foundation.ts | 0 .../editors/publisher/gse-control-editor.ts | 0 .../publisher/gse-control-element-editor.ts | 0 .../publisher/report-control-editor.ts | 0 .../report-control-element-editor.ts | 0 .../publisher/sampled-value-control-editor.ts | 0 .../sampled-value-control-element-editor.ts | 0 .../editors/singlelinediagram/foundation.ts | 0 .../singlelinediagram/ortho-connector.ts | 0 .../editors/singlelinediagram/sld-drawing.ts | 0 .../editors/singlelinediagram/wizards/bay.ts | 0 .../wizards/conductingequipment.ts | 0 .../singlelinediagram/wizards/foundation.ts | 0 .../wizards/powertransformer.ts | 0 .../wizards/wizard-library.ts | 0 .../editors/subscription/fcda-binding-list.ts | 0 .../src}/editors/subscription/foundation.ts | 0 .../editors/subscription/goose/foundation.ts | 0 .../editors/subscription/goose/goose-list.ts | 0 .../subscription/goose/subscriber-list.ts | 0 .../src}/editors/subscription/ied-list.ts | 0 .../ext-ref-later-binding-list.ts | 0 .../later-binding/ext-ref-ln-binding-list.ts | 0 .../subscription/later-binding/foundation.ts | 0 .../subscription/sampledvalues/foundation.ts | 0 .../subscription/sampledvalues/smv-list.ts | 0 .../sampledvalues/subscriber-list.ts | 0 .../src}/editors/substation/bay-editor.ts | 0 .../substation/conducting-equipment-editor.ts | 0 .../editors/substation/eq-function-editor.ts | 0 .../substation/eq-sub-function-editor.ts | 0 .../src}/editors/substation/foundation.ts | 0 .../editors/substation/function-editor.ts | 0 .../substation/general-equipment-editor.ts | 0 .../src}/editors/substation/guess-wizard.ts | 0 .../src}/editors/substation/ied-editor.ts | 0 .../src}/editors/substation/l-node-editor.ts | 0 .../src}/editors/substation/line-editor.ts | 0 .../substation/powertransformer-editor.ts | 0 .../src}/editors/substation/process-editor.ts | 0 .../substation/sub-equipment-editor.ts | 0 .../editors/substation/sub-function-editor.ts | 0 .../editors/substation/substation-editor.ts | 0 .../editors/substation/tapchanger-editor.ts | 0 .../substation/transformer-winding-editor.ts | 0 .../substation/voltage-level-editor.ts | 0 .../src}/editors/substation/zeroline-pane.ts | 0 .../src}/editors/templates/datype-wizards.ts | 0 .../src}/editors/templates/dotype-wizards.ts | 0 .../src}/editors/templates/enumtype-wizard.ts | 0 .../src}/editors/templates/foundation.ts | 0 .../editors/templates/lnodetype-wizard.ts | 0 .../open-scd/src}/filtered-list.ts | 0 {src => packages/open-scd/src}/finder-list.ts | 0 {src => packages/open-scd/src}/foundation.ts | 0 .../open-scd/src}/foundation/compare.ts | 0 .../open-scd/src}/foundation/dai.ts | 0 .../open-scd/src}/foundation/generators.ts | 0 .../open-scd/src}/foundation/ied.ts | 0 .../open-scd/src}/foundation/nsdoc.ts | 0 .../open-scd/src}/foundation/scl.ts | 0 .../open-scd/src}/icons/compare.ts | 0 {src => packages/open-scd/src}/icons/icons.ts | 0 .../open-scd/src}/icons/ied-icons.ts | 0 {src => packages/open-scd/src}/icons/lnode.ts | 0 .../open-scd/src}/menu/CompareIED.ts | 0 .../open-scd/src}/menu/ExportCommunication.ts | 0 {src => packages/open-scd/src}/menu/Help.ts | 0 .../open-scd/src}/menu/ImportIEDs.ts | 0 {src => packages/open-scd/src}/menu/Merge.ts | 0 .../open-scd/src}/menu/NewProject.ts | 0 .../open-scd/src}/menu/OpenProject.ts | 0 .../open-scd/src}/menu/SaveProject.ts | 0 .../open-scd/src}/menu/SclHistory.ts | 0 .../open-scd/src}/menu/SubscriberInfo.ts | 0 .../src}/menu/UpdateDescriptionABB.ts | 0 .../src}/menu/UpdateDescriptionSEL.ts | 0 .../open-scd/src}/menu/UpdateSubstation.ts | 0 .../open-scd/src}/menu/VirtualTemplateIED.ts | 0 .../menu/virtualtemplateied/foundation.ts | 0 {src => packages/open-scd/src}/open-scd.ts | 0 .../open-scd/src}/oscd-filter-button.ts | 0 .../open-scd/src}/plain-compare-list.ts | 0 {src => packages/open-scd/src}/schemas.ts | 0 {src => packages/open-scd/src}/themes.ts | 0 .../open-scd/src}/translations/de.ts | 0 .../open-scd/src}/translations/en.ts | 0 .../open-scd/src}/translations/loader.ts | 0 .../src}/validators/ValidateSchema.ts | 0 .../src}/validators/ValidateTemplates.ts | 0 .../src}/validators/templates/dabda.ts | 0 .../src}/validators/templates/datype.ts | 0 .../src}/validators/templates/dosdo.ts | 0 .../src}/validators/templates/dotype.ts | 0 .../src}/validators/templates/foundation.ts | 0 .../src}/validators/templates/lnodetype.ts | 0 .../open-scd/src}/wizard-checkbox.ts | 0 .../open-scd/src}/wizard-dialog.ts | 0 .../open-scd/src}/wizard-select.ts | 0 .../open-scd/src}/wizard-textfield.ts | 0 {src => packages/open-scd/src}/wizards.ts | 0 .../open-scd/src}/wizards/abstractda.ts | 0 .../open-scd/src}/wizards/address.ts | 0 {src => packages/open-scd/src}/wizards/bay.ts | 0 {src => packages/open-scd/src}/wizards/bda.ts | 0 .../open-scd/src}/wizards/clientln.ts | 0 .../open-scd/src}/wizards/commmap-wizards.ts | 0 .../src}/wizards/conductingequipment.ts | 0 .../open-scd/src}/wizards/connectedap.ts | 0 .../open-scd/src}/wizards/connectivitynode.ts | 0 .../src}/wizards/controlwithiedname.ts | 0 {src => packages/open-scd/src}/wizards/da.ts | 0 {src => packages/open-scd/src}/wizards/dai.ts | 0 .../open-scd/src}/wizards/dataset.ts | 0 .../open-scd/src}/wizards/eqfunction.ts | 0 .../open-scd/src}/wizards/eqsubfunction.ts | 0 .../open-scd/src}/wizards/fcda.ts | 0 .../src}/wizards/foundation/actions.ts | 0 .../src}/wizards/foundation/dai-field-type.ts | 0 .../open-scd/src}/wizards/foundation/enums.ts | 0 .../src}/wizards/foundation/finder.ts | 0 .../src}/wizards/foundation/limits.ts | 0 .../src}/wizards/foundation/p-types.ts | 0 .../src}/wizards/foundation/references.ts | 0 .../open-scd/src}/wizards/foundation/scl.ts | 0 .../open-scd/src}/wizards/function.ts | 0 .../open-scd/src}/wizards/generalEquipment.ts | 0 {src => packages/open-scd/src}/wizards/gse.ts | 0 .../open-scd/src}/wizards/gsecontrol.ts | 0 {src => packages/open-scd/src}/wizards/ied.ts | 0 .../open-scd/src}/wizards/line.ts | 0 .../open-scd/src}/wizards/lnode.ts | 0 .../open-scd/src}/wizards/optfields.ts | 0 .../open-scd/src}/wizards/powertransformer.ts | 0 .../open-scd/src}/wizards/process.ts | 0 .../open-scd/src}/wizards/reportcontrol.ts | 0 .../src}/wizards/sampledvaluecontrol.ts | 0 .../src}/wizards/service-GSEControl.ts | 0 .../service-clientServer-configurations.ts | 0 .../src}/wizards/service-log-settingsgroup.ts | 0 .../src}/wizards/service-networking.ts | 0 .../wizards/service-report-configurations.ts | 0 .../src}/wizards/service-sampled-values.ts | 0 .../open-scd/src}/wizards/services.ts | 0 {src => packages/open-scd/src}/wizards/smv.ts | 0 .../open-scd/src}/wizards/smvopts.ts | 0 .../open-scd/src}/wizards/subequipment.ts | 0 .../open-scd/src}/wizards/subfunction.ts | 0 .../open-scd/src}/wizards/subnetwork.ts | 0 .../open-scd/src}/wizards/substation.ts | 0 .../open-scd/src}/wizards/tapchanger.ts | 0 .../open-scd/src}/wizards/terminal.ts | 0 .../src}/wizards/transformerWinding.ts | 0 .../open-scd/src}/wizards/trgops.ts | 0 .../open-scd/src}/wizards/voltagelevel.ts | 0 .../open-scd/src}/wizards/wizard-library.ts | 0 sw.js => packages/open-scd/sw.js | 0 .../open-scd/test}/foundation.ts | 0 .../test}/integration/Editing.test.ts | 0 .../test}/integration/Setting.test.ts | 0 .../__snapshots__/Setting.test.snap.js | 0 .../__snapshots__/open-scd.test.snap.js | 0 .../GooseSubscriberDataBinding.test.ts | 0 .../GooseSubscriberLaterBinding.test.ts | 0 .../GooseSubscriberMessageBinding.test.ts | 0 .../test}/integration/editors/IED.test.ts | 0 .../integration/editors/Protocol104.test.ts | 0 .../editors/SMVSubscriberDataBinding.test.ts | 0 .../editors/SMVSubscriberLaterBinding.test.ts | 0 .../SMVSubscriberMessageBinding.test.ts | 0 .../integration/editors/Substation.test.ts | 0 .../__snapshots__/Cleanup.test.snap.js | 0 .../GooseSubscriberLaterBinding.test.snap.js | 0 ...GooseSubscriberMessageBinding.test.snap.js | 0 .../editors/__snapshots__/IED.test.snap.js | 0 .../__snapshots__/Protocol104.test.snap.js | 0 .../SMVSubscriberLaterBinding.test.snap.js | 0 .../SMVSubscriberMessageBinding.test.snap.js | 0 .../__snapshots__/Substation.test.snap.js | 0 .../control-blocks-container.test.snap.js | 0 .../datasets-container.test.snap.js | 0 .../datatypes-container.test.snap.js | 0 .../cleanup/control-blocks-container.test.ts | 0 .../cleanup/datasets-container.test.ts | 0 .../cleanup/datatypes-container.test.ts | 0 .../communication/Communication.test.ts | 0 .../__snapshots__/Communication.test.snap.js | 0 ...nnectedap-editor-wizarding-editing.test.ts | 0 .../gse-editor-wizarding-editing.test.ts | 0 .../smv-editor-wizarding-editing.test.ts | 0 ...ubnetwork-editor-wizarding-editing.test.ts | 0 .../subnetwork-editor-wizarding.test.ts | 0 .../bay-editor-wizarding.test.snap.js | 0 ...ng-equipment-editor-wizarding.test.snap.js | 0 .../substation-editor-wizarding.test.snap.js | 0 ...oltage-level-editor-wizarding.test.snap.js | 0 .../bay-editor-wizarding-editing.test.ts | 0 .../substation/bay-editor-wizarding.test.ts | 0 ...equipment-editor-wizarding-editing.test.ts | 0 ...ducting-equipment-editor-wizarding.test.ts | 0 .../eq-function-wizarding-editing.test.ts | 0 ...-function-editor-wizarding-editing.test.ts | 0 .../substation/function-editor.test.ts | 0 ...al-equipment-editor-wizard-editing.test.ts | 0 .../guess-wizarding-editing.test.ts | 0 .../ied-editor-wizarding-integration.test.ts | 0 .../l-node-editor-wizarding-editing.test.ts | 0 .../line-editor-wizard-editing.test.ts | 0 .../editors/substation/lnodewizard.test.ts | 0 ...ansformer-editor-wizarding-editing.test.ts | 0 .../process-editor-wizard-editing.test.ts | 0 .../sub-equipment-wizarding-editing.test.ts | 0 .../substation/sub-function-editor.test.ts | 0 ...ubstation-editor-wizarding-editing.test.ts | 0 .../substation-editor-wizarding.test.ts | 0 .../tapchanger-editor-wizard-editing.test.ts | 0 ...rmer-winding-editor-wizard-editing.test.ts | 0 ...age-level-editor-wizarding-editing.test.ts | 0 .../voltage-level-editor-wizarding.test.ts | 0 .../editors/substation/zeroline-pane.test.ts | 0 .../editors/templates/Templates.test.ts | 0 .../__snapshots__/Templates.test.snap.js | 0 .../datype-wizarding.test.snap.js | 0 .../dotype-wizarding.test.snap.js | 0 .../enumtype-wizarding.test.snap.js | 0 .../lnodetype-wizard.test.snap.js | 0 .../templates/datype-wizarding.test.ts | 0 .../templates/dotype-wizarding.test.ts | 0 .../templates/enumtype-wizarding.test.ts | 0 .../templates/lnodetype-wizard.test.ts | 0 .../test}/integration/editors/test-support.ts | 0 .../CommunicationMappingPlugin.test.ts | 0 .../triggered/ImportIedsPlugin.test.ts | 0 .../menu/ExportCommunication.test.ts | 0 .../test}/integration/menu/NewProject.test.ts | 0 .../menu/UpdateDescritionABB.test.ts | 0 .../test}/integration/open-scd.test.ts | 0 .../validators/ValidateSchema.test.ts | 0 .../validators/ValidateTemplates.test.ts | 0 .../__snapshots__/ValidateSchema.test.snap.js | 0 .../ValidateTemplates.test.snap.js | 0 .../bda-wizarding-editing.test.snap.js | 0 .../da-wizarding-editing.test.snap.js | 0 .../services-wizard.test.snap.js | 0 .../wizards/bda-wizarding-editing.test.ts | 0 ...edap-wizarding-editing-integration.test.ts | 0 .../wizards/da-wizarding-editing.test.ts | 0 ...aset-wizarding-editing-integration.test.ts | 0 ...fcda-wizarding-editing-integration.test.ts | 0 .../gse-wizarding-editing-integration.test.ts | 0 .../gsecontrolwizarding-editing.test.ts | 0 .../reportcontrol-wizarding-editing.test.ts | 0 ...pledvaluecontrol-wizarding-editing.test.ts | 0 .../wizards/services-wizard.test.ts | 0 .../open-scd/test}/mock-editor-logger.ts | 0 .../open-scd/test}/mock-setter-logger.ts | 0 .../open-scd/test}/mock-wizard-editor.ts | 0 .../open-scd/test}/mock-wizard.ts | 0 .../test}/testfiles/104/valid-addresses.scd | 0 .../testfiles/104/valid-empty-addresses.scd | 0 .../test}/testfiles/104/valid-no-doi.scd | 0 .../test}/testfiles/104/valid-no-ied.scd | 0 .../test}/testfiles/104/valid-subnetwork.scd | 0 .../open-scd/test}/testfiles/Editing.scd | 0 .../open-scd/test}/testfiles/Services.scd | 0 .../open-scd/test}/testfiles/SubEquipment.scd | 0 .../open-scd/test}/testfiles/cleanup.scd | 0 .../open-scd/test}/testfiles/comm-map.scd | 0 .../test}/testfiles/communication.scd | 0 .../testfiles/communication/communication.scd | 0 .../testfiles/conductingequipmentwizard.scd | 0 .../editors/DataBindingGOOSE2007B4.scd | 0 .../editors/DataBindingSMV2007B4.scd | 0 .../editors/LaterBindingGOOSE-LGOS.scd | 0 .../editors/LaterBindingGOOSE2007B4.scd | 0 .../editors/LaterBindingSMV-LSVS.scd | 0 .../testfiles/editors/LaterBindingSMV2003.scd | 0 .../editors/LaterBindingSMV2007B4.scd | 0 .../editors/MessageBindingGOOSE2007B4.scd | 0 .../editors/MessageBindingSMV2007B4.scd | 0 .../testfiles/editors/iedEditorWithIEDs.scd | 0 .../editors/iedEditorWithoutIEDs.scd | 0 .../testfiles/editors/substation/Line.scd | 0 .../testfiles/editors/substation/Process.scd | 0 .../editors/substation/TapChanger.scd | 0 .../editors/substation/TransformerWinding.scd | 0 .../editors/substation/generalequipment.scd | 0 .../testfiles/foundation/compare-changed.cid | 0 .../testfiles/foundation/compare-original.cid | 0 .../test}/testfiles/foundation/sclbasics.scd | 0 .../testfiles/foundation/testFile73.nsdoc | 0 .../testfiles/foundation/testFile74.nsdoc | 0 .../testfiles/foundation/testFile81.nsdoc | 0 .../open-scd/test}/testfiles/history.scd | 0 .../test}/testfiles/importieds/duplicate.iid | 0 .../testfiles/importieds/emptyproject.scd | 0 .../test}/testfiles/importieds/invalid.iid | 0 .../testfiles/importieds/multipleied.scd | 0 .../testfiles/importieds/parsererror.iid | 0 .../test}/testfiles/importieds/template.icd | 0 .../test}/testfiles/importieds/valid.iid | 0 .../open-scd/test}/testfiles/invalid2007B.scd | 0 .../open-scd/test}/testfiles/lnodewizard.scd | 0 .../testfiles/menu/compare-ied-changed.scd | 0 .../testfiles/menu/compare-ied-original.scd | 0 .../test}/testfiles/missingCommunication.scd | 0 .../test}/testfiles/missingSubstation.scd | 0 .../open-scd/test}/testfiles/no-history.scd | 0 .../test}/testfiles/nsdoc/IEC_61850-7-2.nsdoc | 0 .../test}/testfiles/nsdoc/invalid.nsdoc | 0 .../test}/testfiles/nsdoc/wrong-version.nsdoc | 0 .../test}/testfiles/subscriberinfo2003.scd | 0 .../test}/testfiles/subscriberinfo2007.scd | 0 .../test}/testfiles/templates/datypes.scd | 0 .../test}/testfiles/templates/dotypes.scd | 0 .../testfiles/templates/missingdatatypes.scd | 0 .../updatedesc/testSignalListComma.csv | 0 .../updatedesc/testSignalListSemicolon.csv | 0 .../testfiles/updatedesc/updatedescABB.scd | 0 .../testfiles/updatedesc/updatedescSEL.scd | 0 .../test}/testfiles/updatesubstation-ours.scd | 0 .../open-scd/test}/testfiles/valid2003.scd | 0 .../open-scd/test}/testfiles/valid2007B.scd | 0 .../open-scd/test}/testfiles/valid2007B4.scd | 0 .../testfiles/valid2007B4ForDAIValidation.scd | 0 .../valid2007B4withIEDModifications.scd | 0 .../testfiles/valid2007B4withSubstationXY.scd | 0 .../validators/datatypetemplateerrors.scd | 0 .../testfiles/validators/doandsdotestfile.scd | 0 .../test}/testfiles/validators/zeroissues.scd | 0 .../virtualied/specificfromfunctions.ssd | 0 .../test}/testfiles/wizards/abstractda.scd | 0 .../test}/testfiles/wizards/communication.scd | 0 .../open-scd/test}/testfiles/wizards/fcda.scd | 0 .../test}/testfiles/wizards/gsecontrol.scd | 0 .../open-scd/test}/testfiles/wizards/ied.scd | 0 .../test}/testfiles/wizards/references.scd | 0 .../test}/testfiles/wizards/reportcontrol.scd | 0 .../testfiles/wizards/sampledvaluecontrol.scd | 0 .../test}/testfiles/wizards/settingGroups.scd | 0 .../test}/testfiles/wizards/substation.scd | 0 .../zeroline/clone/noUnusedLNode.scd | 0 .../testfiles/zeroline/clone/refMissmatch.scd | 0 .../zeroline/clone/specificationOnly.scd | 0 .../zeroline/clone/validRedirect.scd | 0 .../test}/testfiles/zeroline/functions.scd | 0 .../test}/testfiles/zeroline/iedalloctest.scd | 0 .../testfiles/zeroline/substationonly.scd | 0 .../open-scd/test}/unit/Editing.test.ts | 0 .../open-scd/test}/unit/Logging.test.ts | 0 .../open-scd/test}/unit/Plugging.test.ts | 0 .../open-scd/test}/unit/Setting.test.ts | 0 .../open-scd/test}/unit/Waiting.test.ts | 0 .../open-scd/test}/unit/Wizarding.test.ts | 0 .../unit/__snapshots__/Setting.test.snap.js | 0 .../__snapshots__/action-icon.test.snap.js | 0 .../__snapshots__/action-pane.test.snap.js | 0 .../__snapshots__/filtered-list.test.snap.js | 0 .../__snapshots__/finder-list.test.snap.js | 0 .../oscd-filter-button.test.snap.js | 0 .../plain-compare-list.test.snap.js | 0 .../__snapshots__/wizard-dialog.test.snap.js | 0 .../open-scd/test}/unit/action-icon.test.ts | 0 .../open-scd/test}/unit/action-pane.test.ts | 0 .../GooseSubscriberDataBinding.test.ts | 0 .../GooseSubscriberLaterBinding.test.ts | 0 .../test}/unit/editors/Publisher.test.ts | 0 .../editors/SMVSubscriberDataBinding.test.ts | 0 .../editors/SMVSubscriberLaterBinding.test.ts | 0 .../GooseSubscriberDataBinding.test.snap.js | 0 .../GooseSubscriberLaterBinding.test.snap.js | 0 .../__snapshots__/Publisher.test.snap.js | 0 .../SMVSubscriberDataBinding.test.snap.js | 0 .../SMVSubscriberLaterBinding.test.snap.js | 0 .../control-blocks-container.test.snap.js | 0 .../datasets-container.test.snap.js | 0 .../datatypes-container.test.snap.js | 0 .../cleanup/control-blocks-container.test.ts | 0 .../cleanup/datasets-container.test.ts | 0 .../cleanup/datatypes-container.test.ts | 0 .../unit/editors/cleanup/foundation.test.ts | 0 .../conductingap-editor.test.snap.js | 0 .../__snapshots__/gse-editor.test.snap.js | 0 .../__snapshots__/smv-editor.test.snap.js | 0 .../subnetwork-editor.test.snap.js | 0 .../communication/conductingap-editor.test.ts | 0 .../editors/communication/gse-editor.test.ts | 0 .../editors/communication/smv-editor.test.ts | 0 .../communication/subnetwork-editor.test.ts | 0 .../access-point-container.test.snap.js | 0 .../__snapshots__/da-container.test.snap.js | 0 .../ied/__snapshots__/da-wizard.test.snap.js | 0 .../__snapshots__/do-container.test.snap.js | 0 .../ied/__snapshots__/do-wizard.test.snap.js | 0 .../__snapshots__/element-path.test.snap.js | 0 .../__snapshots__/ied-container.test.snap.js | 0 .../ldevice-container.test.snap.js | 0 .../__snapshots__/ln-container.test.snap.js | 0 .../server-container.test.snap.js | 0 .../ied/access-point-container.test.ts | 0 .../unit/editors/ied/da-container.test.ts | 0 .../test}/unit/editors/ied/da-wizard.test.ts | 0 .../unit/editors/ied/do-container.test.ts | 0 .../test}/unit/editors/ied/do-wizard.test.ts | 0 .../unit/editors/ied/element-path.test.ts | 0 .../test}/unit/editors/ied/foundation.test.ts | 0 .../unit/editors/ied/ied-container.test.ts | 0 .../editors/ied/ldevice-container.test.ts | 0 .../unit/editors/ied/ln-container.test.ts | 0 .../unit/editors/ied/server-container.test.ts | 0 .../test}/unit/editors/ied/test-support.ts | 0 .../connectedap-container.test.snap.js | 0 .../__snapshots__/doi-container.test.snap.js | 0 .../__snapshots__/ied-container.test.snap.js | 0 .../network-container.test.snap.js | 0 .../subnetwork-container.test.snap.js | 0 .../values-container.test.snap.js | 0 .../protocol104/connectedap-container.test.ts | 0 .../editors/protocol104/doi-container.test.ts | 0 .../protocol104/foundation/actions.test.ts | 0 .../protocol104/foundation/cdc.test.ts | 0 .../protocol104/foundation/foundation.test.ts | 0 .../protocol104/foundation/private.test.ts | 0 .../editors/protocol104/ied-container.test.ts | 0 .../protocol104/network-container.test.ts | 0 .../protocol104/subnetwork-container.test.ts | 0 .../protocol104/values-container.test.ts | 0 .../__snapshots__/address.test.snap.js | 0 .../__snapshots__/connectedap.test.snap.js | 0 .../createAddresses.test.snap.js | 0 .../wizards/__snapshots__/doi.test.snap.js | 0 .../__snapshots__/logiclink.test.snap.js | 0 .../redundancygroup.test.snap.js | 0 .../__snapshots__/selectDo.test.snap.js | 0 .../__snapshots__/selectDoi.test.snap.js | 0 .../__snapshots__/subnetwork.test.snap.js | 0 .../protocol104/wizards/address.test.ts | 0 .../protocol104/wizards/connectedap.test.ts | 0 .../wizards/createAddresses.test.ts | 0 .../editors/protocol104/wizards/doi.test.ts | 0 .../protocol104/wizards/logiclink.test.ts | 0 .../wizards/redundancygroup.test.ts | 0 .../protocol104/wizards/selectDo.test.ts | 0 .../protocol104/wizards/subnetwork.test.ts | 0 .../data-set-editor.test.snap.js | 0 .../data-set-element-editor.test.snap.js | 0 .../gse-control-editor.test.snap.js | 0 .../gse-control-element-editor.test.snap.js | 0 .../report-control-editor.test.snap.js | 0 ...report-control-element-editor.test.snap.js | 0 .../sampled-value-control-editor.test.snap.js | 0 ...-value-control-element-editor.test.snap.js | 0 .../editors/publisher/data-set-editor.test.ts | 0 .../publisher/data-set-element-editor.test.ts | 0 .../unit/editors/publisher/foundation.test.ts | 0 .../publisher/gse-control-editor.test.ts | 0 .../gse-control-element-editor.test.ts | 0 .../publisher/report-control-editor.test.ts | 0 .../report-control-element-editor.test.ts | 0 .../sampled-value-control-editor.test.ts | 0 ...mpled-value-control-element-editor.test.ts | 0 .../__snapshots__/sld-drawing.test.snap.js | 0 .../singlelinediagram/foundation.test.ts | 0 .../orthogonal-connector.test.ts | 0 .../singlelinediagram/sld-drawing.test.ts | 0 .../wizards/__snapshots__/bay.test.snap.js | 0 .../conductingequipment.test.snap.js | 0 .../powertransformer.test.snap.js | 0 .../singlelinediagram/wizards/bay.test.ts | 0 .../wizards/conductingequipment.test.ts | 0 .../wizards/foundation.test.ts | 0 .../wizards/powertransformer.test.ts | 0 .../wizards/wizard-library.test.ts | 0 .../fcda-binding-list.test.snap.js | 0 .../__snapshots__/ied-list.test.snap.js | 0 .../subscription/fcda-binding-list.test.ts | 0 .../editors/subscription/foundation.test.ts | 0 .../__snapshots__/goose-list.test.snap.js | 0 .../goose/__snapshots__/ied-list.test.snap.js | 0 .../subscriber-list.test.snap.js | 0 .../subscription/goose/goose-list.test.ts | 0 .../goose/subscriber-list.test.ts | 0 .../editors/subscription/ied-list.test.ts | 0 .../ext-ref-later-binding-list.test.snap.js | 0 .../ext-ref-ln-binding-list.test.snap.js | 0 .../ext-ref-later-binding-list.test.ts | 0 .../ext-ref-ln-binding-list.test.ts | 0 .../later-binding/foundation.test.ts | 0 .../__snapshots__/ied-list.test.snap.js | 0 .../__snapshots__/smv-list.test.snap.js | 0 .../subscriber-list.test.snap.js | 0 .../sampledvalues/smv-list.test.ts | 0 .../sampledvalues/subscriber-list.test.ts | 0 .../editors/subscription/supervision.test.ts | 0 .../__snapshots__/bay-editor.test.snap.js | 0 .../conducting-equipment-editor.test.snap.js | 0 .../eq-function-editor.test.snap.js | 0 .../eq-sub-function-editor.test.snap.js | 0 .../function-editor.test.snap.js | 0 .../general-equipment-editor.test.snap.js | 0 .../__snapshots__/ied-editor.test.snap.js | 0 .../__snapshots__/l-node-editor.test.snap.js | 0 .../__snapshots__/line-editor.test.snap.js | 0 .../powertransformer-editor.test.snap.js | 0 .../__snapshots__/process-editor.test.snap.js | 0 .../__snapshots__/redirectionUI.test.snap.js | 0 .../sub-equipment-editor.test.snap.js | 0 .../sub-function-editor.test.snap.js | 0 .../substation-editor.test.snap.js | 0 .../tapchanger-editor.test.snap.js | 0 .../transformer-winding-editor.test.snap.js | 0 .../voltage-level-editor.test.snap.js | 0 .../__snapshots__/zeroline-pane.test.snap.js | 0 .../editors/substation/bay-editor.test.ts | 0 .../conducting-equipment-editor.test.ts | 0 .../conductingequipmentwizard.test.ts | 0 .../substation/eq-function-editor.test.ts | 0 .../substation/eq-sub-function-editor.test.ts | 0 .../substation/function-editor.test.ts | 0 .../general-equipment-editor.test.ts | 0 .../editors/substation/ied-editor.test.ts | 0 .../editors/substation/l-node-editor.test.ts | 0 .../editors/substation/line-editor.test.ts | 0 .../editors/substation/lnodewizard.test.ts | 0 .../powertransformer-editor.test.ts | 0 .../editors/substation/process-editor.test.ts | 0 .../editors/substation/redirectionUI.test.ts | 0 .../substation/sub-equipment-editor.test.ts | 0 .../substation/sub-function-editor.test.ts | 0 .../substation/substation-editor.test.ts | 0 .../substation/tapchanger-editor.test.ts | 0 .../transformer-winding-editor.test.ts | 0 .../substation/voltage-level-editor.test.ts | 0 .../editors/substation/zeroline-pane.test.ts | 0 .../unit/editors/templates/datype.test.ts | 0 .../unit/editors/templates/dotype.test.ts | 0 .../unit/editors/templates/enumtype.test.ts | 0 .../templates/lnodetype-wizard.test.ts | 0 .../open-scd/test}/unit/filtered-list.test.ts | 0 .../open-scd/test}/unit/finder-list.test.ts | 0 .../open-scd/test}/unit/foundation.test.ts | 0 .../__snapshots__/compare.test.snap.js | 0 .../test}/unit/foundation/compare.test.ts | 0 .../test}/unit/foundation/dai.test.ts | 0 .../test}/unit/foundation/generators.test.ts | 0 .../test}/unit/foundation/nsdoc.test.ts | 0 .../test}/unit/foundation/scl.test.ts | 0 .../test}/unit/menu/CompareIED.test.ts | 0 .../test}/unit/menu/SclHistory.test.ts | 0 .../test}/unit/menu/SubscriberInfo.test.ts | 0 .../unit/menu/UpdateDescriptionSEL.test.ts | 0 .../unit/menu/UpdateDescritionABB.test.ts | 0 .../unit/menu/VirtualTemplateIED.test.ts | 0 .../__snapshots__/CompareIED.test.snap.js | 0 .../__snapshots__/SclHistory.test.snap.js | 0 .../UpdateDescriptionSEL.test.snap.js | 0 .../UpdateDescritionABB.test.snap.js | 0 .../VirtualTemplateIED.test.snap.js | 0 .../test}/unit/menu/updatesubstation.test.ts | 0 .../__snapshots__/foundation.test.snap.js | 0 .../virtualtemplateied/foundation.test.ts | 0 .../open-scd/test}/unit/mock-actions.ts | 0 .../open-scd/test}/unit/mock-document.ts | 0 .../open-scd/test}/unit/mock-editor.ts | 0 .../open-scd/test}/unit/mock-logger.ts | 0 .../open-scd/test}/unit/mock-plugger.ts | 0 .../open-scd/test}/unit/mock-setter.ts | 0 .../open-scd/test}/unit/mock-waiter.ts | 0 .../test}/unit/oscd-filter-button.test.ts | 0 .../test}/unit/plain-compare-list.test.ts | 0 .../open-scd/test}/unit/schema.test.ts | 0 .../unit/validators/ValidateTemplates.test.ts | 0 .../unit/validators/templates/dabda.test.ts | 0 .../unit/validators/templates/datype.test.ts | 0 .../unit/validators/templates/doorsdo.test.ts | 0 .../unit/validators/templates/dotype.test.ts | 0 .../validators/templates/foundation.test.ts | 0 .../validators/templates/lnodetype.test.ts | 0 .../test}/unit/wizard-checkbox.test.ts | 0 .../open-scd/test}/unit/wizard-dialog.test.ts | 0 .../open-scd/test}/unit/wizard-select.test.ts | 0 .../test}/unit/wizard-textfield.test.ts | 0 .../__snapshots__/abstractda.test.snap.js | 0 .../__snapshots__/address.test.snap.js | 0 .../__snapshots__/clientln.test.snap.js | 0 .../__snapshots__/commmap.test.snap.js | 0 .../__snapshots__/connectedap-c.test.snap.js | 0 .../connectedap-pattern.test.snap.js | 0 .../connectivitynode.test.snap.js | 0 .../controlwithiedname.test.snap.js | 0 .../wizards/__snapshots__/dai.test.snap.js | 0 .../__snapshots__/dataset.test.snap.js | 0 .../__snapshots__/eqfunction.test.snap.js | 0 .../__snapshots__/eqsubfunction.test.snap.js | 0 .../wizards/__snapshots__/fcda.test.snap.js | 0 .../__snapshots__/function.test.snap.js | 0 .../generalequipment.test.snap.js | 0 .../wizards/__snapshots__/gse.test.snap.js | 0 .../__snapshots__/gsecontrol.test.snap.js | 0 .../wizards/__snapshots__/ied.test.snap.js | 0 .../wizards/__snapshots__/line.test.snap.js | 0 .../wizards/__snapshots__/lnode.test.snap.js | 0 .../__snapshots__/optfields.test.snap.js | 0 .../powertransformer.test.snap.js | 0 .../__snapshots__/process.test.snap.js | 0 .../__snapshots__/reportcontrol.test.snap.js | 0 .../sampledvaluecontrol.test.snap.js | 0 .../wizards/__snapshots__/smv.test.snap.js | 0 .../__snapshots__/smvopts.test.snap.js | 0 .../__snapshots__/sub-equipment.test.snap.js | 0 .../__snapshots__/subfunction.test.snap.js | 0 .../__snapshots__/subnetwork.test.snap.js | 0 .../__snapshots__/substation.test.snap.js | 0 .../__snapshots__/tapchanger.test.snap.js | 0 .../__snapshots__/terminal.test.snap.js | 0 .../transformerwinding.test.snap.js | 0 .../wizards/__snapshots__/trgops.test.snap.js | 0 .../test}/unit/wizards/abstractda.test.ts | 0 .../test}/unit/wizards/address.test.ts | 0 .../open-scd/test}/unit/wizards/bay.test.ts | 0 .../open-scd/test}/unit/wizards/bda.test.ts | 0 .../test}/unit/wizards/clientln.test.ts | 0 .../test}/unit/wizards/commmap.test.ts | 0 .../unit/wizards/conductingequipment.test.ts | 0 .../test}/unit/wizards/connectedap-c.test.ts | 0 .../unit/wizards/connectedap-pattern.test.ts | 0 .../test}/unit/wizards/connectedap.test.ts | 0 .../unit/wizards/connectivitynode.test.ts | 0 .../unit/wizards/controlwithiedname.test.ts | 0 .../open-scd/test}/unit/wizards/da.test.ts | 0 .../open-scd/test}/unit/wizards/dai.test.ts | 0 .../test}/unit/wizards/dataset.test.ts | 0 .../test}/unit/wizards/eqfunction.test.ts | 0 .../test}/unit/wizards/eqsubfunction.test.ts | 0 .../open-scd/test}/unit/wizards/fcda.test.ts | 0 .../__snapshots__/dai-field-type.test.snap.js | 0 .../wizards/foundation/dai-field-type.test.ts | 0 .../unit/wizards/foundation/finder.test.ts | 0 .../wizards/foundation/references.test.ts | 0 .../test}/unit/wizards/foundation/scl.test.ts | 0 .../test}/unit/wizards/function.test.ts | 0 .../unit/wizards/generalequipment.test.ts | 0 .../open-scd/test}/unit/wizards/gse.test.ts | 0 .../test}/unit/wizards/gsecontrol.test.ts | 0 .../open-scd/test}/unit/wizards/ied.test.ts | 0 .../open-scd/test}/unit/wizards/line.test.ts | 0 .../open-scd/test}/unit/wizards/lnode.test.ts | 0 .../test}/unit/wizards/optfields.test.ts | 0 .../unit/wizards/powertransformer.test.ts | 0 .../test}/unit/wizards/process.test.ts | 0 .../test}/unit/wizards/reportcontrol.test.ts | 0 .../unit/wizards/sampledvaluecontrol.test.ts | 0 .../test}/unit/wizards/services.test.ts | 0 .../open-scd/test}/unit/wizards/smv.test.ts | 0 .../test}/unit/wizards/smvopts.test.ts | 0 .../test}/unit/wizards/sub-equipment.test.ts | 0 .../test}/unit/wizards/subfunction.test.ts | 0 .../test}/unit/wizards/subnetwork.test.ts | 0 .../test}/unit/wizards/substation.test.ts | 0 .../test}/unit/wizards/tapchanger.test.ts | 0 .../test}/unit/wizards/terminal.test.ts | 0 .../test}/unit/wizards/test-support.ts | 0 .../unit/wizards/transformerwinding.test.ts | 0 .../test}/unit/wizards/trgops.test.ts | 0 .../test}/unit/wizards/voltagelevel.test.ts | 0 .../open-scd/tsconfig.json | 0 .../open-scd/web-test-runner.config.mjs | 0 .../open-scd/workbox-config.cjs | 0 861 files changed, 36202 insertions(+), 19496 deletions(-) create mode 100644 docs/decisions/0002-use-monorepo.md create mode 100644 docs/decisions/README.md create mode 100644 packages/open-scd/.gitignore rename .nojekyll => packages/open-scd/.nojekyll (100%) rename CC-EULA.pdf => packages/open-scd/CC-EULA.pdf (100%) rename CHANGELOG.md => packages/open-scd/CHANGELOG.md (100%) rename LICENSE.md => packages/open-scd/LICENSE.md (100%) create mode 100644 packages/open-scd/README.md rename ROADMAP.md => packages/open-scd/ROADMAP.md (100%) rename browserconfig.xml => packages/open-scd/browserconfig.xml (100%) rename favicon.ico => packages/open-scd/favicon.ico (100%) rename index.html => packages/open-scd/index.html (100%) rename manifest.json => packages/open-scd/manifest.json (100%) create mode 100644 packages/open-scd/package-lock.json create mode 100644 packages/open-scd/package.json rename {public => packages/open-scd/public}/ace/ext-searchbox.js (100%) rename {public => packages/open-scd/public}/ace/mode-xml.js (100%) rename {public => packages/open-scd/public}/ace/theme-solarized_dark.js (100%) rename {public => packages/open-scd/public}/ace/theme-solarized_light.js (100%) rename {public => packages/open-scd/public}/ace/worker-xml.js (100%) rename {public => packages/open-scd/public}/apple-touch-icon.png (100%) rename {public => packages/open-scd/public}/css/normalize.css (100%) rename {public => packages/open-scd/public}/favicon-16x16.png (100%) rename {public => packages/open-scd/public}/favicon-32x32.png (100%) rename {public => packages/open-scd/public}/google/fonts/roboto-mono-v13-latin-300.ttf (100%) rename {public => packages/open-scd/public}/google/fonts/roboto-mono-v13-latin-300.woff (100%) rename {public => packages/open-scd/public}/google/fonts/roboto-mono-v13-latin-300.woff2 (100%) rename {public => packages/open-scd/public}/google/fonts/roboto-mono-v13.css (100%) rename {public => packages/open-scd/public}/google/fonts/roboto-v27-latin-300.ttf (100%) rename {public => packages/open-scd/public}/google/fonts/roboto-v27-latin-300.woff (100%) rename {public => packages/open-scd/public}/google/fonts/roboto-v27-latin-300.woff2 (100%) rename {public => packages/open-scd/public}/google/fonts/roboto-v27-latin-500.ttf (100%) rename {public => packages/open-scd/public}/google/fonts/roboto-v27-latin-500.woff (100%) rename {public => packages/open-scd/public}/google/fonts/roboto-v27-latin-500.woff2 (100%) rename {public => packages/open-scd/public}/google/fonts/roboto-v27-latin-regular.ttf (100%) rename {public => packages/open-scd/public}/google/fonts/roboto-v27-latin-regular.woff (100%) rename {public => packages/open-scd/public}/google/fonts/roboto-v27-latin-regular.woff2 (100%) rename {public => packages/open-scd/public}/google/fonts/roboto-v27.css (100%) rename {public => packages/open-scd/public}/google/icons/material-icons-outlined.css (100%) rename {public => packages/open-scd/public}/google/icons/material-icons-outlined.woff2 (100%) rename {public => packages/open-scd/public}/icon-192x192.png (100%) rename {public => packages/open-scd/public}/icon-512x512.png (100%) rename {public => packages/open-scd/public}/icon.svg (100%) rename {public => packages/open-scd/public}/js/plugins.js (100%) rename {public => packages/open-scd/public}/js/worker.js (100%) rename {public => packages/open-scd/public}/js/xmlvalidate.js (100%) rename {public => packages/open-scd/public}/js/xmlvalidate.wasm (100%) rename {public => packages/open-scd/public}/maskable_icon.png (100%) rename {public => packages/open-scd/public}/md/Add-DAType-from-templates.md (100%) rename {public => packages/open-scd/public}/md/Add-DOType-from-templates.md (100%) rename {public => packages/open-scd/public}/md/Add-EnumType-from-templates.md (100%) rename {public => packages/open-scd/public}/md/Add-LNodeType-from-templates.md (100%) rename {public => packages/open-scd/public}/md/All-template-editor-wizards.md (100%) rename {public => packages/open-scd/public}/md/Bay.md (100%) rename {public => packages/open-scd/public}/md/ClientLN.md (100%) rename {public => packages/open-scd/public}/md/Communication-Basics.md (100%) rename {public => packages/open-scd/public}/md/Conducting-Equipment.md (100%) rename {public => packages/open-scd/public}/md/ConnectedAP.md (100%) rename {public => packages/open-scd/public}/md/Create-GOOSE-Control-Blocks.md (100%) rename {public => packages/open-scd/public}/md/Create-Report-Control-Blocks.md (100%) rename {public => packages/open-scd/public}/md/Create-Sampled-Values-Control-Blocks.md (100%) rename {public => packages/open-scd/public}/md/Create-Specification-IED-from-functions.md (100%) rename {public => packages/open-scd/public}/md/Data-attribute-type-DAType.md (100%) rename {public => packages/open-scd/public}/md/Data-attribute-type-child-BDA.md (100%) rename {public => packages/open-scd/public}/md/Data-object-type-DOType.md (100%) rename {public => packages/open-scd/public}/md/Data-object-type-child-DA.md (100%) rename {public => packages/open-scd/public}/md/Data-object-type-child-SDO.md (100%) rename {public => packages/open-scd/public}/md/DataTypeTemplates.md (100%) rename {public => packages/open-scd/public}/md/Edit-GOOSE-Control-Blocks.md (100%) rename {public => packages/open-scd/public}/md/Edit-Report-Control-Blocks.md (100%) rename {public => packages/open-scd/public}/md/Edit-Sampled-Value-Control-Blocks.md (100%) rename {public => packages/open-scd/public}/md/Enumeration-EnumType.md (100%) rename {public => packages/open-scd/public}/md/Enumeration-EnumVal.md (100%) rename {public => packages/open-scd/public}/md/Extensions.md (100%) rename {public => packages/open-scd/public}/md/Function.md (100%) rename {public => packages/open-scd/public}/md/Functional-Naming-Basics.md (100%) rename {public => packages/open-scd/public}/md/Generic-Substation-Event-Basics.md (100%) rename {public => packages/open-scd/public}/md/Global-SCL-manipulation.md (100%) rename {public => packages/open-scd/public}/md/Guess-substation-structure.md (100%) rename {public => packages/open-scd/public}/md/Home.md (100%) rename {public => packages/open-scd/public}/md/IED.md (100%) rename {public => packages/open-scd/public}/md/Import-IEDs.md (100%) rename {public => packages/open-scd/public}/md/Install-OpenSCD.md (100%) rename {public => packages/open-scd/public}/md/Interface.md (100%) rename {public => packages/open-scd/public}/md/Logical-Node-Reference.md (100%) rename {public => packages/open-scd/public}/md/Logical-node-type-LNodeType.md (100%) rename {public => packages/open-scd/public}/md/Logical-node-type-child-DO.md (100%) rename {public => packages/open-scd/public}/md/Merge-functionality.md (100%) rename {public => packages/open-scd/public}/md/Power-Transformer.md (100%) rename {public => packages/open-scd/public}/md/Project-workflow.md (100%) rename {public => packages/open-scd/public}/md/Report-Basics.md (100%) rename {public => packages/open-scd/public}/md/Sampled-Values-Basics.md (100%) rename {public => packages/open-scd/public}/md/Save-project.md (100%) rename {public => packages/open-scd/public}/md/Start-from-scratch.md (100%) rename {public => packages/open-scd/public}/md/Start-from-template.md (100%) rename {public => packages/open-scd/public}/md/Subnetwork.md (100%) rename {public => packages/open-scd/public}/md/Subscribe-complete-GOOSE.md (100%) rename {public => packages/open-scd/public}/md/Subscribe-complete-SMV.md (100%) rename {public => packages/open-scd/public}/md/Subscriber-basics.md (100%) rename {public => packages/open-scd/public}/md/Substation-Section-Basics.md (100%) rename {public => packages/open-scd/public}/md/Substation.md (100%) rename {public => packages/open-scd/public}/md/Update-subscriber-info.md (100%) rename {public => packages/open-scd/public}/md/Validate-schema.md (100%) rename {public => packages/open-scd/public}/md/Validate-template.md (100%) rename {public => packages/open-scd/public}/md/Validators.md (100%) rename {public => packages/open-scd/public}/md/Voltage-Level.md (100%) rename {public => packages/open-scd/public}/md/XML-code-editor.md (100%) rename {public => packages/open-scd/public}/md/_Sidebar.md (100%) rename {public => packages/open-scd/public}/monochrome_icon.png (100%) rename {public => packages/open-scd/public}/mstile-144x144.png (100%) rename {public => packages/open-scd/public}/mstile-150x150.png (100%) rename {public => packages/open-scd/public}/mstile-310x150.png (100%) rename {public => packages/open-scd/public}/mstile-310x310.png (100%) rename {public => packages/open-scd/public}/mstile-70x70.png (100%) rename {public => packages/open-scd/public}/xml/IEC_61850-7-2_2007B3.nsd (100%) rename {public => packages/open-scd/public}/xml/IEC_61850-7-3_2007B3.nsd (100%) rename {public => packages/open-scd/public}/xml/IEC_61850-7-420_2019A4.nsd (100%) rename {public => packages/open-scd/public}/xml/IEC_61850-7-4_2007B3.nsd (100%) rename {public => packages/open-scd/public}/xml/IEC_61850-8-1_2003A2.nsd (100%) rename {public => packages/open-scd/public}/xml/templates.scd (100%) rename snowpack.config.mjs => packages/open-scd/snowpack.config.mjs (100%) rename {src => packages/open-scd/src}/Editing.ts (100%) rename {src => packages/open-scd/src}/Hosting.ts (100%) rename {src => packages/open-scd/src}/Logging.ts (100%) rename {src => packages/open-scd/src}/Plugging.ts (100%) rename {src => packages/open-scd/src}/Setting.ts (100%) rename {src => packages/open-scd/src}/Waiting.ts (100%) rename {src => packages/open-scd/src}/WizardDivider.ts (100%) rename {src => packages/open-scd/src}/Wizarding.ts (100%) rename {src => packages/open-scd/src}/action-icon.ts (100%) rename {src => packages/open-scd/src}/action-pane.ts (100%) rename {src => packages/open-scd/src}/editors/Cleanup.ts (100%) rename {src => packages/open-scd/src}/editors/Communication.ts (100%) rename {src => packages/open-scd/src}/editors/GooseSubscriberDataBinding.ts (100%) rename {src => packages/open-scd/src}/editors/GooseSubscriberLaterBinding.ts (100%) rename {src => packages/open-scd/src}/editors/GooseSubscriberMessageBinding.ts (100%) rename {src => packages/open-scd/src}/editors/IED.ts (100%) rename {src => packages/open-scd/src}/editors/Protocol104.ts (100%) rename {src => packages/open-scd/src}/editors/Publisher.ts (100%) rename {src => packages/open-scd/src}/editors/SMVSubscriberDataBinding.ts (100%) rename {src => packages/open-scd/src}/editors/SMVSubscriberLaterBinding.ts (100%) rename {src => packages/open-scd/src}/editors/SMVSubscriberMessageBinding.ts (100%) rename {src => packages/open-scd/src}/editors/SingleLineDiagram.ts (100%) rename {src => packages/open-scd/src}/editors/Substation.ts (100%) rename {src => packages/open-scd/src}/editors/Templates.ts (100%) rename {src => packages/open-scd/src}/editors/cleanup/control-blocks-container.ts (100%) rename {src => packages/open-scd/src}/editors/cleanup/datasets-container.ts (100%) rename {src => packages/open-scd/src}/editors/cleanup/datatypes-container.ts (100%) rename {src => packages/open-scd/src}/editors/cleanup/foundation.ts (100%) rename {src => packages/open-scd/src}/editors/communication/connectedap-editor.ts (100%) rename {src => packages/open-scd/src}/editors/communication/gse-editor.ts (100%) rename {src => packages/open-scd/src}/editors/communication/smv-editor.ts (100%) rename {src => packages/open-scd/src}/editors/communication/subnetwork-editor.ts (100%) rename {src => packages/open-scd/src}/editors/ied/access-point-container.ts (100%) rename {src => packages/open-scd/src}/editors/ied/da-container.ts (100%) rename {src => packages/open-scd/src}/editors/ied/da-wizard.ts (100%) rename {src => packages/open-scd/src}/editors/ied/do-container.ts (100%) rename {src => packages/open-scd/src}/editors/ied/do-wizard.ts (100%) rename {src => packages/open-scd/src}/editors/ied/element-path.ts (100%) rename {src => packages/open-scd/src}/editors/ied/foundation.ts (100%) rename {src => packages/open-scd/src}/editors/ied/ied-container.ts (100%) rename {src => packages/open-scd/src}/editors/ied/ldevice-container.ts (100%) rename {src => packages/open-scd/src}/editors/ied/ln-container.ts (100%) rename {src => packages/open-scd/src}/editors/ied/server-container.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/base-container.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/connectedap-editor.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/doi-container.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/foundation/actions.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/foundation/cdc.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/foundation/foundation.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/foundation/p-types.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/foundation/private.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/ied-container.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/network-container.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/subnetwork-container.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/values-container.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/wizards/address.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/wizards/connectedap.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/wizards/createAddresses.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/wizards/doi.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/wizards/logiclink.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/wizards/redundancygroup.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/wizards/selectDo.ts (100%) rename {src => packages/open-scd/src}/editors/protocol104/wizards/subnetwork.ts (100%) rename {src => packages/open-scd/src}/editors/publisher/data-set-editor.ts (100%) rename {src => packages/open-scd/src}/editors/publisher/data-set-element-editor.ts (100%) rename {src => packages/open-scd/src}/editors/publisher/foundation.ts (100%) rename {src => packages/open-scd/src}/editors/publisher/gse-control-editor.ts (100%) rename {src => packages/open-scd/src}/editors/publisher/gse-control-element-editor.ts (100%) rename {src => packages/open-scd/src}/editors/publisher/report-control-editor.ts (100%) rename {src => packages/open-scd/src}/editors/publisher/report-control-element-editor.ts (100%) rename {src => packages/open-scd/src}/editors/publisher/sampled-value-control-editor.ts (100%) rename {src => packages/open-scd/src}/editors/publisher/sampled-value-control-element-editor.ts (100%) rename {src => packages/open-scd/src}/editors/singlelinediagram/foundation.ts (100%) rename {src => packages/open-scd/src}/editors/singlelinediagram/ortho-connector.ts (100%) rename {src => packages/open-scd/src}/editors/singlelinediagram/sld-drawing.ts (100%) rename {src => packages/open-scd/src}/editors/singlelinediagram/wizards/bay.ts (100%) rename {src => packages/open-scd/src}/editors/singlelinediagram/wizards/conductingequipment.ts (100%) rename {src => packages/open-scd/src}/editors/singlelinediagram/wizards/foundation.ts (100%) rename {src => packages/open-scd/src}/editors/singlelinediagram/wizards/powertransformer.ts (100%) rename {src => packages/open-scd/src}/editors/singlelinediagram/wizards/wizard-library.ts (100%) rename {src => packages/open-scd/src}/editors/subscription/fcda-binding-list.ts (100%) rename {src => packages/open-scd/src}/editors/subscription/foundation.ts (100%) rename {src => packages/open-scd/src}/editors/subscription/goose/foundation.ts (100%) rename {src => packages/open-scd/src}/editors/subscription/goose/goose-list.ts (100%) rename {src => packages/open-scd/src}/editors/subscription/goose/subscriber-list.ts (100%) rename {src => packages/open-scd/src}/editors/subscription/ied-list.ts (100%) rename {src => packages/open-scd/src}/editors/subscription/later-binding/ext-ref-later-binding-list.ts (100%) rename {src => packages/open-scd/src}/editors/subscription/later-binding/ext-ref-ln-binding-list.ts (100%) rename {src => packages/open-scd/src}/editors/subscription/later-binding/foundation.ts (100%) rename {src => packages/open-scd/src}/editors/subscription/sampledvalues/foundation.ts (100%) rename {src => packages/open-scd/src}/editors/subscription/sampledvalues/smv-list.ts (100%) rename {src => packages/open-scd/src}/editors/subscription/sampledvalues/subscriber-list.ts (100%) rename {src => packages/open-scd/src}/editors/substation/bay-editor.ts (100%) rename {src => packages/open-scd/src}/editors/substation/conducting-equipment-editor.ts (100%) rename {src => packages/open-scd/src}/editors/substation/eq-function-editor.ts (100%) rename {src => packages/open-scd/src}/editors/substation/eq-sub-function-editor.ts (100%) rename {src => packages/open-scd/src}/editors/substation/foundation.ts (100%) rename {src => packages/open-scd/src}/editors/substation/function-editor.ts (100%) rename {src => packages/open-scd/src}/editors/substation/general-equipment-editor.ts (100%) rename {src => packages/open-scd/src}/editors/substation/guess-wizard.ts (100%) rename {src => packages/open-scd/src}/editors/substation/ied-editor.ts (100%) rename {src => packages/open-scd/src}/editors/substation/l-node-editor.ts (100%) rename {src => packages/open-scd/src}/editors/substation/line-editor.ts (100%) rename {src => packages/open-scd/src}/editors/substation/powertransformer-editor.ts (100%) rename {src => packages/open-scd/src}/editors/substation/process-editor.ts (100%) rename {src => packages/open-scd/src}/editors/substation/sub-equipment-editor.ts (100%) rename {src => packages/open-scd/src}/editors/substation/sub-function-editor.ts (100%) rename {src => packages/open-scd/src}/editors/substation/substation-editor.ts (100%) rename {src => packages/open-scd/src}/editors/substation/tapchanger-editor.ts (100%) rename {src => packages/open-scd/src}/editors/substation/transformer-winding-editor.ts (100%) rename {src => packages/open-scd/src}/editors/substation/voltage-level-editor.ts (100%) rename {src => packages/open-scd/src}/editors/substation/zeroline-pane.ts (100%) rename {src => packages/open-scd/src}/editors/templates/datype-wizards.ts (100%) rename {src => packages/open-scd/src}/editors/templates/dotype-wizards.ts (100%) rename {src => packages/open-scd/src}/editors/templates/enumtype-wizard.ts (100%) rename {src => packages/open-scd/src}/editors/templates/foundation.ts (100%) rename {src => packages/open-scd/src}/editors/templates/lnodetype-wizard.ts (100%) rename {src => packages/open-scd/src}/filtered-list.ts (100%) rename {src => packages/open-scd/src}/finder-list.ts (100%) rename {src => packages/open-scd/src}/foundation.ts (100%) rename {src => packages/open-scd/src}/foundation/compare.ts (100%) rename {src => packages/open-scd/src}/foundation/dai.ts (100%) rename {src => packages/open-scd/src}/foundation/generators.ts (100%) rename {src => packages/open-scd/src}/foundation/ied.ts (100%) rename {src => packages/open-scd/src}/foundation/nsdoc.ts (100%) rename {src => packages/open-scd/src}/foundation/scl.ts (100%) rename {src => packages/open-scd/src}/icons/compare.ts (100%) rename {src => packages/open-scd/src}/icons/icons.ts (100%) rename {src => packages/open-scd/src}/icons/ied-icons.ts (100%) rename {src => packages/open-scd/src}/icons/lnode.ts (100%) rename {src => packages/open-scd/src}/menu/CompareIED.ts (100%) rename {src => packages/open-scd/src}/menu/ExportCommunication.ts (100%) rename {src => packages/open-scd/src}/menu/Help.ts (100%) rename {src => packages/open-scd/src}/menu/ImportIEDs.ts (100%) rename {src => packages/open-scd/src}/menu/Merge.ts (100%) rename {src => packages/open-scd/src}/menu/NewProject.ts (100%) rename {src => packages/open-scd/src}/menu/OpenProject.ts (100%) rename {src => packages/open-scd/src}/menu/SaveProject.ts (100%) rename {src => packages/open-scd/src}/menu/SclHistory.ts (100%) rename {src => packages/open-scd/src}/menu/SubscriberInfo.ts (100%) rename {src => packages/open-scd/src}/menu/UpdateDescriptionABB.ts (100%) rename {src => packages/open-scd/src}/menu/UpdateDescriptionSEL.ts (100%) rename {src => packages/open-scd/src}/menu/UpdateSubstation.ts (100%) rename {src => packages/open-scd/src}/menu/VirtualTemplateIED.ts (100%) rename {src => packages/open-scd/src}/menu/virtualtemplateied/foundation.ts (100%) rename {src => packages/open-scd/src}/open-scd.ts (100%) rename {src => packages/open-scd/src}/oscd-filter-button.ts (100%) rename {src => packages/open-scd/src}/plain-compare-list.ts (100%) rename {src => packages/open-scd/src}/schemas.ts (100%) rename {src => packages/open-scd/src}/themes.ts (100%) rename {src => packages/open-scd/src}/translations/de.ts (100%) rename {src => packages/open-scd/src}/translations/en.ts (100%) rename {src => packages/open-scd/src}/translations/loader.ts (100%) rename {src => packages/open-scd/src}/validators/ValidateSchema.ts (100%) rename {src => packages/open-scd/src}/validators/ValidateTemplates.ts (100%) rename {src => packages/open-scd/src}/validators/templates/dabda.ts (100%) rename {src => packages/open-scd/src}/validators/templates/datype.ts (100%) rename {src => packages/open-scd/src}/validators/templates/dosdo.ts (100%) rename {src => packages/open-scd/src}/validators/templates/dotype.ts (100%) rename {src => packages/open-scd/src}/validators/templates/foundation.ts (100%) rename {src => packages/open-scd/src}/validators/templates/lnodetype.ts (100%) rename {src => packages/open-scd/src}/wizard-checkbox.ts (100%) rename {src => packages/open-scd/src}/wizard-dialog.ts (100%) rename {src => packages/open-scd/src}/wizard-select.ts (100%) rename {src => packages/open-scd/src}/wizard-textfield.ts (100%) rename {src => packages/open-scd/src}/wizards.ts (100%) rename {src => packages/open-scd/src}/wizards/abstractda.ts (100%) rename {src => packages/open-scd/src}/wizards/address.ts (100%) rename {src => packages/open-scd/src}/wizards/bay.ts (100%) rename {src => packages/open-scd/src}/wizards/bda.ts (100%) rename {src => packages/open-scd/src}/wizards/clientln.ts (100%) rename {src => packages/open-scd/src}/wizards/commmap-wizards.ts (100%) rename {src => packages/open-scd/src}/wizards/conductingequipment.ts (100%) rename {src => packages/open-scd/src}/wizards/connectedap.ts (100%) rename {src => packages/open-scd/src}/wizards/connectivitynode.ts (100%) rename {src => packages/open-scd/src}/wizards/controlwithiedname.ts (100%) rename {src => packages/open-scd/src}/wizards/da.ts (100%) rename {src => packages/open-scd/src}/wizards/dai.ts (100%) rename {src => packages/open-scd/src}/wizards/dataset.ts (100%) rename {src => packages/open-scd/src}/wizards/eqfunction.ts (100%) rename {src => packages/open-scd/src}/wizards/eqsubfunction.ts (100%) rename {src => packages/open-scd/src}/wizards/fcda.ts (100%) rename {src => packages/open-scd/src}/wizards/foundation/actions.ts (100%) rename {src => packages/open-scd/src}/wizards/foundation/dai-field-type.ts (100%) rename {src => packages/open-scd/src}/wizards/foundation/enums.ts (100%) rename {src => packages/open-scd/src}/wizards/foundation/finder.ts (100%) rename {src => packages/open-scd/src}/wizards/foundation/limits.ts (100%) rename {src => packages/open-scd/src}/wizards/foundation/p-types.ts (100%) rename {src => packages/open-scd/src}/wizards/foundation/references.ts (100%) rename {src => packages/open-scd/src}/wizards/foundation/scl.ts (100%) rename {src => packages/open-scd/src}/wizards/function.ts (100%) rename {src => packages/open-scd/src}/wizards/generalEquipment.ts (100%) rename {src => packages/open-scd/src}/wizards/gse.ts (100%) rename {src => packages/open-scd/src}/wizards/gsecontrol.ts (100%) rename {src => packages/open-scd/src}/wizards/ied.ts (100%) rename {src => packages/open-scd/src}/wizards/line.ts (100%) rename {src => packages/open-scd/src}/wizards/lnode.ts (100%) rename {src => packages/open-scd/src}/wizards/optfields.ts (100%) rename {src => packages/open-scd/src}/wizards/powertransformer.ts (100%) rename {src => packages/open-scd/src}/wizards/process.ts (100%) rename {src => packages/open-scd/src}/wizards/reportcontrol.ts (100%) rename {src => packages/open-scd/src}/wizards/sampledvaluecontrol.ts (100%) rename {src => packages/open-scd/src}/wizards/service-GSEControl.ts (100%) rename {src => packages/open-scd/src}/wizards/service-clientServer-configurations.ts (100%) rename {src => packages/open-scd/src}/wizards/service-log-settingsgroup.ts (100%) rename {src => packages/open-scd/src}/wizards/service-networking.ts (100%) rename {src => packages/open-scd/src}/wizards/service-report-configurations.ts (100%) rename {src => packages/open-scd/src}/wizards/service-sampled-values.ts (100%) rename {src => packages/open-scd/src}/wizards/services.ts (100%) rename {src => packages/open-scd/src}/wizards/smv.ts (100%) rename {src => packages/open-scd/src}/wizards/smvopts.ts (100%) rename {src => packages/open-scd/src}/wizards/subequipment.ts (100%) rename {src => packages/open-scd/src}/wizards/subfunction.ts (100%) rename {src => packages/open-scd/src}/wizards/subnetwork.ts (100%) rename {src => packages/open-scd/src}/wizards/substation.ts (100%) rename {src => packages/open-scd/src}/wizards/tapchanger.ts (100%) rename {src => packages/open-scd/src}/wizards/terminal.ts (100%) rename {src => packages/open-scd/src}/wizards/transformerWinding.ts (100%) rename {src => packages/open-scd/src}/wizards/trgops.ts (100%) rename {src => packages/open-scd/src}/wizards/voltagelevel.ts (100%) rename {src => packages/open-scd/src}/wizards/wizard-library.ts (100%) rename sw.js => packages/open-scd/sw.js (100%) rename {test => packages/open-scd/test}/foundation.ts (100%) rename {test => packages/open-scd/test}/integration/Editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/Setting.test.ts (100%) rename {test => packages/open-scd/test}/integration/__snapshots__/Setting.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/__snapshots__/open-scd.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/GooseSubscriberDataBinding.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/GooseSubscriberLaterBinding.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/GooseSubscriberMessageBinding.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/IED.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/Protocol104.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/SMVSubscriberDataBinding.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/SMVSubscriberLaterBinding.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/SMVSubscriberMessageBinding.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/Substation.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/__snapshots__/Cleanup.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/__snapshots__/GooseSubscriberLaterBinding.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/__snapshots__/GooseSubscriberMessageBinding.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/__snapshots__/IED.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/__snapshots__/Protocol104.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/__snapshots__/SMVSubscriberLaterBinding.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/__snapshots__/SMVSubscriberMessageBinding.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/__snapshots__/Substation.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/cleanup/__snapshots__/control-blocks-container.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/cleanup/__snapshots__/datasets-container.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/cleanup/__snapshots__/datatypes-container.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/cleanup/control-blocks-container.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/cleanup/datasets-container.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/cleanup/datatypes-container.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/communication/Communication.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/communication/__snapshots__/Communication.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/communication/connectedap-editor-wizarding-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/communication/gse-editor-wizarding-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/communication/smv-editor-wizarding-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/communication/subnetwork-editor-wizarding-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/communication/subnetwork-editor-wizarding.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/__snapshots__/bay-editor-wizarding.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/substation/__snapshots__/conducting-equipment-editor-wizarding.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/substation/__snapshots__/substation-editor-wizarding.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/substation/__snapshots__/voltage-level-editor-wizarding.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/substation/bay-editor-wizarding-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/bay-editor-wizarding.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/conducting-equipment-editor-wizarding-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/conducting-equipment-editor-wizarding.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/eq-function-wizarding-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/eq-sub-function-editor-wizarding-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/function-editor.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/general-equipment-editor-wizard-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/guess-wizarding-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/ied-editor-wizarding-integration.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/l-node-editor-wizarding-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/line-editor-wizard-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/lnodewizard.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/powertransformer-editor-wizarding-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/process-editor-wizard-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/sub-equipment-wizarding-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/sub-function-editor.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/substation-editor-wizarding-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/substation-editor-wizarding.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/tapchanger-editor-wizard-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/transformer-winding-editor-wizard-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/voltage-level-editor-wizarding-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/voltage-level-editor-wizarding.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/substation/zeroline-pane.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/templates/Templates.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/templates/__snapshots__/Templates.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/templates/__snapshots__/datype-wizarding.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/templates/__snapshots__/dotype-wizarding.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/templates/__snapshots__/enumtype-wizarding.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/templates/__snapshots__/lnodetype-wizard.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/editors/templates/datype-wizarding.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/templates/dotype-wizarding.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/templates/enumtype-wizarding.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/templates/lnodetype-wizard.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/test-support.ts (100%) rename {test => packages/open-scd/test}/integration/editors/triggered/CommunicationMappingPlugin.test.ts (100%) rename {test => packages/open-scd/test}/integration/editors/triggered/ImportIedsPlugin.test.ts (100%) rename {test => packages/open-scd/test}/integration/menu/ExportCommunication.test.ts (100%) rename {test => packages/open-scd/test}/integration/menu/NewProject.test.ts (100%) rename {test => packages/open-scd/test}/integration/menu/UpdateDescritionABB.test.ts (100%) rename {test => packages/open-scd/test}/integration/open-scd.test.ts (100%) rename {test => packages/open-scd/test}/integration/validators/ValidateSchema.test.ts (100%) rename {test => packages/open-scd/test}/integration/validators/ValidateTemplates.test.ts (100%) rename {test => packages/open-scd/test}/integration/validators/__snapshots__/ValidateSchema.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/validators/__snapshots__/ValidateTemplates.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/wizards/__snapshots__/bda-wizarding-editing.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/wizards/__snapshots__/da-wizarding-editing.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/wizards/__snapshots__/services-wizard.test.snap.js (100%) rename {test => packages/open-scd/test}/integration/wizards/bda-wizarding-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/wizards/connectedap-wizarding-editing-integration.test.ts (100%) rename {test => packages/open-scd/test}/integration/wizards/da-wizarding-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/wizards/dataset-wizarding-editing-integration.test.ts (100%) rename {test => packages/open-scd/test}/integration/wizards/fcda-wizarding-editing-integration.test.ts (100%) rename {test => packages/open-scd/test}/integration/wizards/gse-wizarding-editing-integration.test.ts (100%) rename {test => packages/open-scd/test}/integration/wizards/gsecontrolwizarding-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/wizards/reportcontrol-wizarding-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/wizards/sampledvaluecontrol-wizarding-editing.test.ts (100%) rename {test => packages/open-scd/test}/integration/wizards/services-wizard.test.ts (100%) rename {test => packages/open-scd/test}/mock-editor-logger.ts (100%) rename {test => packages/open-scd/test}/mock-setter-logger.ts (100%) rename {test => packages/open-scd/test}/mock-wizard-editor.ts (100%) rename {test => packages/open-scd/test}/mock-wizard.ts (100%) rename {test => packages/open-scd/test}/testfiles/104/valid-addresses.scd (100%) rename {test => packages/open-scd/test}/testfiles/104/valid-empty-addresses.scd (100%) rename {test => packages/open-scd/test}/testfiles/104/valid-no-doi.scd (100%) rename {test => packages/open-scd/test}/testfiles/104/valid-no-ied.scd (100%) rename {test => packages/open-scd/test}/testfiles/104/valid-subnetwork.scd (100%) rename {test => packages/open-scd/test}/testfiles/Editing.scd (100%) rename {test => packages/open-scd/test}/testfiles/Services.scd (100%) rename {test => packages/open-scd/test}/testfiles/SubEquipment.scd (100%) rename {test => packages/open-scd/test}/testfiles/cleanup.scd (100%) rename {test => packages/open-scd/test}/testfiles/comm-map.scd (100%) rename {test => packages/open-scd/test}/testfiles/communication.scd (100%) rename {test => packages/open-scd/test}/testfiles/communication/communication.scd (100%) rename {test => packages/open-scd/test}/testfiles/conductingequipmentwizard.scd (100%) rename {test => packages/open-scd/test}/testfiles/editors/DataBindingGOOSE2007B4.scd (100%) rename {test => packages/open-scd/test}/testfiles/editors/DataBindingSMV2007B4.scd (100%) rename {test => packages/open-scd/test}/testfiles/editors/LaterBindingGOOSE-LGOS.scd (100%) rename {test => packages/open-scd/test}/testfiles/editors/LaterBindingGOOSE2007B4.scd (100%) rename {test => packages/open-scd/test}/testfiles/editors/LaterBindingSMV-LSVS.scd (100%) rename {test => packages/open-scd/test}/testfiles/editors/LaterBindingSMV2003.scd (100%) rename {test => packages/open-scd/test}/testfiles/editors/LaterBindingSMV2007B4.scd (100%) rename {test => packages/open-scd/test}/testfiles/editors/MessageBindingGOOSE2007B4.scd (100%) rename {test => packages/open-scd/test}/testfiles/editors/MessageBindingSMV2007B4.scd (100%) rename {test => packages/open-scd/test}/testfiles/editors/iedEditorWithIEDs.scd (100%) rename {test => packages/open-scd/test}/testfiles/editors/iedEditorWithoutIEDs.scd (100%) rename {test => packages/open-scd/test}/testfiles/editors/substation/Line.scd (100%) rename {test => packages/open-scd/test}/testfiles/editors/substation/Process.scd (100%) rename {test => packages/open-scd/test}/testfiles/editors/substation/TapChanger.scd (100%) rename {test => packages/open-scd/test}/testfiles/editors/substation/TransformerWinding.scd (100%) rename {test => packages/open-scd/test}/testfiles/editors/substation/generalequipment.scd (100%) rename {test => packages/open-scd/test}/testfiles/foundation/compare-changed.cid (100%) rename {test => packages/open-scd/test}/testfiles/foundation/compare-original.cid (100%) rename {test => packages/open-scd/test}/testfiles/foundation/sclbasics.scd (100%) rename {test => packages/open-scd/test}/testfiles/foundation/testFile73.nsdoc (100%) rename {test => packages/open-scd/test}/testfiles/foundation/testFile74.nsdoc (100%) rename {test => packages/open-scd/test}/testfiles/foundation/testFile81.nsdoc (100%) rename {test => packages/open-scd/test}/testfiles/history.scd (100%) rename {test => packages/open-scd/test}/testfiles/importieds/duplicate.iid (100%) rename {test => packages/open-scd/test}/testfiles/importieds/emptyproject.scd (100%) rename {test => packages/open-scd/test}/testfiles/importieds/invalid.iid (100%) rename {test => packages/open-scd/test}/testfiles/importieds/multipleied.scd (100%) rename {test => packages/open-scd/test}/testfiles/importieds/parsererror.iid (100%) rename {test => packages/open-scd/test}/testfiles/importieds/template.icd (100%) rename {test => packages/open-scd/test}/testfiles/importieds/valid.iid (100%) rename {test => packages/open-scd/test}/testfiles/invalid2007B.scd (100%) rename {test => packages/open-scd/test}/testfiles/lnodewizard.scd (100%) rename {test => packages/open-scd/test}/testfiles/menu/compare-ied-changed.scd (100%) rename {test => packages/open-scd/test}/testfiles/menu/compare-ied-original.scd (100%) rename {test => packages/open-scd/test}/testfiles/missingCommunication.scd (100%) rename {test => packages/open-scd/test}/testfiles/missingSubstation.scd (100%) rename {test => packages/open-scd/test}/testfiles/no-history.scd (100%) rename {test => packages/open-scd/test}/testfiles/nsdoc/IEC_61850-7-2.nsdoc (100%) rename {test => packages/open-scd/test}/testfiles/nsdoc/invalid.nsdoc (100%) rename {test => packages/open-scd/test}/testfiles/nsdoc/wrong-version.nsdoc (100%) rename {test => packages/open-scd/test}/testfiles/subscriberinfo2003.scd (100%) rename {test => packages/open-scd/test}/testfiles/subscriberinfo2007.scd (100%) rename {test => packages/open-scd/test}/testfiles/templates/datypes.scd (100%) rename {test => packages/open-scd/test}/testfiles/templates/dotypes.scd (100%) rename {test => packages/open-scd/test}/testfiles/templates/missingdatatypes.scd (100%) rename {test => packages/open-scd/test}/testfiles/updatedesc/testSignalListComma.csv (100%) rename {test => packages/open-scd/test}/testfiles/updatedesc/testSignalListSemicolon.csv (100%) rename {test => packages/open-scd/test}/testfiles/updatedesc/updatedescABB.scd (100%) rename {test => packages/open-scd/test}/testfiles/updatedesc/updatedescSEL.scd (100%) rename {test => packages/open-scd/test}/testfiles/updatesubstation-ours.scd (100%) rename {test => packages/open-scd/test}/testfiles/valid2003.scd (100%) rename {test => packages/open-scd/test}/testfiles/valid2007B.scd (100%) rename {test => packages/open-scd/test}/testfiles/valid2007B4.scd (100%) rename {test => packages/open-scd/test}/testfiles/valid2007B4ForDAIValidation.scd (100%) rename {test => packages/open-scd/test}/testfiles/valid2007B4withIEDModifications.scd (100%) rename {test => packages/open-scd/test}/testfiles/valid2007B4withSubstationXY.scd (100%) rename {test => packages/open-scd/test}/testfiles/validators/datatypetemplateerrors.scd (100%) rename {test => packages/open-scd/test}/testfiles/validators/doandsdotestfile.scd (100%) rename {test => packages/open-scd/test}/testfiles/validators/zeroissues.scd (100%) rename {test => packages/open-scd/test}/testfiles/virtualied/specificfromfunctions.ssd (100%) rename {test => packages/open-scd/test}/testfiles/wizards/abstractda.scd (100%) rename {test => packages/open-scd/test}/testfiles/wizards/communication.scd (100%) rename {test => packages/open-scd/test}/testfiles/wizards/fcda.scd (100%) rename {test => packages/open-scd/test}/testfiles/wizards/gsecontrol.scd (100%) rename {test => packages/open-scd/test}/testfiles/wizards/ied.scd (100%) rename {test => packages/open-scd/test}/testfiles/wizards/references.scd (100%) rename {test => packages/open-scd/test}/testfiles/wizards/reportcontrol.scd (100%) rename {test => packages/open-scd/test}/testfiles/wizards/sampledvaluecontrol.scd (100%) rename {test => packages/open-scd/test}/testfiles/wizards/settingGroups.scd (100%) rename {test => packages/open-scd/test}/testfiles/wizards/substation.scd (100%) rename {test => packages/open-scd/test}/testfiles/zeroline/clone/noUnusedLNode.scd (100%) rename {test => packages/open-scd/test}/testfiles/zeroline/clone/refMissmatch.scd (100%) rename {test => packages/open-scd/test}/testfiles/zeroline/clone/specificationOnly.scd (100%) rename {test => packages/open-scd/test}/testfiles/zeroline/clone/validRedirect.scd (100%) rename {test => packages/open-scd/test}/testfiles/zeroline/functions.scd (100%) rename {test => packages/open-scd/test}/testfiles/zeroline/iedalloctest.scd (100%) rename {test => packages/open-scd/test}/testfiles/zeroline/substationonly.scd (100%) rename {test => packages/open-scd/test}/unit/Editing.test.ts (100%) rename {test => packages/open-scd/test}/unit/Logging.test.ts (100%) rename {test => packages/open-scd/test}/unit/Plugging.test.ts (100%) rename {test => packages/open-scd/test}/unit/Setting.test.ts (100%) rename {test => packages/open-scd/test}/unit/Waiting.test.ts (100%) rename {test => packages/open-scd/test}/unit/Wizarding.test.ts (100%) rename {test => packages/open-scd/test}/unit/__snapshots__/Setting.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/__snapshots__/action-icon.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/__snapshots__/action-pane.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/__snapshots__/filtered-list.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/__snapshots__/finder-list.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/__snapshots__/oscd-filter-button.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/__snapshots__/plain-compare-list.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/__snapshots__/wizard-dialog.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/action-icon.test.ts (100%) rename {test => packages/open-scd/test}/unit/action-pane.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/GooseSubscriberDataBinding.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/GooseSubscriberLaterBinding.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/Publisher.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/SMVSubscriberDataBinding.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/SMVSubscriberLaterBinding.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/__snapshots__/GooseSubscriberDataBinding.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/__snapshots__/GooseSubscriberLaterBinding.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/__snapshots__/Publisher.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/__snapshots__/SMVSubscriberDataBinding.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/__snapshots__/SMVSubscriberLaterBinding.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/cleanup/__snapshots__/control-blocks-container.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/cleanup/__snapshots__/datasets-container.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/cleanup/__snapshots__/datatypes-container.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/cleanup/control-blocks-container.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/cleanup/datasets-container.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/cleanup/datatypes-container.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/cleanup/foundation.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/communication/__snapshots__/conductingap-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/communication/__snapshots__/gse-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/communication/__snapshots__/smv-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/communication/__snapshots__/subnetwork-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/communication/conductingap-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/communication/gse-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/communication/smv-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/communication/subnetwork-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/ied/__snapshots__/access-point-container.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/ied/__snapshots__/da-container.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/ied/__snapshots__/da-wizard.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/ied/__snapshots__/do-container.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/ied/__snapshots__/do-wizard.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/ied/__snapshots__/element-path.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/ied/__snapshots__/ied-container.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/ied/__snapshots__/ldevice-container.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/ied/__snapshots__/ln-container.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/ied/__snapshots__/server-container.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/ied/access-point-container.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/ied/da-container.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/ied/da-wizard.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/ied/do-container.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/ied/do-wizard.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/ied/element-path.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/ied/foundation.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/ied/ied-container.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/ied/ldevice-container.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/ied/ln-container.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/ied/server-container.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/ied/test-support.ts (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/__snapshots__/connectedap-container.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/__snapshots__/doi-container.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/__snapshots__/ied-container.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/__snapshots__/network-container.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/__snapshots__/subnetwork-container.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/__snapshots__/values-container.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/connectedap-container.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/doi-container.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/foundation/actions.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/foundation/cdc.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/foundation/foundation.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/foundation/private.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/ied-container.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/network-container.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/subnetwork-container.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/values-container.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/wizards/__snapshots__/address.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/wizards/__snapshots__/connectedap.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/wizards/__snapshots__/createAddresses.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/wizards/__snapshots__/doi.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/wizards/__snapshots__/logiclink.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/wizards/__snapshots__/redundancygroup.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/wizards/__snapshots__/selectDo.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/wizards/__snapshots__/selectDoi.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/wizards/__snapshots__/subnetwork.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/wizards/address.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/wizards/connectedap.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/wizards/createAddresses.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/wizards/doi.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/wizards/logiclink.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/wizards/redundancygroup.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/wizards/selectDo.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/protocol104/wizards/subnetwork.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/publisher/__snapshots__/data-set-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/publisher/__snapshots__/data-set-element-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/publisher/__snapshots__/gse-control-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/publisher/__snapshots__/gse-control-element-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/publisher/__snapshots__/report-control-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/publisher/__snapshots__/report-control-element-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/publisher/__snapshots__/sampled-value-control-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/publisher/__snapshots__/sampled-value-control-element-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/publisher/data-set-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/publisher/data-set-element-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/publisher/foundation.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/publisher/gse-control-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/publisher/gse-control-element-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/publisher/report-control-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/publisher/report-control-element-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/publisher/sampled-value-control-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/publisher/sampled-value-control-element-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/singlelinediagram/__snapshots__/sld-drawing.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/singlelinediagram/foundation.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/singlelinediagram/orthogonal-connector.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/singlelinediagram/sld-drawing.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/singlelinediagram/wizards/__snapshots__/bay.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/singlelinediagram/wizards/__snapshots__/conductingequipment.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/singlelinediagram/wizards/__snapshots__/powertransformer.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/singlelinediagram/wizards/bay.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/singlelinediagram/wizards/conductingequipment.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/singlelinediagram/wizards/foundation.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/singlelinediagram/wizards/powertransformer.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/singlelinediagram/wizards/wizard-library.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/__snapshots__/fcda-binding-list.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/__snapshots__/ied-list.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/fcda-binding-list.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/foundation.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/goose/__snapshots__/goose-list.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/goose/__snapshots__/ied-list.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/goose/__snapshots__/subscriber-list.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/goose/goose-list.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/goose/subscriber-list.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/ied-list.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/later-binding/__snapshots__/ext-ref-later-binding-list.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/later-binding/__snapshots__/ext-ref-ln-binding-list.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/later-binding/ext-ref-later-binding-list.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/later-binding/ext-ref-ln-binding-list.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/later-binding/foundation.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/sampledvalues/__snapshots__/ied-list.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/sampledvalues/__snapshots__/smv-list.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/sampledvalues/__snapshots__/subscriber-list.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/sampledvalues/smv-list.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/sampledvalues/subscriber-list.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/subscription/supervision.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/__snapshots__/bay-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/substation/__snapshots__/conducting-equipment-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/substation/__snapshots__/eq-function-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/substation/__snapshots__/eq-sub-function-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/substation/__snapshots__/function-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/substation/__snapshots__/general-equipment-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/substation/__snapshots__/ied-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/substation/__snapshots__/l-node-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/substation/__snapshots__/line-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/substation/__snapshots__/powertransformer-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/substation/__snapshots__/process-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/substation/__snapshots__/redirectionUI.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/substation/__snapshots__/sub-equipment-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/substation/__snapshots__/sub-function-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/substation/__snapshots__/substation-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/substation/__snapshots__/tapchanger-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/substation/__snapshots__/transformer-winding-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/substation/__snapshots__/voltage-level-editor.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/substation/__snapshots__/zeroline-pane.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/editors/substation/bay-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/conducting-equipment-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/conductingequipmentwizard.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/eq-function-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/eq-sub-function-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/function-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/general-equipment-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/ied-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/l-node-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/line-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/lnodewizard.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/powertransformer-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/process-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/redirectionUI.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/sub-equipment-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/sub-function-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/substation-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/tapchanger-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/transformer-winding-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/voltage-level-editor.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/substation/zeroline-pane.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/templates/datype.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/templates/dotype.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/templates/enumtype.test.ts (100%) rename {test => packages/open-scd/test}/unit/editors/templates/lnodetype-wizard.test.ts (100%) rename {test => packages/open-scd/test}/unit/filtered-list.test.ts (100%) rename {test => packages/open-scd/test}/unit/finder-list.test.ts (100%) rename {test => packages/open-scd/test}/unit/foundation.test.ts (100%) rename {test => packages/open-scd/test}/unit/foundation/__snapshots__/compare.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/foundation/compare.test.ts (100%) rename {test => packages/open-scd/test}/unit/foundation/dai.test.ts (100%) rename {test => packages/open-scd/test}/unit/foundation/generators.test.ts (100%) rename {test => packages/open-scd/test}/unit/foundation/nsdoc.test.ts (100%) rename {test => packages/open-scd/test}/unit/foundation/scl.test.ts (100%) rename {test => packages/open-scd/test}/unit/menu/CompareIED.test.ts (100%) rename {test => packages/open-scd/test}/unit/menu/SclHistory.test.ts (100%) rename {test => packages/open-scd/test}/unit/menu/SubscriberInfo.test.ts (100%) rename {test => packages/open-scd/test}/unit/menu/UpdateDescriptionSEL.test.ts (100%) rename {test => packages/open-scd/test}/unit/menu/UpdateDescritionABB.test.ts (100%) rename {test => packages/open-scd/test}/unit/menu/VirtualTemplateIED.test.ts (100%) rename {test => packages/open-scd/test}/unit/menu/__snapshots__/CompareIED.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/menu/__snapshots__/SclHistory.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/menu/__snapshots__/UpdateDescriptionSEL.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/menu/__snapshots__/UpdateDescritionABB.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/menu/__snapshots__/VirtualTemplateIED.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/menu/updatesubstation.test.ts (100%) rename {test => packages/open-scd/test}/unit/menu/virtualtemplateied/__snapshots__/foundation.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/menu/virtualtemplateied/foundation.test.ts (100%) rename {test => packages/open-scd/test}/unit/mock-actions.ts (100%) rename {test => packages/open-scd/test}/unit/mock-document.ts (100%) rename {test => packages/open-scd/test}/unit/mock-editor.ts (100%) rename {test => packages/open-scd/test}/unit/mock-logger.ts (100%) rename {test => packages/open-scd/test}/unit/mock-plugger.ts (100%) rename {test => packages/open-scd/test}/unit/mock-setter.ts (100%) rename {test => packages/open-scd/test}/unit/mock-waiter.ts (100%) rename {test => packages/open-scd/test}/unit/oscd-filter-button.test.ts (100%) rename {test => packages/open-scd/test}/unit/plain-compare-list.test.ts (100%) rename {test => packages/open-scd/test}/unit/schema.test.ts (100%) rename {test => packages/open-scd/test}/unit/validators/ValidateTemplates.test.ts (100%) rename {test => packages/open-scd/test}/unit/validators/templates/dabda.test.ts (100%) rename {test => packages/open-scd/test}/unit/validators/templates/datype.test.ts (100%) rename {test => packages/open-scd/test}/unit/validators/templates/doorsdo.test.ts (100%) rename {test => packages/open-scd/test}/unit/validators/templates/dotype.test.ts (100%) rename {test => packages/open-scd/test}/unit/validators/templates/foundation.test.ts (100%) rename {test => packages/open-scd/test}/unit/validators/templates/lnodetype.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizard-checkbox.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizard-dialog.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizard-select.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizard-textfield.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/abstractda.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/address.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/clientln.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/commmap.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/connectedap-c.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/connectedap-pattern.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/connectivitynode.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/controlwithiedname.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/dai.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/dataset.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/eqfunction.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/eqsubfunction.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/fcda.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/function.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/generalequipment.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/gse.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/gsecontrol.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/ied.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/line.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/lnode.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/optfields.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/powertransformer.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/process.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/reportcontrol.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/sampledvaluecontrol.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/smv.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/smvopts.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/sub-equipment.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/subfunction.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/subnetwork.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/substation.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/tapchanger.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/terminal.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/transformerwinding.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/__snapshots__/trgops.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/abstractda.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/address.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/bay.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/bda.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/clientln.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/commmap.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/conductingequipment.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/connectedap-c.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/connectedap-pattern.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/connectedap.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/connectivitynode.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/controlwithiedname.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/da.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/dai.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/dataset.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/eqfunction.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/eqsubfunction.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/fcda.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/foundation/__snapshots__/dai-field-type.test.snap.js (100%) rename {test => packages/open-scd/test}/unit/wizards/foundation/dai-field-type.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/foundation/finder.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/foundation/references.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/foundation/scl.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/function.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/generalequipment.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/gse.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/gsecontrol.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/ied.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/line.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/lnode.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/optfields.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/powertransformer.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/process.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/reportcontrol.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/sampledvaluecontrol.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/services.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/smv.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/smvopts.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/sub-equipment.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/subfunction.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/subnetwork.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/substation.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/tapchanger.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/terminal.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/test-support.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/transformerwinding.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/trgops.test.ts (100%) rename {test => packages/open-scd/test}/unit/wizards/voltagelevel.test.ts (100%) rename tsconfig.json => packages/open-scd/tsconfig.json (100%) rename web-test-runner.config.mjs => packages/open-scd/web-test-runner.config.mjs (100%) rename workbox-config.cjs => packages/open-scd/workbox-config.cjs (100%) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index f9cc00dfb3..01eb051b11 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -7,6 +7,10 @@ on: jobs: build-and-deploy: runs-on: ubuntu-latest + defaults: + run: + shell: bash + working-directory: packages/open-scd steps: - name: Checkout uses: actions/checkout@v2.3.1 @@ -18,13 +22,13 @@ jobs: - name: Install and Build run: | - npm ci + npm clean-install npm run-script build - + - name: Deploy uses: JamesIves/github-pages-deploy-action@4.1.5 with: branch: master folder: build repository-name: openscd/openscd.github.io - ssh-key: ${{ secrets.DEPLOY_KEY }} \ No newline at end of file + ssh-key: ${{ secrets.DEPLOY_KEY }} diff --git a/.github/workflows/test-and-build.yml b/.github/workflows/test-and-build.yml index ea167dea88..0711a4ea30 100644 --- a/.github/workflows/test-and-build.yml +++ b/.github/workflows/test-and-build.yml @@ -15,5 +15,6 @@ jobs: - name: Install and Build run: | - npm ci - npm run-script build \ No newline at end of file + cd packages/open-scd + npm clean-install + npm run-script build diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 60bbe40e4f..3c0a5d45e4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,5 +1,5 @@ name: Test -on: +on: push: branches-ignore: - main @@ -18,5 +18,6 @@ jobs: - name: Install and Test run: | - npm ci - npm run-script test \ No newline at end of file + cd packages/open-scd + npm clean-install + npm run-script test diff --git a/.gitignore b/.gitignore index 643fbf31a5..7a267346ec 100644 --- a/.gitignore +++ b/.gitignore @@ -6,17 +6,5 @@ .DS_Store ## npm -/node_modules/ +node_modules/ /npm-debug.log - -## testing -/coverage/ -/**/dist/*.snap.dev.js - -## docs -/doc/ - -# build -/_site/ -/build/ -/out-tsc/ diff --git a/README.md b/README.md index 4f1d75bef8..4ce243907f 100644 --- a/README.md +++ b/README.md @@ -19,52 +19,22 @@ In order to install your own instance of OpenSCD on your own webserver (e.g. on If you don't have your own webserver but still want your own version of OpenSCD hosted locally (e.g. on a system without an internet connection), you can [use a browser plugin that acts as a local webserver](https://github.com/openscd/open-scd/wiki/Install-OpenSCD#offline) (only for you) instead. -## Contributing - -The easiest way to get in touch is to join the `#open-scd` channel kindly hosted on [the LF Energy Slack server](https://lfenergy.slack.com/archives/C03LH7EUP34). -If you say "hi" there we will be more than happy to help you find your way around this project. - -### Building - -If you want to build OpenSCD yourself in order to make some changes to your local installation or to contribute to the project, you may first want to install [Node.js](https://nodejs.org/) in order to be able to use our local development setup. It is recommended to use Node.js 18.x. it is is the version used to build and test on GitHub Actions. - -Once Node.js is installed on your system, you may get started by entering the following lines in your command prompt: - -``` -git clone https://github.com/openscd/open-scd.git -cd open-scd -npm install -npm start -``` -This will start a local development server and open a browser window which will automatically be reloaded as soon as you save any changes to your local source code files. +## Development -### TypeDoc +This repository is a [↗ monorepo](https://en.wikipedia.org/wiki/Monorepo), made up of several packages. +To find out more about the development of each packages, such as the base distribution or the plugins, please refer to their respective READMEs: +- [open-scd](packages/open-scd/README.md): provides the base distribution available on [openscd.github.io](https://openscd.github.io) -This project uses [TypeDoc](https://typedoc.org/) to transform documentation comments in the source code into a rendered HTML document that can be queried and navigated through. If you want to consult the generated documentation for the TypeScript components, mixins, modules and other relevant artifacts of this project, you can [do it here](https://openscd.github.io/doc/). - -### Linting & Formatting - -If you use VSCode to develop, we recommend you install and use the [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) and [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) extensions in order to automatically lint and format your code as you edit it. There are similar plugins available for using [ESLint](https://eslint.org/) and [Prettier](https://prettier.io/) from within other IDEs and text editors. - -### Scripts - -We provide the following `npm` scripts for your convenience: - -- `npm start` runs `OpenSCD` for development, reloading on file changes -- `npm test` runs the test suite with Karma -- `npm run lint` runs the linter (fixes problems in your code) -- `npm run format` runs the formatter (formats your code in a unified way) -- `npm run doc` builds HTML documentation into the `doc` directory -- `npm run build` builds a deployable version of the project into the `dist` directory +## Contributing -## License +The easiest way to get in touch is to join the `#open-scd` channel kindly hosted on [the LF Energy Slack server](https://lfenergy.slack.com/archives/C03LH7EUP34). +If you say "hi" there we will be more than happy to help you find your way around this project. -The [IEC 61850](https://webstore.iec.ch/publication/63319) XSD and NSD code components used are -distributed under their [end user license agreement](CC-EULA.pdf). +## Documentation -This project is licensed under the [Apache License 2.0](LICENSE.md). +How the documentation is organized. -© 2020-2022 OMICRON electronics GmbH, TransnetBW GmbH, Alliander N.V., and others +A high-level overview of how it’s organized will help you know where to look for certain things: -[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fopenscd%2Fopen-scd.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fopenscd%2Fopen-scd?ref=badge_large) +- [⚖️ Decisions](docs/decisions/README.md) documents the decisions we made and why we made them. diff --git a/docs/decisions/0002-use-monorepo.md b/docs/decisions/0002-use-monorepo.md new file mode 100644 index 0000000000..c3245755e8 --- /dev/null +++ b/docs/decisions/0002-use-monorepo.md @@ -0,0 +1,33 @@ +# 2. Use Monorepo + +Date: 2023-08 + +## Status + +Accepted + +## Context + +We want: + - better access management to core functionalities, plugins and ui components + - easier maintainability and refactorability of critical parts + - more shareable code + + +## Decision + +We will use a monorepo to manage the codebase for the time being. + +To control access to the codebase we will use CODEOWNERS files. + + +## Consequences + +- it makes the the dependency discovery and management easier between packages +- we can add packages that can be deployed and published independently and still used directly inside the monorepo +- it will allow us to experiment and beta test packages before publishing them +- CI pipeline runs will be faster because changes are more separated +- it will make it harder to bundle and distribute parts of the base distribution +- it moves the complexity of package management into a concentrated place + + diff --git a/docs/decisions/README.md b/docs/decisions/README.md new file mode 100644 index 0000000000..024db759d3 --- /dev/null +++ b/docs/decisions/README.md @@ -0,0 +1,4 @@ +# Decisions + +- [ADR-0001: Record architecture decisions](0001-record-architecture-decisions.md) ✅ active +- [ADR-0002: Use Monorepo](0002-use-monorepo.md) ✅ active diff --git a/package-lock.json b/package-lock.json index 06726ba9ae..3f06e5c7ee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,22 @@ { - "name": "open-scd", - "version": "0.33.0", - "lockfileVersion": 2, + "name": "openscd-monorepo", + "version": "0.0.1", + "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "open-scd", + "name": "openscd-monorepo", + "version": "0.0.1", + "license": "Apache-2.0", + "workspaces": [ + "packages/*" + ] + }, + "node_modules/open-scd": { + "resolved": "packages/open-scd", + "link": true + }, + "packages/open-scd": { "version": "0.33.0", "license": "Apache-2.0", "dependencies": { @@ -70,11 +81,10 @@ "workbox-cli": "^6.2.4" } }, - "node_modules/@apideck/better-ajv-errors": { + "packages/open-scd/node_modules/@apideck/better-ajv-errors": { "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", - "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", "dev": true, + "license": "MIT", "dependencies": { "json-schema": "^0.4.0", "jsonpointer": "^5.0.0", @@ -87,11 +97,10 @@ "ajv": ">=8" } }, - "node_modules/@babel/code-frame": { + "packages/open-scd/node_modules/@babel/code-frame": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/highlight": "^7.16.0" }, @@ -99,20 +108,18 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/compat-data": { + "packages/open-scd/node_modules/@babel/compat-data": { "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/core": { + "packages/open-scd/node_modules/@babel/core": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", - "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.16.0", "@babel/generator": "^7.16.0", @@ -138,11 +145,10 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/json5": { + "packages/open-scd/node_modules/@babel/core/node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -150,29 +156,26 @@ "node": ">=6" } }, - "node_modules/@babel/core/node_modules/semver": { + "packages/open-scd/node_modules/@babel/core/node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/@babel/core/node_modules/source-map": { + "packages/open-scd/node_modules/@babel/core/node_modules/source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/@babel/eslint-parser": { + "packages/open-scd/node_modules/@babel/eslint-parser": { "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz", - "integrity": "sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "eslint-scope": "^5.1.1", @@ -187,21 +190,19 @@ "eslint": "^7.5.0 || ^8.0.0" } }, - "node_modules/@babel/eslint-parser/node_modules/semver": { + "packages/open-scd/node_modules/@babel/eslint-parser/node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "license": "ISC", "peer": true, "bin": { "semver": "bin/semver.js" } }, - "node_modules/@babel/eslint-plugin": { + "packages/open-scd/node_modules/@babel/eslint-plugin": { "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.18.10.tgz", - "integrity": "sha512-iV1OZj/7eg4wZIcsVEkXS3MUWdhmpLsu2h+9Zr2ppywKWdCRs6VfjxbRzmHHYeurTizrrnaJ9ZkbO8KOv4lauQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "eslint-rule-composer": "^0.3.0" @@ -214,11 +215,10 @@ "eslint": ">=7.5.0" } }, - "node_modules/@babel/generator": { + "packages/open-scd/node_modules/@babel/generator": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", - "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.16.0", "jsesc": "^2.5.1", @@ -228,20 +228,18 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/source-map": { + "packages/open-scd/node_modules/@babel/generator/node_modules/source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/@babel/helper-annotate-as-pure": { + "packages/open-scd/node_modules/@babel/helper-annotate-as-pure": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.16.0" }, @@ -249,11 +247,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "packages/open-scd/node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz", - "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-explode-assignable-expression": "^7.16.0", "@babel/types": "^7.16.0" @@ -262,11 +259,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-compilation-targets": { + "packages/open-scd/node_modules/@babel/helper-compilation-targets": { "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", - "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.16.0", "@babel/helper-validator-option": "^7.14.5", @@ -280,20 +276,18 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "packages/open-scd/node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-create-class-features-plugin": { + "packages/open-scd/node_modules/@babel/helper-create-class-features-plugin": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz", - "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.0", "@babel/helper-function-name": "^7.16.0", @@ -309,11 +303,10 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-regexp-features-plugin": { + "packages/open-scd/node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz", - "integrity": "sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.0", "regexpu-core": "^4.7.1" @@ -325,11 +318,10 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-define-polyfill-provider": { + "packages/open-scd/node_modules/@babel/helper-define-polyfill-provider": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz", - "integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.13.0", "@babel/helper-module-imports": "^7.12.13", @@ -344,20 +336,18 @@ "@babel/core": "^7.4.0-0" } }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "packages/open-scd/node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-explode-assignable-expression": { + "packages/open-scd/node_modules/@babel/helper-explode-assignable-expression": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz", - "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.16.0" }, @@ -365,11 +355,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-function-name": { + "packages/open-scd/node_modules/@babel/helper-function-name": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", - "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-get-function-arity": "^7.16.0", "@babel/template": "^7.16.0", @@ -379,11 +368,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-get-function-arity": { + "packages/open-scd/node_modules/@babel/helper-get-function-arity": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", - "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.16.0" }, @@ -391,11 +379,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-hoist-variables": { + "packages/open-scd/node_modules/@babel/helper-hoist-variables": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", - "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.16.0" }, @@ -403,11 +390,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-member-expression-to-functions": { + "packages/open-scd/node_modules/@babel/helper-member-expression-to-functions": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", - "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.16.0" }, @@ -415,11 +401,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-module-imports": { + "packages/open-scd/node_modules/@babel/helper-module-imports": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.16.0" }, @@ -427,11 +412,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-module-transforms": { + "packages/open-scd/node_modules/@babel/helper-module-transforms": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", - "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.16.0", "@babel/helper-replace-supers": "^7.16.0", @@ -446,11 +430,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-optimise-call-expression": { + "packages/open-scd/node_modules/@babel/helper-optimise-call-expression": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", - "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.16.0" }, @@ -458,20 +441,18 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-plugin-utils": { + "packages/open-scd/node_modules/@babel/helper-plugin-utils": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-remap-async-to-generator": { + "packages/open-scd/node_modules/@babel/helper-remap-async-to-generator": { "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz", - "integrity": "sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.0", "@babel/helper-wrap-function": "^7.16.0", @@ -481,11 +462,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-replace-supers": { + "packages/open-scd/node_modules/@babel/helper-replace-supers": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", - "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-member-expression-to-functions": "^7.16.0", "@babel/helper-optimise-call-expression": "^7.16.0", @@ -496,11 +476,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-simple-access": { + "packages/open-scd/node_modules/@babel/helper-simple-access": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", - "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.16.0" }, @@ -508,11 +487,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "packages/open-scd/node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.16.0" }, @@ -520,11 +498,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-split-export-declaration": { + "packages/open-scd/node_modules/@babel/helper-split-export-declaration": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", - "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.16.0" }, @@ -532,29 +509,26 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-validator-identifier": { + "packages/open-scd/node_modules/@babel/helper-validator-identifier": { "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, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-validator-option": { + "packages/open-scd/node_modules/@babel/helper-validator-option": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function": { + "packages/open-scd/node_modules/@babel/helper-wrap-function": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz", - "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-function-name": "^7.16.0", "@babel/template": "^7.16.0", @@ -565,11 +539,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helpers": { + "packages/open-scd/node_modules/@babel/helpers": { "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", - "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.16.0", "@babel/traverse": "^7.16.3", @@ -579,11 +552,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { + "packages/open-scd/node_modules/@babel/highlight": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.15.7", "chalk": "^2.0.0", @@ -593,11 +565,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { + "packages/open-scd/node_modules/@babel/highlight/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -605,11 +576,10 @@ "node": ">=4" } }, - "node_modules/@babel/highlight/node_modules/chalk": { + "packages/open-scd/node_modules/@babel/highlight/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -619,35 +589,31 @@ "node": ">=4" } }, - "node_modules/@babel/highlight/node_modules/color-convert": { + "packages/open-scd/node_modules/@babel/highlight/node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, - "node_modules/@babel/highlight/node_modules/color-name": { + "packages/open-scd/node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@babel/highlight/node_modules/has-flag": { + "packages/open-scd/node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/@babel/highlight/node_modules/supports-color": { + "packages/open-scd/node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -655,11 +621,10 @@ "node": ">=4" } }, - "node_modules/@babel/parser": { + "packages/open-scd/node_modules/@babel/parser": { "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", - "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", "dev": true, + "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -667,11 +632,10 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "packages/open-scd/node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.16.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz", - "integrity": "sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -682,11 +646,10 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "packages/open-scd/node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz", - "integrity": "sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", @@ -699,11 +662,10 @@ "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { + "packages/open-scd/node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz", - "integrity": "sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-remap-async-to-generator": "^7.16.4", @@ -716,11 +678,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { + "packages/open-scd/node_modules/@babel/plugin-proposal-class-properties": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", - "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" @@ -732,11 +693,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-static-block": { + "packages/open-scd/node_modules/@babel/plugin-proposal-class-static-block": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz", - "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", @@ -749,11 +709,10 @@ "@babel/core": "^7.12.0" } }, - "node_modules/@babel/plugin-proposal-dynamic-import": { + "packages/open-scd/node_modules/@babel/plugin-proposal-dynamic-import": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz", - "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -765,11 +724,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { + "packages/open-scd/node_modules/@babel/plugin-proposal-export-namespace-from": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz", - "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -781,11 +739,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-json-strings": { + "packages/open-scd/node_modules/@babel/plugin-proposal-json-strings": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz", - "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -797,11 +754,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "packages/open-scd/node_modules/@babel/plugin-proposal-logical-assignment-operators": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz", - "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -813,11 +769,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "packages/open-scd/node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz", - "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -829,11 +784,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-numeric-separator": { + "packages/open-scd/node_modules/@babel/plugin-proposal-numeric-separator": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz", - "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -845,11 +799,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { + "packages/open-scd/node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz", - "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.16.0", "@babel/helper-compilation-targets": "^7.16.0", @@ -864,11 +817,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "packages/open-scd/node_modules/@babel/plugin-proposal-optional-catch-binding": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz", - "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -880,11 +832,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { + "packages/open-scd/node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz", - "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", @@ -897,11 +848,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-methods": { + "packages/open-scd/node_modules/@babel/plugin-proposal-private-methods": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz", - "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" @@ -913,11 +863,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { + "packages/open-scd/node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz", - "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.0", "@babel/helper-create-class-features-plugin": "^7.16.0", @@ -931,11 +880,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "packages/open-scd/node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz", - "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" @@ -947,11 +895,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { + "packages/open-scd/node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -959,11 +906,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-properties": { + "packages/open-scd/node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -971,11 +917,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { + "packages/open-scd/node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -986,11 +931,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { + "packages/open-scd/node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -998,11 +942,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { + "packages/open-scd/node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -1010,11 +953,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-meta": { + "packages/open-scd/node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1022,11 +964,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-json-strings": { + "packages/open-scd/node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1034,11 +975,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "packages/open-scd/node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1046,11 +986,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "packages/open-scd/node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1058,11 +997,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-numeric-separator": { + "packages/open-scd/node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1070,11 +1008,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { + "packages/open-scd/node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1082,11 +1019,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "packages/open-scd/node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1094,11 +1030,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { + "packages/open-scd/node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1106,11 +1041,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { + "packages/open-scd/node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1121,11 +1055,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { + "packages/open-scd/node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1136,11 +1069,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { + "packages/open-scd/node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz", - "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1151,11 +1083,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { + "packages/open-scd/node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz", - "integrity": "sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", @@ -1168,11 +1099,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { + "packages/open-scd/node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz", - "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1183,11 +1113,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoping": { + "packages/open-scd/node_modules/@babel/plugin-transform-block-scoping": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz", - "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1198,11 +1127,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes": { + "packages/open-scd/node_modules/@babel/plugin-transform-classes": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz", - "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.0", "@babel/helper-function-name": "^7.16.0", @@ -1219,20 +1147,18 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "packages/open-scd/node_modules/@babel/plugin-transform-classes/node_modules/globals": { "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/@babel/plugin-transform-computed-properties": { + "packages/open-scd/node_modules/@babel/plugin-transform-computed-properties": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz", - "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1243,11 +1169,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-destructuring": { + "packages/open-scd/node_modules/@babel/plugin-transform-destructuring": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz", - "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1258,11 +1183,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-dotall-regex": { + "packages/open-scd/node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz", - "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" @@ -1274,11 +1198,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { + "packages/open-scd/node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz", - "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1289,11 +1212,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { + "packages/open-scd/node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz", - "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" @@ -1305,11 +1227,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-for-of": { + "packages/open-scd/node_modules/@babel/plugin-transform-for-of": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz", - "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1320,11 +1241,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-function-name": { + "packages/open-scd/node_modules/@babel/plugin-transform-function-name": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz", - "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-function-name": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" @@ -1336,11 +1256,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-literals": { + "packages/open-scd/node_modules/@babel/plugin-transform-literals": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz", - "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1351,11 +1270,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-member-expression-literals": { + "packages/open-scd/node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz", - "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1366,11 +1284,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-amd": { + "packages/open-scd/node_modules/@babel/plugin-transform-modules-amd": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz", - "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", @@ -1383,11 +1300,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { + "packages/open-scd/node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz", - "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", @@ -1401,11 +1317,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs": { + "packages/open-scd/node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz", - "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-hoist-variables": "^7.16.0", "@babel/helper-module-transforms": "^7.16.0", @@ -1420,11 +1335,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-umd": { + "packages/open-scd/node_modules/@babel/plugin-transform-modules-umd": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz", - "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" @@ -1436,11 +1350,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "packages/open-scd/node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz", - "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.16.0" }, @@ -1451,11 +1364,10 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-new-target": { + "packages/open-scd/node_modules/@babel/plugin-transform-new-target": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz", - "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1466,11 +1378,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-object-super": { + "packages/open-scd/node_modules/@babel/plugin-transform-object-super": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz", - "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-replace-supers": "^7.16.0" @@ -1482,11 +1393,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-parameters": { + "packages/open-scd/node_modules/@babel/plugin-transform-parameters": { "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz", - "integrity": "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1497,11 +1407,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-property-literals": { + "packages/open-scd/node_modules/@babel/plugin-transform-property-literals": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz", - "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1512,11 +1421,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-regenerator": { + "packages/open-scd/node_modules/@babel/plugin-transform-regenerator": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz", - "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==", "dev": true, + "license": "MIT", "dependencies": { "regenerator-transform": "^0.14.2" }, @@ -1527,11 +1435,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-reserved-words": { + "packages/open-scd/node_modules/@babel/plugin-transform-reserved-words": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz", - "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1542,11 +1449,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-shorthand-properties": { + "packages/open-scd/node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz", - "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1557,11 +1463,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-spread": { + "packages/open-scd/node_modules/@babel/plugin-transform-spread": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz", - "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" @@ -1573,11 +1478,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-sticky-regex": { + "packages/open-scd/node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz", - "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1588,11 +1492,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-template-literals": { + "packages/open-scd/node_modules/@babel/plugin-transform-template-literals": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz", - "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1603,11 +1506,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-typeof-symbol": { + "packages/open-scd/node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz", - "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1618,11 +1520,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-escapes": { + "packages/open-scd/node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz", - "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1633,11 +1534,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-regex": { + "packages/open-scd/node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz", - "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5" @@ -1649,11 +1549,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env": { + "packages/open-scd/node_modules/@babel/preset-env": { "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz", - "integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.16.4", "@babel/helper-compilation-targets": "^7.16.3", @@ -1737,20 +1636,18 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env/node_modules/semver": { + "packages/open-scd/node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/@babel/preset-modules": { + "packages/open-scd/node_modules/@babel/preset-modules": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -1762,11 +1659,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/runtime": { + "packages/open-scd/node_modules/@babel/runtime": { "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", - "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", "dev": true, + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.13.4" }, @@ -1774,11 +1670,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/runtime-corejs3": { + "packages/open-scd/node_modules/@babel/runtime-corejs3": { "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.3.tgz", - "integrity": "sha512-IAdDC7T0+wEB4y2gbIL0uOXEYpiZEeuFUTVbdGq+UwCcF35T/tS8KrmMomEwEc5wBbyfH3PJVpTSUqrhPDXFcQ==", "dev": true, + "license": "MIT", "dependencies": { "core-js-pure": "^3.19.0", "regenerator-runtime": "^0.13.4" @@ -1787,11 +1682,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/template": { + "packages/open-scd/node_modules/@babel/template": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.16.0", "@babel/parser": "^7.16.0", @@ -1801,11 +1695,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/traverse": { + "packages/open-scd/node_modules/@babel/traverse": { "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", - "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.16.0", "@babel/generator": "^7.16.0", @@ -1821,20 +1714,18 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/globals": { + "packages/open-scd/node_modules/@babel/traverse/node_modules/globals": { "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/@babel/types": { + "packages/open-scd/node_modules/@babel/types": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.15.7", "to-fast-properties": "^2.0.0" @@ -1843,11 +1734,10 @@ "node": ">=6.9.0" } }, - "node_modules/@commitlint/cli": { + "packages/open-scd/node_modules/@commitlint/cli": { "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, + "license": "MIT", "dependencies": { "@commitlint/format": "^13.2.0", "@commitlint/lint": "^13.2.0", @@ -1866,11 +1756,10 @@ "node": ">=v12" } }, - "node_modules/@commitlint/config-conventional": { + "packages/open-scd/node_modules/@commitlint/config-conventional": { "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, + "license": "MIT", "dependencies": { "conventional-changelog-conventionalcommits": "^4.3.1" }, @@ -1878,11 +1767,10 @@ "node": ">=v12" } }, - "node_modules/@commitlint/ensure": { + "packages/open-scd/node_modules/@commitlint/ensure": { "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-13.2.0.tgz", - "integrity": "sha512-rqhT62RehdLTRBu8OrPHnRCCd/7RmHEE4TiTlT4BLlr5ls5jlZhecOQWJ8np872uCNirrJ5NFjnjYYdbkNoW9Q==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/types": "^13.2.0", "lodash": "^4.17.19" @@ -1891,20 +1779,18 @@ "node": ">=v12" } }, - "node_modules/@commitlint/execute-rule": { + "packages/open-scd/node_modules/@commitlint/execute-rule": { "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, + "license": "MIT", "engines": { "node": ">=v12" } }, - "node_modules/@commitlint/format": { + "packages/open-scd/node_modules/@commitlint/format": { "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-13.2.0.tgz", - "integrity": "sha512-yNBQJe6YFhM1pJAta4LvzQxccSKof6axJH7ALYjuhQqfT8AKlad7Y/2SuJ07ioyreNIqwOTuF2UfU8yJ7JzEIQ==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/types": "^13.2.0", "chalk": "^4.0.0" @@ -1913,11 +1799,10 @@ "node": ">=v12" } }, - "node_modules/@commitlint/is-ignored": { + "packages/open-scd/node_modules/@commitlint/is-ignored": { "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-13.2.0.tgz", - "integrity": "sha512-onnx4WctHFPPkHGFFAZBIWRSaNwuhixIIfbwPhcZ6IewwQX5n4jpjwM1GokA7vhlOnQ57W7AavbKUGjzIVtnRQ==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/types": "^13.2.0", "semver": "7.3.5" @@ -1926,11 +1811,10 @@ "node": ">=v12" } }, - "node_modules/@commitlint/lint": { + "packages/open-scd/node_modules/@commitlint/lint": { "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-13.2.0.tgz", - "integrity": "sha512-5XYkh0e9ehHjA7BxAHFpjPgr1qqbFY8OFG1wpBiAhycbYBtJnQmculA2wcwqTM40YCUBqEvWFdq86jTG8fbkMw==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/is-ignored": "^13.2.0", "@commitlint/parse": "^13.2.0", @@ -1941,11 +1825,10 @@ "node": ">=v12" } }, - "node_modules/@commitlint/load": { + "packages/open-scd/node_modules/@commitlint/load": { "version": "13.2.1", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-13.2.1.tgz", - "integrity": "sha512-qlaJkj0hfa9gtWRfCfbgFBTK3GYQRmjZhba4l9mUu4wV9lEZ4ICFlrLtd/8kaLXf/8xbrPhkAPkVFOAqM0YwUQ==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/execute-rule": "^13.2.0", "@commitlint/resolve-extends": "^13.2.0", @@ -1961,11 +1844,10 @@ "node": ">=v12" } }, - "node_modules/@commitlint/load/node_modules/typescript": { + "packages/open-scd/node_modules/@commitlint/load/node_modules/typescript": { "version": "4.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", - "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -1974,20 +1856,18 @@ "node": ">=4.2.0" } }, - "node_modules/@commitlint/message": { + "packages/open-scd/node_modules/@commitlint/message": { "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-13.2.0.tgz", - "integrity": "sha512-+LlErJj2F2AC86xJb33VJIvSt25xqSF1I0b0GApSgoUtQBeJhx4SxIj1BLvGcLVmbRmbgTzAFq/QylwLId7EhA==", "dev": true, + "license": "MIT", "engines": { "node": ">=v12" } }, - "node_modules/@commitlint/parse": { + "packages/open-scd/node_modules/@commitlint/parse": { "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-13.2.0.tgz", - "integrity": "sha512-AtfKSQJQADbDhW+kuC5PxOyBANsYCuuJlZRZ2PYslOz2rvWwZ93zt+nKjM4g7C9ETbz0uq4r7/EoOsTJ2nJqfQ==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/types": "^13.2.0", "conventional-changelog-angular": "^5.0.11", @@ -1997,11 +1877,10 @@ "node": ">=v12" } }, - "node_modules/@commitlint/read": { + "packages/open-scd/node_modules/@commitlint/read": { "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-13.2.0.tgz", - "integrity": "sha512-7db5e1Bn3re6hQN0SqygTMF/QX6/MQauoJn3wJiUHE93lvwO6aFQxT3qAlYeyBPwfWsmDz/uSH454jtrSsv3Uw==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/top-level": "^13.2.0", "@commitlint/types": "^13.2.0", @@ -2012,11 +1891,10 @@ "node": ">=v12" } }, - "node_modules/@commitlint/resolve-extends": { + "packages/open-scd/node_modules/@commitlint/resolve-extends": { "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, + "license": "MIT", "dependencies": { "import-fresh": "^3.0.0", "lodash": "^4.17.19", @@ -2027,11 +1905,10 @@ "node": ">=v12" } }, - "node_modules/@commitlint/rules": { + "packages/open-scd/node_modules/@commitlint/rules": { "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-13.2.0.tgz", - "integrity": "sha512-O3A9S7blOzvHfzrJrUQe9JxdtGy154ol/GXHwvd8WfMJ10y5ryBB4b6+0YZ1XhItWzrEASOfOKbD++EdLV90dQ==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/ensure": "^13.2.0", "@commitlint/message": "^13.2.0", @@ -2043,20 +1920,18 @@ "node": ">=v12" } }, - "node_modules/@commitlint/to-lines": { + "packages/open-scd/node_modules/@commitlint/to-lines": { "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, + "license": "MIT", "engines": { "node": ">=v12" } }, - "node_modules/@commitlint/top-level": { + "packages/open-scd/node_modules/@commitlint/top-level": { "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-13.2.0.tgz", - "integrity": "sha512-knBvWYbIq6VV6VPHrVeDsxDiJq4Zq6cv5NIYU3iesKAsmK2KlLfsZPa+Ig96Y4AqAPU3zNJwjHxYkz9qxdBbfA==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^5.0.0" }, @@ -2064,11 +1939,10 @@ "node": ">=v12" } }, - "node_modules/@commitlint/top-level/node_modules/find-up": { + "packages/open-scd/node_modules/@commitlint/top-level/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -2080,11 +1954,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/top-level/node_modules/locate-path": { + "packages/open-scd/node_modules/@commitlint/top-level/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -2095,11 +1968,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/top-level/node_modules/p-limit": { + "packages/open-scd/node_modules/@commitlint/top-level/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -2110,11 +1982,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/top-level/node_modules/p-locate": { + "packages/open-scd/node_modules/@commitlint/top-level/node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -2125,11 +1996,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@commitlint/types": { + "packages/open-scd/node_modules/@commitlint/types": { "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, + "license": "MIT", "dependencies": { "chalk": "^4.0.0" }, @@ -2137,11 +2007,10 @@ "node": ">=v12" } }, - "node_modules/@endemolshinegroup/cosmiconfig-typescript-loader": { + "packages/open-scd/node_modules/@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, + "license": "MIT", "dependencies": { "lodash.get": "^4", "make-error": "^1", @@ -2155,11 +2024,10 @@ "cosmiconfig": ">=6" } }, - "node_modules/@eslint/eslintrc": { + "packages/open-scd/node_modules/@eslint/eslintrc": { "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.1.1", @@ -2175,11 +2043,10 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { + "packages/open-scd/node_modules/@eslint/eslintrc/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2191,23 +2058,20 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "packages/open-scd/node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@gar/promisify": { + "packages/open-scd/node_modules/@gar/promisify": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", - "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@humanwhocodes/config-array": { + "packages/open-scd/node_modules/@humanwhocodes/config-array": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^1.2.0", "debug": "^4.1.1", @@ -2217,32 +2081,28 @@ "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/object-schema": { + "packages/open-scd/node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, - "node_modules/@hutson/parse-repository-url": { + "packages/open-scd/node_modules/@hutson/parse-repository-url": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=6.9.0" } }, - "node_modules/@isaacs/string-locale-compare": { + "packages/open-scd/node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/@jridgewell/gen-mapping": { + "packages/open-scd/node_modules/@jridgewell/gen-mapping": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -2252,55 +2112,49 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/resolve-uri": { + "packages/open-scd/node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { + "packages/open-scd/node_modules/@jridgewell/set-array": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, - "node_modules/@jridgewell/source-map": { + "packages/open-scd/node_modules/@jridgewell/source-map": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, - "node_modules/@jridgewell/sourcemap-codec": { + "packages/open-scd/node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@jridgewell/trace-mapping": { + "packages/open-scd/node_modules/@jridgewell/trace-mapping": { "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" } }, - "node_modules/@koa/cors": { + "packages/open-scd/node_modules/@koa/cors": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-3.1.0.tgz", - "integrity": "sha512-7ulRC1da/rBa6kj6P4g2aJfnET3z8Uf3SWu60cjbtxTA5g8lxRdX/Bd2P92EagGwwAhANeNw8T8if99rJliR6Q==", "dev": true, + "license": "MIT", "dependencies": { "vary": "^1.1.2" }, @@ -2308,26 +2162,23 @@ "node": ">= 8.0.0" } }, - "node_modules/@material/animation": { + "packages/open-scd/node_modules/@material/animation": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/animation/-/animation-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-R1QbY4fC6RBOoi4Dq/3yuD5OK0ts02WxGt1JXaddsdnO6szZJcfXm2aiCweU1GUpchoah+YzDBJrsmSoqFCKIg==", + "license": "MIT", "dependencies": { "tslib": "^2.1.0" } }, - "node_modules/@material/base": { + "packages/open-scd/node_modules/@material/base": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/base/-/base-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-bCxGPqFQPh3rfBdqG+UvlrnRPSP2CzHhn0f44NqELY/SkmujIfS30rJOX965IKoD6lGdKWIfi/sAm03I81pZ7g==", + "license": "MIT", "dependencies": { "tslib": "^2.1.0" } }, - "node_modules/@material/button": { + "packages/open-scd/node_modules/@material/button": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/button/-/button-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-FV44k7WH8d0Z7TjKldEILWXG+bgVz0CplqAYiPiRoxIaGljOq/D7+enuC8tJOUst+zyihVSKyYT69ghWuOKjjg==", + "license": "MIT", "dependencies": { "@material/density": "12.0.0-canary.22d29cbb4.0", "@material/dom": "12.0.0-canary.22d29cbb4.0", @@ -2342,18 +2193,16 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/density": { + "packages/open-scd/node_modules/@material/density": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/density/-/density-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-uCOzDL3U8EAOU6A+3lwbys6lB5P24PwEsNoe5YoB7CmkNS+8LLFPdemp4dMdVY2xGlDX+McaUOKJKmFub4cPUA==", + "license": "MIT", "dependencies": { "tslib": "^2.1.0" } }, - "node_modules/@material/dialog": { + "packages/open-scd/node_modules/@material/dialog": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/dialog/-/dialog-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-WOK+HN7HQa3mHvNEsEnleDOHCLRAbpFOhGuGyqnSDOCyxTl2DcNCUqsWupDVDpAlLv2OfLdmceyJrejMF+8q7g==", + "license": "MIT", "dependencies": { "@material/animation": "12.0.0-canary.22d29cbb4.0", "@material/base": "12.0.0-canary.22d29cbb4.0", @@ -2371,19 +2220,17 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/dom": { + "packages/open-scd/node_modules/@material/dom": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/dom/-/dom-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-9XvFE2OuOZizYXF3ptyMcJuN/JHZA4vKq5lPLrIbcTXnd4DzJ7L4JrMcMb75xfjugxj8uaXjdfI62gwHfzP/aw==", + "license": "MIT", "dependencies": { "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", "tslib": "^2.1.0" } }, - "node_modules/@material/drawer": { + "packages/open-scd/node_modules/@material/drawer": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/drawer/-/drawer-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-a5tGNXOXJglDpq/5blE3ZxbfTnuYU6pnkswWHliSUc71fC1A6XmK51vLz/PCGPGV3qL8JS2sakOVMdssRuLPxA==", + "license": "MIT", "dependencies": { "@material/animation": "12.0.0-canary.22d29cbb4.0", "@material/base": "12.0.0-canary.22d29cbb4.0", @@ -2399,10 +2246,9 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/elevation": { + "packages/open-scd/node_modules/@material/elevation": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-fuOG6w7Crz+9iibkBAXOQGYBWMCDZSvXA9PlZFW1JFCHUWyzzTMJeJIaHAVMHFzhbVF/rjqF6CliDZyAz4fULg==", + "license": "MIT", "dependencies": { "@material/animation": "12.0.0-canary.22d29cbb4.0", "@material/base": "12.0.0-canary.22d29cbb4.0", @@ -2411,18 +2257,16 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/feature-targeting": { + "packages/open-scd/node_modules/@material/feature-targeting": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-e72VDSIMrwF5aX4rkQcO1AHewX/ydWOujFtMBk4QD/asyDPKBv+bKwO6f/msM+Wqen8I+DbHC0PH/2K15gQ3pQ==", + "license": "MIT", "dependencies": { "tslib": "^2.1.0" } }, - "node_modules/@material/floating-label": { + "packages/open-scd/node_modules/@material/floating-label": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-MZIVki9uD6JMyfQ6v5FIgt2WEZQ3fOCpoOiE8c9cHuNiawVJc3pmoA5wT/38hJs3iMCx86D1jL1vK9UdyIdF7A==", + "license": "MIT", "dependencies": { "@material/animation": "12.0.0-canary.22d29cbb4.0", "@material/base": "12.0.0-canary.22d29cbb4.0", @@ -2434,10 +2278,9 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/form-field": { + "packages/open-scd/node_modules/@material/form-field": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/form-field/-/form-field-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-wYNyh1RMqEviuWcredWYx8ENEjR1GYdQu/NE9SKlfK7zKsFxF7szwHDd/3cZd7BSYVJUeylveDW+KgXQaW0YpQ==", + "license": "MIT", "dependencies": { "@material/base": "12.0.0-canary.22d29cbb4.0", "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", @@ -2448,10 +2291,9 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/icon-button": { + "packages/open-scd/node_modules/@material/icon-button": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/icon-button/-/icon-button-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-2cKO9FIEYwQqd6qlvuC2IbZQ3m8xvw690sx+H/+1UFs17TY/STDfJRj1p5qf+MnIqaiz5jsoxQemuUkcej+uBw==", + "license": "MIT", "dependencies": { "@material/base": "12.0.0-canary.22d29cbb4.0", "@material/density": "12.0.0-canary.22d29cbb4.0", @@ -2463,10 +2305,9 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/line-ripple": { + "packages/open-scd/node_modules/@material/line-ripple": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-9LL/d3jWNesupmwvZtNbV2B1rc1i5BHatFgVt62B1xvfaViRL7EyS0K/+kv9SPWU6nqPLfdj33vOMukn2zIgAg==", + "license": "MIT", "dependencies": { "@material/animation": "12.0.0-canary.22d29cbb4.0", "@material/base": "12.0.0-canary.22d29cbb4.0", @@ -2475,10 +2316,9 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/linear-progress": { + "packages/open-scd/node_modules/@material/linear-progress": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/linear-progress/-/linear-progress-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-SuEJPdtMbY9hN7X8s9Y8MzVfnmQy32gi4cSIv3r3aL5wmfO29Dg5Gw8OkggEuVjy0QKTXSN9N74WdCdpQ5rUPw==", + "license": "MIT", "dependencies": { "@material/animation": "12.0.0-canary.22d29cbb4.0", "@material/base": "12.0.0-canary.22d29cbb4.0", @@ -2489,10 +2329,9 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/list": { + "packages/open-scd/node_modules/@material/list": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/list/-/list-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-Vai+ggNyDBuWM0ihBs3ELGEKCdRmFoTFEhfcZ321VEI2YE8EY6eW1tvazzBfSzpLZkrqcn2QkqD6UpQBzkp4AA==", + "license": "MIT", "dependencies": { "@material/base": "12.0.0-canary.22d29cbb4.0", "@material/density": "12.0.0-canary.22d29cbb4.0", @@ -2506,10 +2345,9 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/menu": { + "packages/open-scd/node_modules/@material/menu": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/menu/-/menu-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-8JMFM/QdIC+CRDf79uSe5b4/kCF+3Re90OYlCVaT8LyfYGzYNtBQ8LPKaWlmS2fRN0eIBd1faoUGO0bvslulhg==", + "license": "MIT", "dependencies": { "@material/base": "12.0.0-canary.22d29cbb4.0", "@material/dom": "12.0.0-canary.22d29cbb4.0", @@ -2523,10 +2361,9 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/menu-surface": { + "packages/open-scd/node_modules/@material/menu-surface": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-kvfewRPo4sJtGzBK/T94jjRYnnIaQbC5xqQ+AmGZHGUBsV713cVE1IWVSm0d+7MbERsqKMG9/JZik2Um3YZetQ==", + "license": "MIT", "dependencies": { "@material/animation": "12.0.0-canary.22d29cbb4.0", "@material/base": "12.0.0-canary.22d29cbb4.0", @@ -2538,10 +2375,9 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/mwc-base": { + "packages/open-scd/node_modules/@material/mwc-base": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-base/-/mwc-base-0.22.1.tgz", - "integrity": "sha512-KtQf4lQUoTQuetfhfRbVJhsXVcpX74LP4JI/cLmx+SGbpG+pXXWf6VI2MvZY2UoHVEkldqPHndeuqctBoY7vgg==", + "license": "Apache-2.0", "dependencies": { "@material/base": "=12.0.0-canary.22d29cbb4.0", "@material/dom": "=12.0.0-canary.22d29cbb4.0", @@ -2549,10 +2385,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-button": { + "packages/open-scd/node_modules/@material/mwc-button": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-button/-/mwc-button-0.22.1.tgz", - "integrity": "sha512-Z+NOM+d7QkmIOGbVT7BA/rzLJMXGaxC4Bp+dXcm3ESu6ohPBtG878IyZGSGiMXXDtmAKgMAIp74z4gE/Y0j1pA==", + "license": "Apache-2.0", "dependencies": { "@material/mwc-icon": "^0.22.1", "@material/mwc-ripple": "^0.22.1", @@ -2561,10 +2396,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-checkbox": { + "packages/open-scd/node_modules/@material/mwc-checkbox": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-checkbox/-/mwc-checkbox-0.22.1.tgz", - "integrity": "sha512-JfUEVWAos/sscPH1k9oUKhjtCbTuU4rl7GgKcenCF6EnxTaXbzxGJKPz28BUS5I14JM7vHNUwfqTC+M/87tNxg==", + "license": "Apache-2.0", "dependencies": { "@material/mwc-base": "^0.22.1", "@material/mwc-ripple": "^0.22.1", @@ -2573,10 +2407,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-dialog": { + "packages/open-scd/node_modules/@material/mwc-dialog": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-dialog/-/mwc-dialog-0.22.1.tgz", - "integrity": "sha512-NHHtsled57N2EjDLelEN5YeJSpW/PYxayA+d2B2zpQPbhqhl//VKxJ9fA6CPm1uc+Cvp2G7lbZ2oUUSQivu+Aw==", + "license": "Apache-2.0", "dependencies": { "@material/dialog": "=12.0.0-canary.22d29cbb4.0", "@material/dom": "=12.0.0-canary.22d29cbb4.0", @@ -2589,10 +2422,9 @@ "wicg-inert": "^3.0.0" } }, - "node_modules/@material/mwc-drawer": { + "packages/open-scd/node_modules/@material/mwc-drawer": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-drawer/-/mwc-drawer-0.22.1.tgz", - "integrity": "sha512-klwo4VMIIeV4UY+0t4HJ5/2Z8hUjsPHoleEFamRf97yVgPnmCHHaXhe7fjq8srxgkXK81PzwA7PFGBofS248ag==", + "license": "Apache-2.0", "dependencies": { "@material/drawer": "=12.0.0-canary.22d29cbb4.0", "@material/mwc-base": "^0.22.1", @@ -2603,10 +2435,9 @@ "wicg-inert": "^3.0.0" } }, - "node_modules/@material/mwc-fab": { + "packages/open-scd/node_modules/@material/mwc-fab": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-fab/-/mwc-fab-0.22.1.tgz", - "integrity": "sha512-KFzZFFr/Nq3bJ0JJyEy7SHsvVLhoqMCTELEjcy2s4fZYT1mLUmHK+Iip1vuKP2I96Yvnym4wkFEcwz/zAMCWbA==", + "license": "Apache-2.0", "dependencies": { "@material/mwc-ripple": "^0.22.1", "lit-element": "^2.5.1", @@ -2614,10 +2445,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-floating-label": { + "packages/open-scd/node_modules/@material/mwc-floating-label": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-floating-label/-/mwc-floating-label-0.22.1.tgz", - "integrity": "sha512-BkFt9WL8RE05JESv73egh7XUsmXALL78u1ev98T579SER3kwfIepQhXTvAAnFRHFa7QjT8qa/U6RmsvHe1zYbg==", + "license": "Apache-2.0", "dependencies": { "@material/floating-label": "=12.0.0-canary.22d29cbb4.0", "lit-element": "^2.5.1", @@ -2625,10 +2455,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-formfield": { + "packages/open-scd/node_modules/@material/mwc-formfield": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-formfield/-/mwc-formfield-0.22.1.tgz", - "integrity": "sha512-jk8YyX1STjh+HCQOjlEmtr+kVG8Nlkemh9GoVNkJoIH6k7n+WgYcVXoJtfGWJFBkO8kfHziRVeLRPGP8Nt8ErA==", + "license": "Apache-2.0", "dependencies": { "@material/form-field": "=12.0.0-canary.22d29cbb4.0", "@material/mwc-base": "^0.22.1", @@ -2637,29 +2466,26 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-icon": { + "packages/open-scd/node_modules/@material/mwc-icon": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-icon/-/mwc-icon-0.22.1.tgz", - "integrity": "sha512-LX4MUThlYEBfpTr1O53J27KbzFhPbe2dBGouY9piztCI3FObbRVQI+LXFlXJm6KU0BzemaQfz105ZAuLlPAN4g==", + "license": "Apache-2.0", "dependencies": { "lit-element": "^2.5.1", "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-icon-button": { + "packages/open-scd/node_modules/@material/mwc-icon-button": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-icon-button/-/mwc-icon-button-0.22.1.tgz", - "integrity": "sha512-UHwWwzn9LrAKFmQLuKSMQZe1m+X0Xi//xAhLiIBOHaXyEH3QxmKr7pR82e8HQPc42+jUAxKUFmohMrppG6Dmcg==", + "license": "Apache-2.0", "dependencies": { "@material/mwc-ripple": "^0.22.1", "lit-element": "^2.5.1", "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-icon-button-toggle": { + "packages/open-scd/node_modules/@material/mwc-icon-button-toggle": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-icon-button-toggle/-/mwc-icon-button-toggle-0.22.1.tgz", - "integrity": "sha512-4r2Hvmo8qhYfEmWNUPvXxmBY0PTdN3JIFvn7d8WPukPgVSCfhh8o4MbxySoHcuo81A+2K/eMRAiLNY7Y8O5Aew==", + "license": "Apache-2.0", "dependencies": { "@material/mwc-base": "^0.22.1", "@material/mwc-icon-button": "^0.22.1", @@ -2668,10 +2494,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-line-ripple": { + "packages/open-scd/node_modules/@material/mwc-line-ripple": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-line-ripple/-/mwc-line-ripple-0.22.1.tgz", - "integrity": "sha512-Wx2BHD+/z4Fm8TXyiv59UVeNAirunTfR3uCEjGMU/R7mXUwjpjOhY5bNYGUcP9VyMGG5CkLovc8XX96/iKs1ag==", + "license": "Apache-2.0", "dependencies": { "@material/line-ripple": "=12.0.0-canary.22d29cbb4.0", "lit-element": "^2.5.1", @@ -2679,10 +2504,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-linear-progress": { + "packages/open-scd/node_modules/@material/mwc-linear-progress": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-linear-progress/-/mwc-linear-progress-0.22.1.tgz", - "integrity": "sha512-GqqUDomF1nZh6cN0Dgz41vphfvDR17+vdtYk1O5YU9ajW/yd+9SBqwbjfqo4g/jmCpJvMeKnBDZo3Hbc8KnK7g==", + "license": "Apache-2.0", "dependencies": { "@material/linear-progress": "=12.0.0-canary.22d29cbb4.0", "@material/mwc-base": "^0.22.1", @@ -2692,10 +2516,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-list": { + "packages/open-scd/node_modules/@material/mwc-list": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-list/-/mwc-list-0.22.1.tgz", - "integrity": "sha512-NGfacR/vSHMte7BOrFM7Cafi+tRIeBH8vNFcpP7yjqPkYCXt/9cEw0j1KVtldCRi20V38vkewUKdh2v3DiP5dg==", + "license": "Apache-2.0", "dependencies": { "@material/base": "=12.0.0-canary.22d29cbb4.0", "@material/dom": "=12.0.0-canary.22d29cbb4.0", @@ -2709,10 +2532,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-menu": { + "packages/open-scd/node_modules/@material/mwc-menu": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-menu/-/mwc-menu-0.22.1.tgz", - "integrity": "sha512-fY7dyxv9aIccMqPp0+ihbXfB8g7Khvz7tYhtVMLqb6CgpdXf06a/lW50eN0Mk4GC+mFyN36HKHDP7LMLFfsvlA==", + "license": "Apache-2.0", "dependencies": { "@material/menu": "=12.0.0-canary.22d29cbb4.0", "@material/menu-surface": "=12.0.0-canary.22d29cbb4.0", @@ -2725,10 +2547,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-notched-outline": { + "packages/open-scd/node_modules/@material/mwc-notched-outline": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-notched-outline/-/mwc-notched-outline-0.22.1.tgz", - "integrity": "sha512-Bi+CKK24/ypgQZech+vUOWPR8hjPxXILf+mt5liVoNXddGITbdFAShFndNb4Ln4Rn3omzvC63enhpYSS4ByRNw==", + "license": "Apache-2.0", "dependencies": { "@material/mwc-base": "^0.22.1", "@material/notched-outline": "=12.0.0-canary.22d29cbb4.0", @@ -2737,10 +2558,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-radio": { + "packages/open-scd/node_modules/@material/mwc-radio": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-radio/-/mwc-radio-0.22.1.tgz", - "integrity": "sha512-pFVuDl/bSCK7gVXC54Lsm6lMclt8MYk0u4yVsjaEUTeFk0xMK1ZvoXifIkW0IHhAJVmWgGpWX57wSzLrRZbUNw==", + "license": "Apache-2.0", "dependencies": { "@material/mwc-base": "^0.22.1", "@material/mwc-ripple": "^0.22.1", @@ -2749,10 +2569,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-ripple": { + "packages/open-scd/node_modules/@material/mwc-ripple": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-ripple/-/mwc-ripple-0.22.1.tgz", - "integrity": "sha512-QQyWWPBZ6veWNbBMWo8WQw0iY9QUjLLANorug8mPHv13ETdhwVUUozeKOY0ZCXWupNlqtap1Gd0IQjv6HVRMjA==", + "license": "Apache-2.0", "dependencies": { "@material/dom": "=12.0.0-canary.22d29cbb4.0", "@material/mwc-base": "^0.22.1", @@ -2762,10 +2581,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-select": { + "packages/open-scd/node_modules/@material/mwc-select": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-select/-/mwc-select-0.22.1.tgz", - "integrity": "sha512-P5o2DD48AtEpr+ZqbFlQ04GgSmcbhOTdQEeDBkDAxSsuErXQZgzY1aPCXlaDI0QzQ/gNP/13b4ejLqstVp9SQg==", + "license": "Apache-2.0", "dependencies": { "@material/dom": "=12.0.0-canary.22d29cbb4.0", "@material/floating-label": "=12.0.0-canary.22d29cbb4.0", @@ -2784,10 +2602,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-snackbar": { + "packages/open-scd/node_modules/@material/mwc-snackbar": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-snackbar/-/mwc-snackbar-0.22.1.tgz", - "integrity": "sha512-4ZTb4Gk/zKJWvvqqKuOFo1NO68DnCgyQlktPdNNTGhCERdxkEQnZz+mkAw+Mfr5tCBizomgaFzd6tuAZCUutyQ==", + "license": "Apache-2.0", "dependencies": { "@material/mwc-base": "^0.22.1", "@material/snackbar": "=12.0.0-canary.22d29cbb4.0", @@ -2796,10 +2613,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-switch": { + "packages/open-scd/node_modules/@material/mwc-switch": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-switch/-/mwc-switch-0.22.1.tgz", - "integrity": "sha512-KDY3uqT2qTEw6Z9TS91Ucs0LViUcMsP1XHu6ZNhbv9Ai1uK/i8pwVWAIGIX9Cm1iCdjiYGfKm4DZLORDb/rfEQ==", + "license": "Apache-2.0", "dependencies": { "@material/mwc-base": "^0.22.1", "@material/mwc-ripple": "^0.22.1", @@ -2808,10 +2624,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-tab": { + "packages/open-scd/node_modules/@material/mwc-tab": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-tab/-/mwc-tab-0.22.1.tgz", - "integrity": "sha512-sNPE8kRQEH04vEStxiidTjpyuHc+5Wm8+OVU8wrf6ChJa8KUV5bi2blWm6PW4rfQRo2Bs8AarDXv15t4wv3XWg==", + "license": "Apache-2.0", "dependencies": { "@material/mwc-base": "^0.22.1", "@material/mwc-ripple": "^0.22.1", @@ -2822,10 +2637,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-tab-bar": { + "packages/open-scd/node_modules/@material/mwc-tab-bar": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-tab-bar/-/mwc-tab-bar-0.22.1.tgz", - "integrity": "sha512-USn9pIMNfz2vPh7w2U55j0EVr82x3odq9VdcDGG5d4jWwzMPjJ9CKMjqgFrlIiPmxieD5zeSW0LauGhwv6ujOg==", + "license": "Apache-2.0", "dependencies": { "@material/mwc-base": "^0.22.1", "@material/mwc-tab": "^0.22.1", @@ -2836,10 +2650,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-tab-indicator": { + "packages/open-scd/node_modules/@material/mwc-tab-indicator": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-tab-indicator/-/mwc-tab-indicator-0.22.1.tgz", - "integrity": "sha512-/Q8vju7DAysqz3Fo+IINaGSeU9BinZbdaSUyRFjfrUWlzJCE6IYYB7zMyc2W+EjaxhjftpL/N3Sw50Xw+pAL+A==", + "license": "Apache-2.0", "dependencies": { "@material/mwc-base": "^0.22.1", "@material/tab-indicator": "=12.0.0-canary.22d29cbb4.0", @@ -2848,10 +2661,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-tab-scroller": { + "packages/open-scd/node_modules/@material/mwc-tab-scroller": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-tab-scroller/-/mwc-tab-scroller-0.22.1.tgz", - "integrity": "sha512-dqAsXS7Nyw61vVb6d11zDg0xuvAYfOyPmz6wLwcXxzSlHOCfkuFu2fcjhssZIlW3DzzzrCw7aZ+T6mHOZcr0dg==", + "license": "Apache-2.0", "dependencies": { "@material/dom": "=12.0.0-canary.22d29cbb4.0", "@material/mwc-base": "^0.22.1", @@ -2860,10 +2672,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-textarea": { + "packages/open-scd/node_modules/@material/mwc-textarea": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-textarea/-/mwc-textarea-0.22.1.tgz", - "integrity": "sha512-ta5ARYpxaCRvseXTKkp8tFBfJ0oP8FWsE4FymrjV5b+UEAEzAzjcWWolIDyS7DdixSj1ROI5dJHsU/on5lWPjw==", + "license": "Apache-2.0", "dependencies": { "@material/mwc-base": "^0.22.1", "@material/mwc-textfield": "^0.22.1", @@ -2872,10 +2683,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-textfield": { + "packages/open-scd/node_modules/@material/mwc-textfield": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-textfield/-/mwc-textfield-0.22.1.tgz", - "integrity": "sha512-7xLlW2B1wMnCi2JSlOELELPEUda0w6bWpjn4LB4UPi1hAWG8VR+Rn5rR6q4NDav9pad+qA7+PGjNlE32xVUm7g==", + "license": "Apache-2.0", "dependencies": { "@material/floating-label": "=12.0.0-canary.22d29cbb4.0", "@material/line-ripple": "=12.0.0-canary.22d29cbb4.0", @@ -2889,10 +2699,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-top-app-bar": { + "packages/open-scd/node_modules/@material/mwc-top-app-bar": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-top-app-bar/-/mwc-top-app-bar-0.22.1.tgz", - "integrity": "sha512-SHQLjMrHRYsJaT0+8rNjkYW9LDi93AsGX+USuCYhVPeMhBUcqVmr09lTCqj3xyJ3JAy43XONPhtXjxlMT1jCNg==", + "license": "Apache-2.0", "dependencies": { "@material/mwc-base": "^0.22.1", "@material/top-app-bar": "=12.0.0-canary.22d29cbb4.0", @@ -2901,10 +2710,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/mwc-top-app-bar-fixed": { + "packages/open-scd/node_modules/@material/mwc-top-app-bar-fixed": { "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-top-app-bar-fixed/-/mwc-top-app-bar-fixed-0.22.1.tgz", - "integrity": "sha512-ZpQGKmqmSHp1izqX1U0S+3E8s5xLSB81cjFlQPFKG6arU6TO8Xqyzd05JPfFHfau5aZeHQuJB0MOGN2QT31UCw==", + "license": "Apache-2.0", "dependencies": { "@material/mwc-top-app-bar": "^0.22.1", "@material/top-app-bar": "=12.0.0-canary.22d29cbb4.0", @@ -2912,10 +2720,9 @@ "tslib": "^2.0.1" } }, - "node_modules/@material/notched-outline": { + "packages/open-scd/node_modules/@material/notched-outline": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-LgVwQri2sI/EnAbSjyyzhifjcBKpYO48oy6HyRg6Cq/ZxOgNv3u/VG4fE3ToyNLe8pMPkfQsn2g8czuZoRYwxg==", + "license": "MIT", "dependencies": { "@material/base": "12.0.0-canary.22d29cbb4.0", "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", @@ -2926,18 +2733,16 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/progress-indicator": { + "packages/open-scd/node_modules/@material/progress-indicator": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-XnG61vDDUPQWK3obQcPHaTPxEKFfPKo8qtiKxkFnGdzIeezDGj7n9m8gdvzcqed8rGZWCNKYOzodkRfplStpMw==", + "license": "MIT", "dependencies": { "tslib": "^2.1.0" } }, - "node_modules/@material/radio": { + "packages/open-scd/node_modules/@material/radio": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/radio/-/radio-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-piGy+6YEtW3odicIImRGnc3uY0iD42IAe4+pnVo36KsfHLm5peYuEc0jrLI4zdmOPYlRxSskIbAAzfMKdwKG1A==", + "license": "MIT", "dependencies": { "@material/animation": "12.0.0-canary.22d29cbb4.0", "@material/base": "12.0.0-canary.22d29cbb4.0", @@ -2950,10 +2755,9 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/ripple": { + "packages/open-scd/node_modules/@material/ripple": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-IzBtXi4EWx27Hkfd5Zkx/MrZAXJZe0AAQCo37Etl/af0/aJPIOyCOdHQiwoK2FqRH71pmNfUGrUWOeUxFyaSdw==", + "license": "MIT", "dependencies": { "@material/animation": "12.0.0-canary.22d29cbb4.0", "@material/base": "12.0.0-canary.22d29cbb4.0", @@ -2963,19 +2767,17 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/rtl": { + "packages/open-scd/node_modules/@material/rtl": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-R7u7w5U+mvRwsj15tpf/CbALs3FrGVidsTkv8C1uZDK1ae490De8HSe839lcFcXmM8c/PFSx5B3rKyQG2AyraQ==", + "license": "MIT", "dependencies": { "@material/theme": "12.0.0-canary.22d29cbb4.0", "tslib": "^2.1.0" } }, - "node_modules/@material/select": { + "packages/open-scd/node_modules/@material/select": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/select/-/select-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-ROpNqkHkv/ZUWNf4tWxDo/L6P2QwWaNKADSqYpg/XXecAm7NdBX5aDo63VCBPCm57JkAdBWJQB5MRrbkaWLTfA==", + "license": "MIT", "dependencies": { "@material/animation": "12.0.0-canary.22d29cbb4.0", "@material/base": "12.0.0-canary.22d29cbb4.0", @@ -2996,10 +2798,9 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/shape": { + "packages/open-scd/node_modules/@material/shape": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/shape/-/shape-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-yKC+cqdjGYg3sseZ4baNe9OLhBENHwX2SpJGZORZ7ix4/8pxzFG3wO80eZ8LsldzYem9MmtcbRilBZ4rvvxh0A==", + "license": "MIT", "dependencies": { "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", "@material/rtl": "12.0.0-canary.22d29cbb4.0", @@ -3007,10 +2808,9 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/snackbar": { + "packages/open-scd/node_modules/@material/snackbar": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/snackbar/-/snackbar-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-NDYR2rYyF2kbQYCec/I0NmAPtnXMBpGYEQ4/m10rAzTP2hsyySZs0cKk54/V3czT+gFz9C9W3zCm1CwgJwL5fA==", + "license": "MIT", "dependencies": { "@material/animation": "12.0.0-canary.22d29cbb4.0", "@material/base": "12.0.0-canary.22d29cbb4.0", @@ -3027,10 +2827,9 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/switch": { + "packages/open-scd/node_modules/@material/switch": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/switch/-/switch-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-kubSphtXl74TC/PAjp67lYi7Ngk0MEKTLzp1ZHiMHElew2Z9/IYHP0pPaQRTkBY0ddIx6hVdHMiMf8qB4zuz2w==", + "license": "MIT", "dependencies": { "@material/animation": "12.0.0-canary.22d29cbb4.0", "@material/base": "12.0.0-canary.22d29cbb4.0", @@ -3045,10 +2844,9 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/tab": { + "packages/open-scd/node_modules/@material/tab": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/tab/-/tab-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-Tmb+8Dsx7wItbqOW4JHUVIq3I/inM3l/gk6EV/ctNeyz8coPIJL39yN4CcTX+VHsYykF+tK3jz4QSQX0ASfimQ==", + "license": "MIT", "dependencies": { "@material/base": "12.0.0-canary.22d29cbb4.0", "@material/elevation": "12.0.0-canary.22d29cbb4.0", @@ -3061,10 +2859,9 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/tab-bar": { + "packages/open-scd/node_modules/@material/tab-bar": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/tab-bar/-/tab-bar-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-cxGyfONh9tFK2tISHDSAWFfH/uxH/HfTTjuDQIiPkOLmr6oVgGPXP2AdsZ0Z60HJCAedbR9mdWCesEk8w4f8+Q==", + "license": "MIT", "dependencies": { "@material/animation": "12.0.0-canary.22d29cbb4.0", "@material/base": "12.0.0-canary.22d29cbb4.0", @@ -3079,10 +2876,9 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/tab-indicator": { + "packages/open-scd/node_modules/@material/tab-indicator": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/tab-indicator/-/tab-indicator-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-7MeJG5bN7WCyNsjT+7iGci2XuIkwUXA3QRz3La2zKPBxnPkRiz7GUwkpr1b5h6wPpYfCWKyCbixQD9Ufgq3kKA==", + "license": "MIT", "dependencies": { "@material/animation": "12.0.0-canary.22d29cbb4.0", "@material/base": "12.0.0-canary.22d29cbb4.0", @@ -3091,10 +2887,9 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/tab-scroller": { + "packages/open-scd/node_modules/@material/tab-scroller": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/tab-scroller/-/tab-scroller-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-IaFQiwJ/MKhbFvKcGmlAFNHCxXf5THyjefgzav/k0Fu49vzQFA1ZiSTvPU7/d0vV/G2amaba+l5w9TP9/n4KFw==", + "license": "MIT", "dependencies": { "@material/animation": "12.0.0-canary.22d29cbb4.0", "@material/base": "12.0.0-canary.22d29cbb4.0", @@ -3104,10 +2899,9 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/textfield": { + "packages/open-scd/node_modules/@material/textfield": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-OJMgS0iniOvnRJa5DWyFqg1VIC77KEdoXern9OQiQphUE1LJ2Kbbwwj0GgyULuxhcUlUSnnisw+J5IfWK7kMUg==", + "license": "MIT", "dependencies": { "@material/animation": "12.0.0-canary.22d29cbb4.0", "@material/base": "12.0.0-canary.22d29cbb4.0", @@ -3125,19 +2919,17 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/theme": { + "packages/open-scd/node_modules/@material/theme": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/theme/-/theme-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-r4xYCgc+CrbvDxCINVqXwAFWQ1WgV3s2+bUse/2iw53YqyemhhtzFjfp+DXLdC4zJSOuObWC45eaDKeseLMGMw==", + "license": "MIT", "dependencies": { "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", "tslib": "^2.1.0" } }, - "node_modules/@material/top-app-bar": { + "packages/open-scd/node_modules/@material/top-app-bar": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/top-app-bar/-/top-app-bar-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-fTS0kOHyUAKBhtz8olDvsCtZ6VxJEJ5QNUAZdHbJsTjig87poLLUP2CKJ18t5DjzW/KFMFjNYMSbah6NOREvqg==", + "license": "MIT", "dependencies": { "@material/animation": "12.0.0-canary.22d29cbb4.0", "@material/base": "12.0.0-canary.22d29cbb4.0", @@ -3150,43 +2942,38 @@ "tslib": "^2.1.0" } }, - "node_modules/@material/touch-target": { + "packages/open-scd/node_modules/@material/touch-target": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-aPEMmR+xRI5ywD9JM+njTgU14CCsgRSS7CLZwd+wsfJkMYPCi8rBM3t23bu/jILa4IT6TIe32Ew1xIBVxJNpgQ==", + "license": "MIT", "dependencies": { "@material/base": "12.0.0-canary.22d29cbb4.0", "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", "tslib": "^2.1.0" } }, - "node_modules/@material/typography": { + "packages/open-scd/node_modules/@material/typography": { "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/typography/-/typography-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-lIzU4IFjaSfVRbhsabTiri8CD+fEe9/DaGpoDm89sHm7b8RbN1+m+7OrePICcWgWFo2swRndph8qhzh7gTYdew==", + "license": "MIT", "dependencies": { "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", "@material/theme": "12.0.0-canary.22d29cbb4.0", "tslib": "^2.1.0" } }, - "node_modules/@mdn/browser-compat-data": { + "packages/open-scd/node_modules/@mdn/browser-compat-data": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.1.0.tgz", - "integrity": "sha512-58eB5/ovJ5CfArzZwmZdenF/WlAGGS+1PG8RUb3oJ4st9exETBjClmFC0E1uVrZG1BwPaT205RKS8RhnUh5x3Q==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, - "node_modules/@microsoft/tsdoc": { + "packages/open-scd/node_modules/@microsoft/tsdoc": { "version": "0.13.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.13.2.tgz", - "integrity": "sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@microsoft/tsdoc-config": { + "packages/open-scd/node_modules/@microsoft/tsdoc-config": { "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.15.2.tgz", - "integrity": "sha512-mK19b2wJHSdNf8znXSMYVShAHktVr/ib0Ck2FA3lsVBSEhSI/TfXT7DJQkAYgcztTuwazGcg58ZjYdk0hTCVrA==", "dev": true, + "license": "MIT", "dependencies": { "@microsoft/tsdoc": "0.13.2", "ajv": "~6.12.6", @@ -3194,11 +2981,10 @@ "resolve": "~1.19.0" } }, - "node_modules/@microsoft/tsdoc-config/node_modules/ajv": { + "packages/open-scd/node_modules/@microsoft/tsdoc-config/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3210,17 +2996,15 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@microsoft/tsdoc-config/node_modules/json-schema-traverse": { + "packages/open-scd/node_modules/@microsoft/tsdoc-config/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@microsoft/tsdoc-config/node_modules/resolve": { + "packages/open-scd/node_modules/@microsoft/tsdoc-config/node_modules/resolve": { "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.1.0", "path-parse": "^1.0.6" @@ -3229,11 +3013,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@nodelib/fs.scandir": { + "packages/open-scd/node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -3242,20 +3025,18 @@ "node": ">= 8" } }, - "node_modules/@nodelib/fs.stat": { + "packages/open-scd/node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, - "node_modules/@nodelib/fs.walk": { + "packages/open-scd/node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -3264,11 +3045,10 @@ "node": ">= 8" } }, - "node_modules/@npmcli/arborist": { + "packages/open-scd/node_modules/@npmcli/arborist": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-2.10.0.tgz", - "integrity": "sha512-CLnD+zXG9oijEEzViimz8fbOoFVb7hoypiaf7p6giJhvYtrxLAyY3cZAMPIFQvsG731+02eMDp3LqVBNo7BaZA==", "dev": true, + "license": "ISC", "dependencies": { "@isaacs/string-locale-compare": "^1.0.1", "@npmcli/installed-package-contents": "^1.0.7", @@ -3310,21 +3090,19 @@ "node": ">= 10" } }, - "node_modules/@npmcli/fs": { + "packages/open-scd/node_modules/@npmcli/fs": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz", - "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==", "dev": true, + "license": "ISC", "dependencies": { "@gar/promisify": "^1.0.1", "semver": "^7.3.5" } }, - "node_modules/@npmcli/git": { + "packages/open-scd/node_modules/@npmcli/git": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", - "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/promise-spawn": "^1.3.2", "lru-cache": "^6.0.0", @@ -3336,11 +3114,10 @@ "which": "^2.0.2" } }, - "node_modules/@npmcli/installed-package-contents": { + "packages/open-scd/node_modules/@npmcli/installed-package-contents": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", "dev": true, + "license": "ISC", "dependencies": { "npm-bundled": "^1.1.1", "npm-normalize-package-bin": "^1.0.1" @@ -3352,11 +3129,10 @@ "node": ">= 10" } }, - "node_modules/@npmcli/map-workspaces": { + "packages/open-scd/node_modules/@npmcli/map-workspaces": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-1.0.4.tgz", - "integrity": "sha512-wVR8QxhyXsFcD/cORtJwGQodeeaDf0OxcHie8ema4VgFeqwYkFsDPnSrIRSytX8xR6nKPAH89WnwTcaU608b/Q==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/name-from-folder": "^1.0.1", "glob": "^7.1.6", @@ -3367,22 +3143,20 @@ "node": ">=10" } }, - "node_modules/@npmcli/metavuln-calculator": { + "packages/open-scd/node_modules/@npmcli/metavuln-calculator": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-1.1.1.tgz", - "integrity": "sha512-9xe+ZZ1iGVaUovBVFI9h3qW+UuECUzhvZPxK9RaEA2mjU26o5D0JloGYWwLYvQELJNmBdQB6rrpuN8jni6LwzQ==", "dev": true, + "license": "ISC", "dependencies": { "cacache": "^15.0.5", "pacote": "^11.1.11", "semver": "^7.3.2" } }, - "node_modules/@npmcli/move-file": { + "packages/open-scd/node_modules/@npmcli/move-file": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", "dev": true, + "license": "MIT", "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -3391,41 +3165,36 @@ "node": ">=10" } }, - "node_modules/@npmcli/name-from-folder": { + "packages/open-scd/node_modules/@npmcli/name-from-folder": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", - "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/@npmcli/node-gyp": { + "packages/open-scd/node_modules/@npmcli/node-gyp": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", - "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/@npmcli/package-json": { + "packages/open-scd/node_modules/@npmcli/package-json": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-1.0.1.tgz", - "integrity": "sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg==", "dev": true, + "license": "ISC", "dependencies": { "json-parse-even-better-errors": "^2.3.1" } }, - "node_modules/@npmcli/promise-spawn": { + "packages/open-scd/node_modules/@npmcli/promise-spawn": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", "dev": true, + "license": "ISC", "dependencies": { "infer-owner": "^1.0.4" } }, - "node_modules/@npmcli/run-script": { + "packages/open-scd/node_modules/@npmcli/run-script": { "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.6.tgz", - "integrity": "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/node-gyp": "^1.0.2", "@npmcli/promise-spawn": "^1.3.2", @@ -3433,11 +3202,10 @@ "read-package-json-fast": "^2.0.1" } }, - "node_modules/@open-wc/building-utils": { + "packages/open-scd/node_modules/@open-wc/building-utils": { "version": "2.18.4", - "resolved": "https://registry.npmjs.org/@open-wc/building-utils/-/building-utils-2.18.4.tgz", - "integrity": "sha512-wjNp9oE1SFsiBEqaI67ff60KHDpDbGMNF+82pvCHe412SFY4q8DNy8A+hesj1nZsuZHH1/olDfzBDbYKAnmgMg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.1", "@babel/plugin-syntax-dynamic-import": "^7.8.3", @@ -3467,89 +3235,78 @@ "whatwg-url": "^7.1.0" } }, - "node_modules/@open-wc/building-utils/node_modules/arrify": { + "packages/open-scd/node_modules/@open-wc/building-utils/node_modules/arrify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@open-wc/building-utils/node_modules/lru-cache": { + "packages/open-scd/node_modules/@open-wc/building-utils/node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, - "node_modules/@open-wc/building-utils/node_modules/parse5": { + "packages/open-scd/node_modules/@open-wc/building-utils/node_modules/parse5": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@open-wc/building-utils/node_modules/tr46": { + "packages/open-scd/node_modules/@open-wc/building-utils/node_modules/tr46": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.1.0" } }, - "node_modules/@open-wc/building-utils/node_modules/webidl-conversions": { + "packages/open-scd/node_modules/@open-wc/building-utils/node_modules/webidl-conversions": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, - "node_modules/@open-wc/building-utils/node_modules/whatwg-url": { + "packages/open-scd/node_modules/@open-wc/building-utils/node_modules/whatwg-url": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, + "license": "MIT", "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", "webidl-conversions": "^4.0.2" } }, - "node_modules/@open-wc/building-utils/node_modules/yallist": { + "packages/open-scd/node_modules/@open-wc/building-utils/node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/@open-wc/chai-dom-equals": { + "packages/open-scd/node_modules/@open-wc/chai-dom-equals": { "version": "0.12.36", - "resolved": "https://registry.npmjs.org/@open-wc/chai-dom-equals/-/chai-dom-equals-0.12.36.tgz", - "integrity": "sha512-Gt1fa37h4rtWPQGETSU4n1L678NmMi9KwHM1sH+JCGcz45rs8DBPx7MUVeGZ+HxRlbEI5t9LU2RGGv6xT2OlyA==", "dev": true, + "license": "MIT", "dependencies": { "@open-wc/semantic-dom-diff": "^0.13.16", "@types/chai": "^4.1.7" } }, - "node_modules/@open-wc/chai-dom-equals/node_modules/@open-wc/semantic-dom-diff": { + "packages/open-scd/node_modules/@open-wc/chai-dom-equals/node_modules/@open-wc/semantic-dom-diff": { "version": "0.13.21", - "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.13.21.tgz", - "integrity": "sha512-BONpjHcGX2zFa9mfnwBCLEmlDsOHzT+j6Qt1yfK3MzFXFtAykfzFjAgaxPetu0YbBlCfXuMlfxI4vlRGCGMvFg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@open-wc/dedupe-mixin": { + "packages/open-scd/node_modules/@open-wc/dedupe-mixin": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@open-wc/dedupe-mixin/-/dedupe-mixin-1.3.0.tgz", - "integrity": "sha512-UfdK1MPnR6T7f3svzzYBfu3qBkkZ/KsPhcpc3JYhsUY4hbpwNF9wEQtD4Z+/mRqMTJrKg++YSxIxE0FBhY3RIw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@open-wc/eslint-config": { + "packages/open-scd/node_modules/@open-wc/eslint-config": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@open-wc/eslint-config/-/eslint-config-4.3.0.tgz", - "integrity": "sha512-kCxFWQ1AR4meTmWJGnK36LJYqDJeFGjlj6n4vLjAW3/c1VUyYQKL90vrNKy/OHS9kTjc9dcH5D64myAbNx6r1w==", "dev": true, + "license": "MIT", "dependencies": { "eslint": "^7.6.0", "eslint-config-airbnb-base": "^14.0.0", @@ -3570,31 +3327,28 @@ "eslint-plugin-wc": "^1.2.0" } }, - "node_modules/@open-wc/scoped-elements": { + "packages/open-scd/node_modules/@open-wc/scoped-elements": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@open-wc/scoped-elements/-/scoped-elements-1.3.4.tgz", - "integrity": "sha512-WD+ObocdzcFCpBxnc8bQa7NoATeA+tJrK0/c/yV1Nx4leV+1PmJNNu+WCcuckBEGd0Op6FP8w1TidoqmVVba6g==", "dev": true, + "license": "MIT", "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "lit-html": "^1.0.0" } }, - "node_modules/@open-wc/semantic-dom-diff": { + "packages/open-scd/node_modules/@open-wc/semantic-dom-diff": { "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.19.5.tgz", - "integrity": "sha512-Wi0Fuj3dzqlWClU0y+J4k/nqTcH0uwgOWxZXPyeyG3DdvuyyjgiT4L4I/s6iVShWQvvEsyXnj7yVvixAo3CZvg==", "dev": true, + "license": "MIT", "dependencies": { "@types/chai": "^4.2.11", "@web/test-runner-commands": "^0.5.7" } }, - "node_modules/@open-wc/testing": { + "packages/open-scd/node_modules/@open-wc/testing": { "version": "2.5.33", - "resolved": "https://registry.npmjs.org/@open-wc/testing/-/testing-2.5.33.tgz", - "integrity": "sha512-+EJNs0i+VV4nE+BrG70l2DNGXOZTSrluruaaU06HUSk57ZlKa+kIxWmkLxCOLlbgnQgrPrQWxbs3lgB1tIx/YA==", "dev": true, + "license": "MIT", "dependencies": { "@open-wc/chai-dom-equals": "^0.12.36", "@open-wc/semantic-dom-diff": "^0.19.3", @@ -3610,22 +3364,20 @@ "sinon-chai": "^3.5.0" } }, - "node_modules/@open-wc/testing-helpers": { + "packages/open-scd/node_modules/@open-wc/testing-helpers": { "version": "1.8.12", - "resolved": "https://registry.npmjs.org/@open-wc/testing-helpers/-/testing-helpers-1.8.12.tgz", - "integrity": "sha512-+4exEHYvnFqI1RGDDIKFHPZ7Ws5NK1epvEku3zLaOYN3zc+huX19SndNc5+X++v8A+quN/iXbHlh80ROyNaYDA==", "dev": true, + "license": "MIT", "dependencies": { "@open-wc/scoped-elements": "^1.2.4", "lit-element": "^2.2.1", "lit-html": "^1.0.0" } }, - "node_modules/@rollup/plugin-babel": { + "packages/open-scd/node_modules/@rollup/plugin-babel": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.10.4", "@rollup/pluginutils": "^3.1.0" @@ -3644,11 +3396,10 @@ } } }, - "node_modules/@rollup/plugin-commonjs": { + "packages/open-scd/node_modules/@rollup/plugin-commonjs": { "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-16.0.0.tgz", - "integrity": "sha512-LuNyypCP3msCGVQJ7ki8PqYdpjfEkE/xtFa5DqlF+7IBD0JsfMZ87C58heSwIMint58sAUZbt3ITqOmdQv/dXw==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^3.1.0", "commondir": "^1.0.1", @@ -3665,17 +3416,15 @@ "rollup": "^2.30.0" } }, - "node_modules/@rollup/plugin-commonjs/node_modules/estree-walker": { + "packages/open-scd/node_modules/@rollup/plugin-commonjs/node_modules/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 + "dev": true, + "license": "MIT" }, - "node_modules/@rollup/plugin-inject": { + "packages/open-scd/node_modules/@rollup/plugin-inject": { "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, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^3.1.0", "estree-walker": "^2.0.1", @@ -3685,17 +3434,15 @@ "rollup": "^1.20.0 || ^2.0.0" } }, - "node_modules/@rollup/plugin-inject/node_modules/estree-walker": { + "packages/open-scd/node_modules/@rollup/plugin-inject/node_modules/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 + "dev": true, + "license": "MIT" }, - "node_modules/@rollup/plugin-json": { + "packages/open-scd/node_modules/@rollup/plugin-json": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", - "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^3.0.8" }, @@ -3703,11 +3450,10 @@ "rollup": "^1.20.0 || ^2.0.0" } }, - "node_modules/@rollup/plugin-node-resolve": { + "packages/open-scd/node_modules/@rollup/plugin-node-resolve": { "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^3.1.0", "@types/resolve": "1.17.1", @@ -3723,11 +3469,10 @@ "rollup": "^1.20.0||^2.0.0" } }, - "node_modules/@rollup/plugin-replace": { + "packages/open-scd/node_modules/@rollup/plugin-replace": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^3.1.0", "magic-string": "^0.25.7" @@ -3736,11 +3481,10 @@ "rollup": "^1.20.0 || ^2.0.0" } }, - "node_modules/@rollup/pluginutils": { + "packages/open-scd/node_modules/@rollup/pluginutils": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", @@ -3753,11 +3497,10 @@ "rollup": "^1.20.0||^2.0.0" } }, - "node_modules/@sindresorhus/is": { + "packages/open-scd/node_modules/@sindresorhus/is": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", - "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3765,46 +3508,41 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/@sinonjs/commons": { + "packages/open-scd/node_modules/@sinonjs/commons": { "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, - "node_modules/@sinonjs/fake-timers": { + "packages/open-scd/node_modules/@sinonjs/fake-timers": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", - "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^1.7.0" } }, - "node_modules/@sinonjs/samsam": { + "packages/open-scd/node_modules/@sinonjs/samsam": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.0.2.tgz", - "integrity": "sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^1.6.0", "lodash.get": "^4.4.2", "type-detect": "^4.0.8" } }, - "node_modules/@sinonjs/text-encoding": { + "packages/open-scd/node_modules/@sinonjs/text-encoding": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", - "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", - "dev": true + "dev": true, + "license": "(Unlicense OR Apache-2.0)" }, - "node_modules/@snowpack/plugin-typescript": { + "packages/open-scd/node_modules/@snowpack/plugin-typescript": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@snowpack/plugin-typescript/-/plugin-typescript-1.2.1.tgz", - "integrity": "sha512-wU+JNaMVkqGsqTaUY7TnEMhGt/3URTgA9dpMCtZX6wn/ceA7Gwlmue/sOLynf0OTNLygHPvjiQECQYkEi3LTtg==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^5.0.0", "npm-run-path": "^4.0.1" @@ -3813,11 +3551,10 @@ "typescript": "*" } }, - "node_modules/@surma/rollup-plugin-off-main-thread": { + "packages/open-scd/node_modules/@surma/rollup-plugin-off-main-thread": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "ejs": "^3.1.6", "json5": "^2.2.0", @@ -3825,11 +3562,10 @@ "string.prototype.matchall": "^4.0.6" } }, - "node_modules/@surma/rollup-plugin-off-main-thread/node_modules/json5": { + "packages/open-scd/node_modules/@surma/rollup-plugin-off-main-thread/node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -3837,11 +3573,10 @@ "node": ">=6" } }, - "node_modules/@szmarczak/http-timer": { + "packages/open-scd/node_modules/@szmarczak/http-timer": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, + "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.0" }, @@ -3849,35 +3584,31 @@ "node": ">=10" } }, - "node_modules/@tootallnate/once": { + "packages/open-scd/node_modules/@tootallnate/once": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } }, - "node_modules/@types/accepts": { + "packages/open-scd/node_modules/@types/accepts": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/babel__code-frame": { + "packages/open-scd/node_modules/@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 + "dev": true, + "license": "MIT" }, - "node_modules/@types/babel__core": { + "packages/open-scd/node_modules/@types/babel__core": { "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, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0", @@ -3886,65 +3617,57 @@ "@types/babel__traverse": "*" } }, - "node_modules/@types/babel__generator": { + "packages/open-scd/node_modules/@types/babel__generator": { "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", - "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } }, - "node_modules/@types/babel__template": { + "packages/open-scd/node_modules/@types/babel__template": { "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, - "node_modules/@types/babel__traverse": { + "packages/open-scd/node_modules/@types/babel__traverse": { "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.3.0" } }, - "node_modules/@types/body-parser": { + "packages/open-scd/node_modules/@types/body-parser": { "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" } }, - "node_modules/@types/browserslist": { + "packages/open-scd/node_modules/@types/browserslist": { "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@types/browserslist/-/browserslist-4.15.0.tgz", - "integrity": "sha512-h9LyKErRGZqMsHh9bd+FE8yCIal4S0DxKTOeui56VgVXqa66TKiuaIUxCAI7c1O0LjaUzOTcsMyOpO9GetozRA==", - "deprecated": "This is a stub types definition. browserslist provides its own type definitions, so you do not need this installed.", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "*" } }, - "node_modules/@types/browserslist-useragent": { + "packages/open-scd/node_modules/@types/browserslist-useragent": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/browserslist-useragent/-/browserslist-useragent-3.0.4.tgz", - "integrity": "sha512-S/AhrluMHi8EcuxxCtTDBGr8u+XvwUfLvZdARuIS2LFZ/lHoeaeJJYCozD68GKH6wm52FbIHq4WWPF/Ec6a9qA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/cacheable-request": { + "packages/open-scd/node_modules/@types/cacheable-request": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "*", @@ -3952,75 +3675,65 @@ "@types/responselike": "*" } }, - "node_modules/@types/caniuse-api": { + "packages/open-scd/node_modules/@types/caniuse-api": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/caniuse-api/-/caniuse-api-3.0.2.tgz", - "integrity": "sha512-YfCDMn7R59n7GFFfwjPAM0zLJQy4UvveC32rOJBmTqJJY8uSRqM4Dc7IJj8V9unA48Qy4nj5Bj3jD6Q8VZ1Seg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/chai": { + "packages/open-scd/node_modules/@types/chai": { "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 + "dev": true, + "license": "MIT" }, - "node_modules/@types/chai-dom": { + "packages/open-scd/node_modules/@types/chai-dom": { "version": "0.0.9", - "resolved": "https://registry.npmjs.org/@types/chai-dom/-/chai-dom-0.0.9.tgz", - "integrity": "sha512-jj4F2NJog2/GBYsyJ8+NvhnWUBbPY4MUAKLdPJE6+568rw12GGXvj0ycUuP5nndVrnJgozmJAoMTvxvjJATXWw==", "dev": true, + "license": "MIT", "dependencies": { "@types/chai": "*" } }, - "node_modules/@types/co-body": { + "packages/open-scd/node_modules/@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, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*" } }, - "node_modules/@types/command-line-args": { + "packages/open-scd/node_modules/@types/command-line-args": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", - "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/command-line-usage": { + "packages/open-scd/node_modules/@types/command-line-usage": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.2.tgz", - "integrity": "sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/connect": { + "packages/open-scd/node_modules/@types/connect": { "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/content-disposition": { + "packages/open-scd/node_modules/@types/content-disposition": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/convert-source-map": { + "packages/open-scd/node_modules/@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 + "dev": true, + "license": "MIT" }, - "node_modules/@types/cookies": { + "packages/open-scd/node_modules/@types/cookies": { "version": "0.7.7", - "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.7.tgz", - "integrity": "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/express": "*", @@ -4028,32 +3741,28 @@ "@types/node": "*" } }, - "node_modules/@types/debounce": { + "packages/open-scd/node_modules/@types/debounce": { "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 + "dev": true, + "license": "MIT" }, - "node_modules/@types/estree": { + "packages/open-scd/node_modules/@types/estree": { "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/etag": { + "packages/open-scd/node_modules/@types/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@types/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-bsKkeSqN7HYyYntFRAmzcwx/dKW4Wa+KVMTInANlI72PWLQmOpZu96j0OqHZGArW4VQwCmJPteQlXaUDeOB0WQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/express": { + "packages/open-scd/node_modules/@types/express": { "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", "dev": true, + "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.18", @@ -4061,91 +3770,79 @@ "@types/serve-static": "*" } }, - "node_modules/@types/express-serve-static-core": { + "packages/open-scd/node_modules/@types/express-serve-static-core": { "version": "4.17.26", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.26.tgz", - "integrity": "sha512-zeu3tpouA043RHxW0gzRxwCHchMgftE8GArRsvYT0ByDMbn19olQHx5jLue0LxWY6iYtXb7rXmuVtSkhy9YZvQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*" } }, - "node_modules/@types/http-assert": { + "packages/open-scd/node_modules/@types/http-assert": { "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 + "dev": true, + "license": "MIT" }, - "node_modules/@types/http-cache-semantics": { + "packages/open-scd/node_modules/@types/http-cache-semantics": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/http-errors": { + "packages/open-scd/node_modules/@types/http-errors": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-e+2rjEwK6KDaNOm5Aa9wNGgyS9oSZU/4pfSMMPYNOfjvFI0WVXm29+ITRFr6aKDvvKo7uU1jV68MW4ScsfDi7Q==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/istanbul-lib-coverage": { + "packages/open-scd/node_modules/@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 + "dev": true, + "license": "MIT" }, - "node_modules/@types/istanbul-lib-report": { + "packages/open-scd/node_modules/@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, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, - "node_modules/@types/istanbul-reports": { + "packages/open-scd/node_modules/@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, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, - "node_modules/@types/json-schema": { + "packages/open-scd/node_modules/@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 + "dev": true, + "license": "MIT" }, - "node_modules/@types/json5": { + "packages/open-scd/node_modules/@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 + "dev": true, + "license": "MIT" }, - "node_modules/@types/keygrip": { + "packages/open-scd/node_modules/@types/keygrip": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", - "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/keyv": { + "packages/open-scd/node_modules/@types/keyv": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", - "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/koa": { + "packages/open-scd/node_modules/@types/koa": { "version": "2.13.4", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.4.tgz", - "integrity": "sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw==", "dev": true, + "license": "MIT", "dependencies": { "@types/accepts": "*", "@types/content-disposition": "*", @@ -4157,236 +3854,206 @@ "@types/node": "*" } }, - "node_modules/@types/koa__cors": { + "packages/open-scd/node_modules/@types/koa__cors": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/koa__cors/-/koa__cors-3.0.3.tgz", - "integrity": "sha512-74Xb4hJOPGKlrQ4PRBk1A/p0gfLpgbnpT0o67OMVbwyeMXvlBN+ZCRztAAmkKZs+8hKbgMutUlZVbA52Hr/0IA==", "dev": true, + "license": "MIT", "dependencies": { "@types/koa": "*" } }, - "node_modules/@types/koa-compose": { + "packages/open-scd/node_modules/@types/koa-compose": { "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", - "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/koa": "*" } }, - "node_modules/@types/koa-compress": { + "packages/open-scd/node_modules/@types/koa-compress": { "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@types/koa-compress/-/koa-compress-2.0.9.tgz", - "integrity": "sha512-1Sa9OsbHd2N2N7gLpdIRHe8W99EZbfIR31D7Iisx16XgwZCnWUtGXzXQejhu74Y1pE/wILqBP6VL49ch/MVpZw==", "dev": true, + "license": "MIT", "dependencies": { "@types/koa": "*", "@types/node": "*" } }, - "node_modules/@types/koa-etag": { + "packages/open-scd/node_modules/@types/koa-etag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/koa-etag/-/koa-etag-3.0.0.tgz", - "integrity": "sha512-gXQUtKGEnCy0sZLG+uE3wL4mvY1CBPcb6ECjpAoD8RGYy/8ACY1B084k8LTFPIdVcmy7GD6Y4n3up3jnupofcQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/etag": "*", "@types/koa": "*" } }, - "node_modules/@types/koa-send": { + "packages/open-scd/node_modules/@types/koa-send": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@types/koa-send/-/koa-send-4.1.3.tgz", - "integrity": "sha512-daaTqPZlgjIJycSTNjKpHYuKhXYP30atFc1pBcy6HHqB9+vcymDgYTguPdx9tO4HMOqNyz6bz/zqpxt5eLR+VA==", "dev": true, + "license": "MIT", "dependencies": { "@types/koa": "*" } }, - "node_modules/@types/koa-static": { + "packages/open-scd/node_modules/@types/koa-static": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/koa-static/-/koa-static-4.0.2.tgz", - "integrity": "sha512-ns/zHg+K6XVPMuohjpOlpkR1WLa4VJ9czgUP9bxkCDn0JZBtUWbD/wKDZzPGDclkQK1bpAEScufCHOy8cbfL0w==", "dev": true, + "license": "MIT", "dependencies": { "@types/koa": "*", "@types/koa-send": "*" } }, - "node_modules/@types/lru-cache": { + "packages/open-scd/node_modules/@types/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/marked": { + "packages/open-scd/node_modules/@types/marked": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-2.0.5.tgz", - "integrity": "sha512-shRZ7XnYFD/8n8zSjKvFdto1QNSf4tONZIlNEZGrJe8GsOE8DL/hG1Hbl8gZlfLnjS7+f5tZGIaTgfpyW38h4w==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/mime": { + "packages/open-scd/node_modules/@types/mime": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/mime-types": { + "packages/open-scd/node_modules/@types/mime-types": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.1.tgz", - "integrity": "sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/minimatch": { + "packages/open-scd/node_modules/@types/minimatch": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/minimist": { + "packages/open-scd/node_modules/@types/minimist": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/mocha": { + "packages/open-scd/node_modules/@types/mocha": { "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/node": { + "packages/open-scd/node_modules/@types/node": { "version": "16.11.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.11.tgz", - "integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/normalize-package-data": { + "packages/open-scd/node_modules/@types/normalize-package-data": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/parse-json": { + "packages/open-scd/node_modules/@types/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/parse5": { + "packages/open-scd/node_modules/@types/parse5": { "version": "2.2.34", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz", - "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/path-is-inside": { + "packages/open-scd/node_modules/@types/path-is-inside": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/path-is-inside/-/path-is-inside-1.0.0.tgz", - "integrity": "sha512-hfnXRGugz+McgX2jxyy5qz9sB21LRzlGn24zlwN2KEgoPtEvjzNRrLtUkOOebPDPZl3Rq7ywKxYvylVcEZDnEw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/qs": { + "packages/open-scd/node_modules/@types/qs": { "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/range-parser": { + "packages/open-scd/node_modules/@types/range-parser": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/resolve": { + "packages/open-scd/node_modules/@types/resolve": { "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/responselike": { + "packages/open-scd/node_modules/@types/responselike": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/serve-static": { + "packages/open-scd/node_modules/@types/serve-static": { "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, - "node_modules/@types/sinon": { + "packages/open-scd/node_modules/@types/sinon": { "version": "10.0.6", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.6.tgz", - "integrity": "sha512-6EF+wzMWvBNeGrfP3Nx60hhx+FfwSg1JJBLAAP/IdIUq0EYkqCYf70VT3PhuhPX9eLD+Dp+lNdpb/ZeHG8Yezg==", "dev": true, + "license": "MIT", "dependencies": { "@sinonjs/fake-timers": "^7.1.0" } }, - "node_modules/@types/sinon-chai": { + "packages/open-scd/node_modules/@types/sinon-chai": { "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.6.tgz", - "integrity": "sha512-Z57LprQ+yOQNu9d6mWdHNvnmncPXzDWGSeLj+8L075/QahToapC4Q13zAFRVKV4clyBmdJ5gz4xBfVkOso5lXw==", "dev": true, + "license": "MIT", "dependencies": { "@types/chai": "*", "@types/sinon": "*" } }, - "node_modules/@types/trusted-types": { + "packages/open-scd/node_modules/@types/trusted-types": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", - "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@types/whatwg-url": { + "packages/open-scd/node_modules/@types/whatwg-url": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-6.4.0.tgz", - "integrity": "sha512-tonhlcbQ2eho09am6RHnHOgvtDfDYINd5rgxD+2YSkKENooVCFsWizJz139MQW/PV8FfClyKrNe9ZbdHrSCxGg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/ws": { + "packages/open-scd/node_modules/@types/ws": { "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", - "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/yauzl": { + "packages/open-scd/node_modules/@types/yauzl": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" } }, - "node_modules/@typescript-eslint/eslint-plugin": { + "packages/open-scd/node_modules/@typescript-eslint/eslint-plugin": { "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, + "license": "MIT", "dependencies": { "@typescript-eslint/experimental-utils": "4.33.0", "@typescript-eslint/scope-manager": "4.33.0", @@ -4414,20 +4081,18 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "packages/open-scd/node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, - "node_modules/@typescript-eslint/experimental-utils": { + "packages/open-scd/node_modules/@typescript-eslint/experimental-utils": { "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, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.7", "@typescript-eslint/scope-manager": "4.33.0", @@ -4447,11 +4112,10 @@ "eslint": "*" } }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { + "packages/open-scd/node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^2.0.0" }, @@ -4465,11 +4129,10 @@ "eslint": ">=5" } }, - "node_modules/@typescript-eslint/parser": { + "packages/open-scd/node_modules/@typescript-eslint/parser": { "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, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "4.33.0", "@typescript-eslint/types": "4.33.0", @@ -4492,11 +4155,10 @@ } } }, - "node_modules/@typescript-eslint/scope-manager": { + "packages/open-scd/node_modules/@typescript-eslint/scope-manager": { "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, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "4.33.0", "@typescript-eslint/visitor-keys": "4.33.0" @@ -4509,11 +4171,10 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/types": { + "packages/open-scd/node_modules/@typescript-eslint/types": { "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", "dev": true, + "license": "MIT", "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" }, @@ -4522,11 +4183,10 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/typescript-estree": { + "packages/open-scd/node_modules/@typescript-eslint/typescript-estree": { "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, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "4.33.0", "@typescript-eslint/visitor-keys": "4.33.0", @@ -4549,11 +4209,10 @@ } } }, - "node_modules/@typescript-eslint/visitor-keys": { + "packages/open-scd/node_modules/@typescript-eslint/visitor-keys": { "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, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "4.33.0", "eslint-visitor-keys": "^2.0.0" @@ -4566,11 +4225,10 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@web/browser-logs": { + "packages/open-scd/node_modules/@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, + "license": "MIT", "dependencies": { "errorstacks": "^2.2.0" }, @@ -4578,11 +4236,10 @@ "node": ">=10.0.0" } }, - "node_modules/@web/config-loader": { + "packages/open-scd/node_modules/@web/config-loader": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.1.3.tgz", - "integrity": "sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.3.4" }, @@ -4590,11 +4247,10 @@ "node": ">=10.0.0" } }, - "node_modules/@web/dev-server": { + "packages/open-scd/node_modules/@web/dev-server": { "version": "0.1.28", - "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.28.tgz", - "integrity": "sha512-964NqgatvFWX7LM8QGlB1XpcJoUQRXZPiEn3XKgDIUSNS6JNCjGfQQ+TfxBlT5KBHYJakDYbTk+sdEeRi2gaLw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.11", "@types/command-line-args": "^5.0.0", @@ -4619,11 +4275,10 @@ "node": ">=10.0.0" } }, - "node_modules/@web/dev-server-core": { + "packages/open-scd/node_modules/@web/dev-server-core": { "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.3.17.tgz", - "integrity": "sha512-vN1dwQ8yDHGiAvCeUo9xFfjo+pFl8TW+pON7k9kfhbegrrB8CKhJDUxmHbZsyQUmjf/iX57/LhuWj1xGhRL8AA==", "dev": true, + "license": "MIT", "dependencies": { "@types/koa": "^2.11.6", "@types/ws": "^7.4.0", @@ -4648,11 +4303,10 @@ "node": ">=10.0.0" } }, - "node_modules/@web/dev-server-esbuild": { + "packages/open-scd/node_modules/@web/dev-server-esbuild": { "version": "0.2.16", - "resolved": "https://registry.npmjs.org/@web/dev-server-esbuild/-/dev-server-esbuild-0.2.16.tgz", - "integrity": "sha512-a82uKy9vQ4HvfWtjd7hJ3GtaqkL2ofxpEu3a1wIZyXB2dFWPvhRSmLNe/4IPPHe4vj6PVdRpLSFPEA3lXUW5Pw==", "dev": true, + "license": "MIT", "dependencies": { "@mdn/browser-compat-data": "^4.0.0", "@web/dev-server-core": "^0.3.17", @@ -4664,21 +4318,19 @@ "node": ">=10.0.0" } }, - "node_modules/@web/dev-server-esbuild/node_modules/esbuild": { + "packages/open-scd/node_modules/@web/dev-server-esbuild/node_modules/esbuild": { "version": "0.12.29", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.29.tgz", - "integrity": "sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" } }, - "node_modules/@web/dev-server-rollup": { + "packages/open-scd/node_modules/@web/dev-server-rollup": { "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.13.tgz", - "integrity": "sha512-QaxEtsdL6+fktIa1ZL8VEtq4U7WB7ikKEnxkbhUpFknB+WSvwx6DUrvyBDuPckunpczCnljXBFPugu+2W6N8Fg==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/plugin-node-resolve": "^11.0.1", "@web/dev-server-core": "^0.3.16", @@ -4691,11 +4343,10 @@ "node": ">=10.0.0" } }, - "node_modules/@web/dev-server/node_modules/camelcase": { + "packages/open-scd/node_modules/@web/dev-server/node_modules/camelcase": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", - "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4703,11 +4354,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@web/parse5-utils": { + "packages/open-scd/node_modules/@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, + "license": "MIT", "dependencies": { "@types/parse5": "^6.0.1", "parse5": "^6.0.1" @@ -4716,17 +4366,15 @@ "node": ">=10.0.0" } }, - "node_modules/@web/parse5-utils/node_modules/@types/parse5": { + "packages/open-scd/node_modules/@web/parse5-utils/node_modules/@types/parse5": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", - "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@web/test-runner": { + "packages/open-scd/node_modules/@web/test-runner": { "version": "0.13.22", - "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.13.22.tgz", - "integrity": "sha512-s4P3X4z8RlxqbQgO4K7aPVZTlum9juuQ9ZIxvZlua+KMTG5J5Utr7Drey/tGcx+BwVFUAtQLr20IEWA+38d+fA==", "dev": true, + "license": "MIT", "dependencies": { "@web/browser-logs": "^0.2.2", "@web/config-loader": "^0.1.3", @@ -4753,11 +4401,10 @@ "node": ">=12.0.0" } }, - "node_modules/@web/test-runner-chrome": { + "packages/open-scd/node_modules/@web/test-runner-chrome": { "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.10.7.tgz", - "integrity": "sha512-DKJVHhHh3e/b6/erfKOy0a4kGfZ47qMoQRgROxi9T4F9lavEY3E5/MQ7hapHFM2lBF4vDrm+EWjtBdOL8o42tw==", "dev": true, + "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.10.20", "@web/test-runner-coverage-v8": "^0.4.8", @@ -4768,11 +4415,10 @@ "node": ">=12.0.0" } }, - "node_modules/@web/test-runner-commands": { + "packages/open-scd/node_modules/@web/test-runner-commands": { "version": "0.5.13", - "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.5.13.tgz", - "integrity": "sha512-FXnpUU89ALbRlh9mgBd7CbSn5uzNtr8gvnQZPOvGLDAJ7twGvZdUJEAisPygYx2BLPSFl3/Mre8pH8zshJb8UQ==", "dev": true, + "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.10.20", "mkdirp": "^1.0.4" @@ -4781,11 +4427,10 @@ "node": ">=12.0.0" } }, - "node_modules/@web/test-runner-core": { + "packages/open-scd/node_modules/@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, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.11", "@types/babel__code-frame": "^7.0.2", @@ -4818,11 +4463,10 @@ "node": ">=12.0.0" } }, - "node_modules/@web/test-runner-coverage-v8": { + "packages/open-scd/node_modules/@web/test-runner-coverage-v8": { "version": "0.4.8", - "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.4.8.tgz", - "integrity": "sha512-Ib0AscR8Xf9E/V7rf3XOVQTe4vKIbwSTupxV1xGgzj3x4RKUuMUg9FLz9EigZ5iN0mOzZKDllyRS523hbdhDtA==", "dev": true, + "license": "MIT", "dependencies": { "@web/test-runner-core": "^0.10.20", "istanbul-lib-coverage": "^3.0.0", @@ -4833,11 +4477,10 @@ "node": ">=12.0.0" } }, - "node_modules/@web/test-runner-mocha": { + "packages/open-scd/node_modules/@web/test-runner-mocha": { "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.7.5.tgz", - "integrity": "sha512-12/OBq6efPCAvJpcz3XJs2OO5nHe7GtBibZ8Il1a0QtsGpRmuJ4/m1EF0Fj9f6KHg7JdpGo18A37oE+5hXjHwg==", "dev": true, + "license": "MIT", "dependencies": { "@types/mocha": "^8.2.0", "@web/test-runner-core": "^0.10.20" @@ -4846,17 +4489,15 @@ "node": ">=12.0.0" } }, - "node_modules/@web/test-runner-mocha/node_modules/@types/mocha": { + "packages/open-scd/node_modules/@web/test-runner-mocha/node_modules/@types/mocha": { "version": "8.2.3", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", - "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@web/test-runner/node_modules/camelcase": { + "packages/open-scd/node_modules/@web/test-runner/node_modules/camelcase": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", - "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4864,44 +4505,38 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@web/test-runner/node_modules/diff": { + "packages/open-scd/node_modules/@web/test-runner/node_modules/diff": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, - "node_modules/@webcomponents/shadycss": { + "packages/open-scd/node_modules/@webcomponents/shadycss": { "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.11.0.tgz", - "integrity": "sha512-L5O/+UPum8erOleNjKq6k58GVl3fNsEQdSOyh0EUhNmi7tHUyRuCJy1uqJiWydWcLARE5IPsMoPYMZmUGrz1JA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, - "node_modules/@webcomponents/webcomponentsjs": { + "packages/open-scd/node_modules/@webcomponents/webcomponentsjs": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.6.0.tgz", - "integrity": "sha512-Moog+Smx3ORTbWwuPqoclr+uvfLnciVd6wdCaVscHPrxbmQ/IJKm3wbB7hpzJtXWjAq2l/6QMlO85aZiOdtv5Q==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, - "node_modules/abbrev": { + "packages/open-scd/node_modules/abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/abortcontroller-polyfill": { + "packages/open-scd/node_modules/abortcontroller-polyfill": { "version": "1.7.3", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", - "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/accepts": { + "packages/open-scd/node_modules/accepts": { "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, + "license": "MIT", "dependencies": { "mime-types": "~2.1.24", "negotiator": "0.6.2" @@ -4910,16 +4545,14 @@ "node": ">= 0.6" } }, - "node_modules/ace-custom-element": { + "packages/open-scd/node_modules/ace-custom-element": { "version": "1.6.5", - "resolved": "https://registry.npmjs.org/ace-custom-element/-/ace-custom-element-1.6.5.tgz", - "integrity": "sha512-xU/9r94WKwjwEOjdfs6oVk2Dqc6X63eF2ECvKIMm/JCK1PDbXXdBYi5sQx110tR2sY4f96iXxyvscfT9qeI1RQ==" + "license": "Apache-2.0" }, - "node_modules/acorn": { + "packages/open-scd/node_modules/acorn": { "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -4927,44 +4560,39 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-jsx": { + "packages/open-scd/node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-walk": { + "packages/open-scd/node_modules/acorn-walk": { "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, - "node_modules/add-stream": { + "packages/open-scd/node_modules/add-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/address": { + "packages/open-scd/node_modules/address": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.12.0" } }, - "node_modules/agent-base": { + "packages/open-scd/node_modules/agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "4" }, @@ -4972,11 +4600,10 @@ "node": ">= 6.0.0" } }, - "node_modules/agentkeepalive": { + "packages/open-scd/node_modules/agentkeepalive": { "version": "4.1.4", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", - "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.0", "depd": "^1.1.2", @@ -4986,20 +4613,18 @@ "node": ">= 8.0.0" } }, - "node_modules/agentkeepalive/node_modules/depd": { + "packages/open-scd/node_modules/agentkeepalive/node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/aggregate-error": { + "packages/open-scd/node_modules/aggregate-error": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, + "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -5008,11 +4633,10 @@ "node": ">=8" } }, - "node_modules/ajv": { + "packages/open-scd/node_modules/ajv": { "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -5024,37 +4648,33 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/amator": { + "packages/open-scd/node_modules/amator": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/amator/-/amator-1.1.0.tgz", - "integrity": "sha1-CMa2C8k67Cthu/wMTWd9MDI8wPE=", + "license": "MIT", "dependencies": { "bezier-easing": "^2.0.3" } }, - "node_modules/ansi-align": { + "packages/open-scd/node_modules/ansi-align": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.1.0" } }, - "node_modules/ansi-colors": { + "packages/open-scd/node_modules/ansi-colors": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/ansi-escapes": { + "packages/open-scd/node_modules/ansi-escapes": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -5065,11 +4685,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { + "packages/open-scd/node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -5077,20 +4696,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-regex": { + "packages/open-scd/node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/ansi-styles": { + "packages/open-scd/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -5101,17 +4718,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/any-promise": { + "packages/open-scd/node_modules/any-promise": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/anymatch": { + "packages/open-scd/node_modules/anymatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -5120,33 +4735,29 @@ "node": ">= 8" } }, - "node_modules/aproba": { + "packages/open-scd/node_modules/aproba": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/are-we-there-yet": { + "packages/open-scd/node_modules/are-we-there-yet": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "dev": true, + "license": "ISC", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" } }, - "node_modules/are-we-there-yet/node_modules/isarray": { + "packages/open-scd/node_modules/are-we-there-yet/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { + "packages/open-scd/node_modules/are-we-there-yet/node_modules/readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -5157,41 +4768,36 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/are-we-there-yet/node_modules/safe-buffer": { + "packages/open-scd/node_modules/are-we-there-yet/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/are-we-there-yet/node_modules/string_decoder": { + "packages/open-scd/node_modules/are-we-there-yet/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, - "node_modules/arg": { + "packages/open-scd/node_modules/arg": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/argparse": { + "packages/open-scd/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, - "node_modules/aria-query": { + "packages/open-scd/node_modules/aria-query": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@babel/runtime": "^7.10.2", "@babel/runtime-corejs3": "^7.10.2" @@ -5200,26 +4806,23 @@ "node": ">=6.0" } }, - "node_modules/array-back": { + "packages/open-scd/node_modules/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, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/array-ify": { + "packages/open-scd/node_modules/array-ify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/array-includes": { + "packages/open-scd/node_modules/array-includes": { "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -5234,20 +4837,18 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-union": { + "packages/open-scd/node_modules/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, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/array.prototype.flat": { + "packages/open-scd/node_modules/array.prototype.flat": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -5260,96 +4861,85 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/arrify": { + "packages/open-scd/node_modules/arrify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/asap": { + "packages/open-scd/node_modules/asap": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/asn1": { + "packages/open-scd/node_modules/asn1": { "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": "~2.1.0" } }, - "node_modules/assert": { + "packages/open-scd/node_modules/assert": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, + "license": "MIT", "dependencies": { "object-assign": "^4.1.1", "util": "0.10.3" } }, - "node_modules/assert-plus": { + "packages/open-scd/node_modules/assert-plus": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } }, - "node_modules/assertion-error": { + "packages/open-scd/node_modules/assertion-error": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, - "node_modules/astral-regex": { + "packages/open-scd/node_modules/astral-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/async": { + "packages/open-scd/node_modules/async": { "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.14" } }, - "node_modules/asynckit": { + "packages/open-scd/node_modules/asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/at-least-node": { + "packages/open-scd/node_modules/at-least-node": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true, + "license": "ISC", "engines": { "node": ">= 4.0.0" } }, - "node_modules/available-typed-arrays": { + "packages/open-scd/node_modules/available-typed-arrays": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5357,50 +4947,44 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/aws-sign2": { + "packages/open-scd/node_modules/aws-sign2": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true, + "license": "Apache-2.0", "engines": { "node": "*" } }, - "node_modules/aws4": { + "packages/open-scd/node_modules/aws4": { "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/axe-core": { + "packages/open-scd/node_modules/axe-core": { "version": "4.3.5", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", - "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", "dev": true, + "license": "MPL-2.0", "engines": { "node": ">=4" } }, - "node_modules/axobject-query": { + "packages/open-scd/node_modules/axobject-query": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, - "node_modules/babel-plugin-dynamic-import-node": { + "packages/open-scd/node_modules/babel-plugin-dynamic-import-node": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, + "license": "MIT", "dependencies": { "object.assign": "^4.1.0" } }, - "node_modules/babel-plugin-polyfill-corejs2": { + "packages/open-scd/node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz", - "integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.13.11", "@babel/helper-define-polyfill-provider": "^0.3.0", @@ -5410,20 +4994,18 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "packages/open-scd/node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/babel-plugin-polyfill-corejs3": { + "packages/open-scd/node_modules/babel-plugin-polyfill-corejs3": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", - "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.0", "core-js-compat": "^3.18.0" @@ -5432,11 +5014,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/babel-plugin-polyfill-regenerator": { + "packages/open-scd/node_modules/babel-plugin-polyfill-regenerator": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz", - "integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.0" }, @@ -5444,16 +5025,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/balanced-match": { + "packages/open-scd/node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/base64-js": { + "packages/open-scd/node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, "funding": [ { @@ -5468,45 +5046,41 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, - "node_modules/bcrypt-pbkdf": { + "packages/open-scd/node_modules/bcrypt-pbkdf": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tweetnacl": "^0.14.3" } }, - "node_modules/bezier-easing": { + "packages/open-scd/node_modules/bezier-easing": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bezier-easing/-/bezier-easing-2.1.0.tgz", - "integrity": "sha1-wE3+i5JtbsrKGBPWn/F5t8ICXYY=" + "license": "MIT" }, - "node_modules/big-integer": { + "packages/open-scd/node_modules/big-integer": { "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", "dev": true, + "license": "Unlicense", "engines": { "node": ">=0.6" } }, - "node_modules/big.js": { + "packages/open-scd/node_modules/big.js": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, - "node_modules/bin-links": { + "packages/open-scd/node_modules/bin-links": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-2.3.0.tgz", - "integrity": "sha512-JzrOLHLwX2zMqKdyYZjkDgQGT+kHDkIhv2/IK2lJ00qLxV4TmFoHi8drDBb6H5Zrz1YfgHkai4e2MGPqnoUhqA==", "dev": true, + "license": "ISC", "dependencies": { "cmd-shim": "^4.0.1", "mkdirp-infer-owner": "^2.0.0", @@ -5519,42 +5093,37 @@ "node": ">=10" } }, - "node_modules/binary-extensions": { + "packages/open-scd/node_modules/binary-extensions": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/bl": { + "packages/open-scd/node_modules/bl": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, - "node_modules/blocking-elements": { + "packages/open-scd/node_modules/blocking-elements": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/blocking-elements/-/blocking-elements-0.1.1.tgz", - "integrity": "sha512-/SLWbEzMoVIMZACCyhD/4Ya2M1PWP1qMKuiymowPcI+PdWDARqeARBjhj73kbUBCxEmTZCUu5TAqxtwUO9C1Ig==" + "license": "Apache-2.0" }, - "node_modules/boolbase": { + "packages/open-scd/node_modules/boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/boxen": { + "packages/open-scd/node_modules/boxen": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-align": "^3.0.0", "camelcase": "^5.3.1", @@ -5572,11 +5141,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/chalk": { + "packages/open-scd/node_modules/boxen/node_modules/chalk": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5585,39 +5153,35 @@ "node": ">=8" } }, - "node_modules/boxen/node_modules/type-fest": { + "packages/open-scd/node_modules/boxen/node_modules/type-fest": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, - "node_modules/bplist-parser": { + "packages/open-scd/node_modules/bplist-parser": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", - "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=", "dev": true, + "license": "MIT", "dependencies": { "big-integer": "^1.6.7" } }, - "node_modules/brace-expansion": { + "packages/open-scd/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "node_modules/braces": { + "packages/open-scd/node_modules/braces": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -5625,17 +5189,15 @@ "node": ">=8" } }, - "node_modules/browser-stdout": { + "packages/open-scd/node_modules/browser-stdout": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/browserslist": { + "packages/open-scd/node_modules/browserslist": { "version": "4.18.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", - "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", "dev": true, + "license": "MIT", "dependencies": { "caniuse-lite": "^1.0.30001280", "electron-to-chromium": "^1.3.896", @@ -5654,11 +5216,10 @@ "url": "https://opencollective.com/browserslist" } }, - "node_modules/browserslist-useragent": { + "packages/open-scd/node_modules/browserslist-useragent": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/browserslist-useragent/-/browserslist-useragent-3.0.3.tgz", - "integrity": "sha512-8KKO6kOXu/93IkMi8zVqzU72BgpoxcITIHtkM1qmlnxJtIMF9Y+2uWL9JS2uUbzj/PaS3kaA6LcICBThMojGjA==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.12.0", "semver": "^7.3.2", @@ -5668,10 +5229,8 @@ "node": ">= 6.x.x" } }, - "node_modules/buffer": { + "packages/open-scd/node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -5687,32 +5246,30 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, - "node_modules/buffer-crc32": { + "packages/open-scd/node_modules/buffer-crc32": { "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, - "node_modules/buffer-from": { + "packages/open-scd/node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/bufferutil": { + "packages/open-scd/node_modules/bufferutil": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", - "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -5720,11 +5277,10 @@ "node": ">=6.14.2" } }, - "node_modules/builtin-modules": { + "packages/open-scd/node_modules/builtin-modules": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -5732,26 +5288,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/builtins": { + "packages/open-scd/node_modules/builtins": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/bytes": { + "packages/open-scd/node_modules/bytes": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/cacache": { + "packages/open-scd/node_modules/cacache": { "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", @@ -5776,20 +5329,18 @@ "node": ">= 10" } }, - "node_modules/cacache/node_modules/chownr": { + "packages/open-scd/node_modules/cacache/node_modules/chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, - "node_modules/cache-content-type": { + "packages/open-scd/node_modules/cache-content-type": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", - "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", "dev": true, + "license": "MIT", "dependencies": { "mime-types": "^2.1.18", "ylru": "^1.2.0" @@ -5798,20 +5349,18 @@ "node": ">= 6.0.0" } }, - "node_modules/cacheable-lookup": { + "packages/open-scd/node_modules/cacheable-lookup": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.6.0" } }, - "node_modules/cacheable-request": { + "packages/open-scd/node_modules/cacheable-request": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", "dev": true, + "license": "MIT", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -5825,11 +5374,10 @@ "node": ">=8" } }, - "node_modules/cacheable-request/node_modules/get-stream": { + "packages/open-scd/node_modules/cacheable-request/node_modules/get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -5840,20 +5388,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cachedir": { + "packages/open-scd/node_modules/cachedir": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/call-bind": { + "packages/open-scd/node_modules/call-bind": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -5862,39 +5408,35 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/callsites": { + "packages/open-scd/node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/camel-case": { + "packages/open-scd/node_modules/camel-case": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, + "license": "MIT", "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" } }, - "node_modules/camelcase": { + "packages/open-scd/node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/camelcase-keys": { + "packages/open-scd/node_modules/camelcase-keys": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", @@ -5907,11 +5449,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/caniuse-api": { + "packages/open-scd/node_modules/caniuse-api": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", @@ -5919,27 +5460,24 @@ "lodash.uniq": "^4.5.0" } }, - "node_modules/caniuse-lite": { + "packages/open-scd/node_modules/caniuse-lite": { "version": "1.0.30001284", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001284.tgz", - "integrity": "sha512-t28SKa7g6kiIQi6NHeOcKrOrGMzCRrXvlasPwWC26TH2QNdglgzQIRUuJ0cR3NeQPH+5jpuveeeSFDLm2zbkEw==", "dev": true, + "license": "CC-BY-4.0", "funding": { "type": "opencollective", "url": "https://opencollective.com/browserslist" } }, - "node_modules/caseless": { + "packages/open-scd/node_modules/caseless": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true + "dev": true, + "license": "Apache-2.0" }, - "node_modules/chai": { + "packages/open-scd/node_modules/chai": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", "dev": true, + "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", @@ -5952,20 +5490,18 @@ "node": ">=4" } }, - "node_modules/chai-a11y-axe": { + "packages/open-scd/node_modules/chai-a11y-axe": { "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, + "license": "MIT", "dependencies": { "axe-core": "^4.3.3" } }, - "node_modules/chai-dom": { + "packages/open-scd/node_modules/chai-dom": { "version": "1.11.0", - "resolved": "https://registry.npmjs.org/chai-dom/-/chai-dom-1.11.0.tgz", - "integrity": "sha512-ZzGlEfk1UhHH5+N0t9bDqstOxPEXmn3EyXvtsok5rfXVDOFDJbHVy12rED6ZwkJAUDs2w7/Da4Hlq2LB63kltg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.12.0" }, @@ -5974,11 +5510,10 @@ "mocha": ">= 2" } }, - "node_modules/chalk": { + "packages/open-scd/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5990,26 +5525,23 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chardet": { + "packages/open-scd/node_modules/chardet": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/check-error": { + "packages/open-scd/node_modules/check-error": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, - "node_modules/cheerio": { + "packages/open-scd/node_modules/cheerio": { "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", "dev": true, + "license": "MIT", "dependencies": { "cheerio-select": "^1.5.0", "dom-serializer": "^1.3.2", @@ -6026,11 +5558,10 @@ "url": "https://github.com/cheeriojs/cheerio?sponsor=1" } }, - "node_modules/cheerio-select": { + "packages/open-scd/node_modules/cheerio-select": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", - "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "css-select": "^4.1.3", "css-what": "^5.0.1", @@ -6042,19 +5573,16 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/cheerio/node_modules/entities": { + "packages/open-scd/node_modules/cheerio/node_modules/entities": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, + "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/cheerio/node_modules/htmlparser2": { + "packages/open-scd/node_modules/cheerio/node_modules/htmlparser2": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -6063,6 +5591,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", @@ -6070,11 +5599,10 @@ "entities": "^2.0.0" } }, - "node_modules/chokidar": { + "packages/open-scd/node_modules/chokidar": { "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -6091,17 +5619,15 @@ "fsevents": "~2.3.2" } }, - "node_modules/chownr": { + "packages/open-scd/node_modules/chownr": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/chrome-launcher": { + "packages/open-scd/node_modules/chrome-launcher": { "version": "0.15.0", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.0.tgz", - "integrity": "sha512-ZQqX5kb9H0+jy1OqLnWampfocrtSZaGl7Ny3F9GRha85o4odbL8x55paUzh51UC7cEmZ5obp3H2Mm70uC2PpRA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@types/node": "*", "escape-string-regexp": "^4.0.0", @@ -6115,11 +5641,10 @@ "node": ">=12.13.0" } }, - "node_modules/chrome-launcher/node_modules/escape-string-regexp": { + "packages/open-scd/node_modules/chrome-launcher/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -6127,23 +5652,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ci-info": { + "packages/open-scd/node_modules/ci-info": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/cjs-module-lexer": { + "packages/open-scd/node_modules/cjs-module-lexer": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/clean-css": { + "packages/open-scd/node_modules/clean-css": { "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, + "license": "MIT", "dependencies": { "source-map": "~0.6.0" }, @@ -6151,29 +5673,26 @@ "node": ">= 4.0" } }, - "node_modules/clean-css/node_modules/source-map": { + "packages/open-scd/node_modules/clean-css/node_modules/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, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/clean-stack": { + "packages/open-scd/node_modules/clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/cli-boxes": { + "packages/open-scd/node_modules/cli-boxes": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -6181,11 +5700,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-cursor": { + "packages/open-scd/node_modules/cli-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -6193,11 +5711,10 @@ "node": ">=8" } }, - "node_modules/cli-spinners": { + "packages/open-scd/node_modules/cli-spinners": { "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, + "license": "MIT", "engines": { "node": ">=6" }, @@ -6205,11 +5722,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-truncate": { + "packages/open-scd/node_modules/cli-truncate": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, + "license": "MIT", "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" @@ -6221,11 +5737,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-truncate/node_modules/slice-ansi": { + "packages/open-scd/node_modules/cli-truncate/node_modules/slice-ansi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -6235,49 +5750,44 @@ "node": ">=8" } }, - "node_modules/cli-width": { + "packages/open-scd/node_modules/cli-width": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, + "license": "ISC", "engines": { "node": ">= 10" } }, - "node_modules/cliui": { + "packages/open-scd/node_modules/cliui": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, - "node_modules/clone": { + "packages/open-scd/node_modules/clone": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } }, - "node_modules/clone-response": { + "packages/open-scd/node_modules/clone-response": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" } }, - "node_modules/cmd-shim": { + "packages/open-scd/node_modules/cmd-shim": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", - "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", "dev": true, + "license": "ISC", "dependencies": { "mkdirp-infer-owner": "^2.0.0" }, @@ -6285,21 +5795,19 @@ "node": ">=10" } }, - "node_modules/co": { + "packages/open-scd/node_modules/co": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" } }, - "node_modules/co-body": { + "packages/open-scd/node_modules/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, + "license": "MIT", "dependencies": { "inflation": "^2.0.0", "qs": "^6.5.2", @@ -6307,20 +5815,18 @@ "type-is": "^1.6.16" } }, - "node_modules/code-point-at": { + "packages/open-scd/node_modules/code-point-at": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/color-convert": { + "packages/open-scd/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -6328,23 +5834,20 @@ "node": ">=7.0.0" } }, - "node_modules/color-name": { + "packages/open-scd/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/colorette": { + "packages/open-scd/node_modules/colorette": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/combined-stream": { + "packages/open-scd/node_modules/combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -6352,11 +5855,10 @@ "node": ">= 0.8" } }, - "node_modules/command-line-args": { + "packages/open-scd/node_modules/command-line-args": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.0.tgz", - "integrity": "sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A==", "dev": true, + "license": "MIT", "dependencies": { "array-back": "^3.1.0", "find-replace": "^3.0.0", @@ -6367,11 +5869,10 @@ "node": ">=4.0.0" } }, - "node_modules/command-line-usage": { + "packages/open-scd/node_modules/command-line-usage": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", - "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", "dev": true, + "license": "MIT", "dependencies": { "array-back": "^4.0.1", "chalk": "^2.4.2", @@ -6382,11 +5883,10 @@ "node": ">=8.0.0" } }, - "node_modules/command-line-usage/node_modules/ansi-styles": { + "packages/open-scd/node_modules/command-line-usage/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -6394,20 +5894,18 @@ "node": ">=4" } }, - "node_modules/command-line-usage/node_modules/array-back": { + "packages/open-scd/node_modules/command-line-usage/node_modules/array-back": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/command-line-usage/node_modules/chalk": { + "packages/open-scd/node_modules/command-line-usage/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -6417,35 +5915,31 @@ "node": ">=4" } }, - "node_modules/command-line-usage/node_modules/color-convert": { + "packages/open-scd/node_modules/command-line-usage/node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, - "node_modules/command-line-usage/node_modules/color-name": { + "packages/open-scd/node_modules/command-line-usage/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/command-line-usage/node_modules/has-flag": { + "packages/open-scd/node_modules/command-line-usage/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/command-line-usage/node_modules/supports-color": { + "packages/open-scd/node_modules/command-line-usage/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -6453,60 +5947,53 @@ "node": ">=4" } }, - "node_modules/command-line-usage/node_modules/typical": { + "packages/open-scd/node_modules/command-line-usage/node_modules/typical": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/commander": { + "packages/open-scd/node_modules/commander": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } }, - "node_modules/common-ancestor-path": { + "packages/open-scd/node_modules/common-ancestor-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/common-tags": { + "packages/open-scd/node_modules/common-tags": { "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } }, - "node_modules/commondir": { + "packages/open-scd/node_modules/commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/compare-func": { + "packages/open-scd/node_modules/compare-func": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, + "license": "MIT", "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" } }, - "node_modules/compressible": { + "packages/open-scd/node_modules/compressible": { "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -6514,20 +6001,18 @@ "node": ">= 0.6" } }, - "node_modules/concat-map": { + "packages/open-scd/node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/concat-stream": { + "packages/open-scd/node_modules/concat-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", "dev": true, "engines": [ "node >= 6.0" ], + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -6535,11 +6020,10 @@ "typedarray": "^0.0.6" } }, - "node_modules/concurrently": { + "packages/open-scd/node_modules/concurrently": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.4.0.tgz", - "integrity": "sha512-HZ3D0RTQMH3oS4gvtYj1P+NBc6PzE2McEra6yEFcQKrUQ9HvtTGU4Dbne083F034p+LRb7kWU0tPRNvSGs1UCQ==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "date-fns": "^2.16.1", @@ -6557,11 +6041,10 @@ "node": ">=10.0.0" } }, - "node_modules/concurrently/node_modules/supports-color": { + "packages/open-scd/node_modules/concurrently/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -6572,11 +6055,10 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/concurrently/node_modules/yargs": { + "packages/open-scd/node_modules/concurrently/node_modules/yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -6590,11 +6072,10 @@ "node": ">=10" } }, - "node_modules/configstore": { + "packages/open-scd/node_modules/configstore": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "dot-prop": "^5.2.0", "graceful-fs": "^4.1.2", @@ -6607,23 +6088,20 @@ "node": ">=8" } }, - "node_modules/confusing-browser-globals": { + "packages/open-scd/node_modules/confusing-browser-globals": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", - "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/console-control-strings": { + "packages/open-scd/node_modules/console-control-strings": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/content-disposition": { + "packages/open-scd/node_modules/content-disposition": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "5.1.2" }, @@ -6631,26 +6109,23 @@ "node": ">= 0.6" } }, - "node_modules/content-disposition/node_modules/safe-buffer": { + "packages/open-scd/node_modules/content-disposition/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/content-type": { + "packages/open-scd/node_modules/content-type": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/conventional-changelog": { + "packages/open-scd/node_modules/conventional-changelog": { "version": "3.1.24", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.24.tgz", - "integrity": "sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg==", "dev": true, + "license": "MIT", "dependencies": { "conventional-changelog-angular": "^5.0.12", "conventional-changelog-atom": "^2.0.8", @@ -6668,11 +6143,10 @@ "node": ">=10" } }, - "node_modules/conventional-changelog-angular": { + "packages/open-scd/node_modules/conventional-changelog-angular": { "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, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0", "q": "^1.5.1" @@ -6681,11 +6155,10 @@ "node": ">=10" } }, - "node_modules/conventional-changelog-atom": { + "packages/open-scd/node_modules/conventional-changelog-atom": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", - "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -6693,11 +6166,10 @@ "node": ">=10" } }, - "node_modules/conventional-changelog-codemirror": { + "packages/open-scd/node_modules/conventional-changelog-codemirror": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", - "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -6705,17 +6177,15 @@ "node": ">=10" } }, - "node_modules/conventional-changelog-config-spec": { + "packages/open-scd/node_modules/conventional-changelog-config-spec": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz", - "integrity": "sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/conventional-changelog-conventionalcommits": { + "packages/open-scd/node_modules/conventional-changelog-conventionalcommits": { "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, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0", "lodash": "^4.17.15", @@ -6725,11 +6195,10 @@ "node": ">=10" } }, - "node_modules/conventional-changelog-core": { + "packages/open-scd/node_modules/conventional-changelog-core": { "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, + "license": "MIT", "dependencies": { "add-stream": "^1.0.0", "conventional-changelog-writer": "^5.0.0", @@ -6750,11 +6219,10 @@ "node": ">=10" } }, - "node_modules/conventional-changelog-core/node_modules/find-up": { + "packages/open-scd/node_modules/conventional-changelog-core/node_modules/find-up": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^2.0.0" }, @@ -6762,17 +6230,15 @@ "node": ">=4" } }, - "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { + "packages/open-scd/node_modules/conventional-changelog-core/node_modules/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 + "dev": true, + "license": "ISC" }, - "node_modules/conventional-changelog-core/node_modules/locate-path": { + "packages/open-scd/node_modules/conventional-changelog-core/node_modules/locate-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -6781,11 +6247,10 @@ "node": ">=4" } }, - "node_modules/conventional-changelog-core/node_modules/p-limit": { + "packages/open-scd/node_modules/conventional-changelog-core/node_modules/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, + "license": "MIT", "dependencies": { "p-try": "^1.0.0" }, @@ -6793,11 +6258,10 @@ "node": ">=4" } }, - "node_modules/conventional-changelog-core/node_modules/p-locate": { + "packages/open-scd/node_modules/conventional-changelog-core/node_modules/p-locate": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^1.1.0" }, @@ -6805,29 +6269,26 @@ "node": ">=4" } }, - "node_modules/conventional-changelog-core/node_modules/p-try": { + "packages/open-scd/node_modules/conventional-changelog-core/node_modules/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, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/conventional-changelog-core/node_modules/path-exists": { + "packages/open-scd/node_modules/conventional-changelog-core/node_modules/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, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/conventional-changelog-core/node_modules/path-type": { + "packages/open-scd/node_modules/conventional-changelog-core/node_modules/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, + "license": "MIT", "dependencies": { "pify": "^3.0.0" }, @@ -6835,20 +6296,18 @@ "node": ">=4" } }, - "node_modules/conventional-changelog-core/node_modules/pify": { + "packages/open-scd/node_modules/conventional-changelog-core/node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/conventional-changelog-core/node_modules/read-pkg": { + "packages/open-scd/node_modules/conventional-changelog-core/node_modules/read-pkg": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, + "license": "MIT", "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", @@ -6858,11 +6317,10 @@ "node": ">=4" } }, - "node_modules/conventional-changelog-core/node_modules/read-pkg-up": { + "packages/open-scd/node_modules/conventional-changelog-core/node_modules/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=", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^2.0.0", "read-pkg": "^3.0.0" @@ -6871,11 +6329,10 @@ "node": ">=4" } }, - "node_modules/conventional-changelog-core/node_modules/read-pkg/node_modules/normalize-package-data": { + "packages/open-scd/node_modules/conventional-changelog-core/node_modules/read-pkg/node_modules/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, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -6883,20 +6340,18 @@ "validate-npm-package-license": "^3.0.1" } }, - "node_modules/conventional-changelog-core/node_modules/semver": { + "packages/open-scd/node_modules/conventional-changelog-core/node_modules/semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, - "node_modules/conventional-changelog-ember": { + "packages/open-scd/node_modules/conventional-changelog-ember": { "version": "2.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", - "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -6904,11 +6359,10 @@ "node": ">=10" } }, - "node_modules/conventional-changelog-eslint": { + "packages/open-scd/node_modules/conventional-changelog-eslint": { "version": "3.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", - "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -6916,11 +6370,10 @@ "node": ">=10" } }, - "node_modules/conventional-changelog-express": { + "packages/open-scd/node_modules/conventional-changelog-express": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", - "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -6928,11 +6381,10 @@ "node": ">=10" } }, - "node_modules/conventional-changelog-jquery": { + "packages/open-scd/node_modules/conventional-changelog-jquery": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", - "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -6940,11 +6392,10 @@ "node": ">=10" } }, - "node_modules/conventional-changelog-jshint": { + "packages/open-scd/node_modules/conventional-changelog-jshint": { "version": "2.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", - "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0", "q": "^1.5.1" @@ -6953,20 +6404,18 @@ "node": ">=10" } }, - "node_modules/conventional-changelog-preset-loader": { + "packages/open-scd/node_modules/conventional-changelog-preset-loader": { "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, - "node_modules/conventional-changelog-writer": { + "packages/open-scd/node_modules/conventional-changelog-writer": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz", - "integrity": "sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g==", "dev": true, + "license": "MIT", "dependencies": { "conventional-commits-filter": "^2.0.7", "dateformat": "^3.0.0", @@ -6985,20 +6434,18 @@ "node": ">=10" } }, - "node_modules/conventional-changelog-writer/node_modules/semver": { + "packages/open-scd/node_modules/conventional-changelog-writer/node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/conventional-commits-filter": { + "packages/open-scd/node_modules/conventional-commits-filter": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", "dev": true, + "license": "MIT", "dependencies": { "lodash.ismatch": "^4.4.0", "modify-values": "^1.0.0" @@ -7007,11 +6454,10 @@ "node": ">=10" } }, - "node_modules/conventional-commits-parser": { + "packages/open-scd/node_modules/conventional-commits-parser": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz", - "integrity": "sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw==", "dev": true, + "license": "MIT", "dependencies": { "is-text-path": "^1.0.1", "JSONStream": "^1.0.4", @@ -7027,11 +6473,10 @@ "node": ">=10" } }, - "node_modules/conventional-recommended-bump": { + "packages/open-scd/node_modules/conventional-recommended-bump": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", - "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", "dev": true, + "license": "MIT", "dependencies": { "concat-stream": "^2.0.0", "conventional-changelog-preset-loader": "^2.3.4", @@ -7049,26 +6494,23 @@ "node": ">=10" } }, - "node_modules/convert-source-map": { + "packages/open-scd/node_modules/convert-source-map": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.1" } }, - "node_modules/convert-source-map/node_modules/safe-buffer": { + "packages/open-scd/node_modules/convert-source-map/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/cookies": { + "packages/open-scd/node_modules/cookies": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", - "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~2.0.0", "keygrip": "~1.1.0" @@ -7077,22 +6519,20 @@ "node": ">= 0.8" } }, - "node_modules/core-js-bundle": { + "packages/open-scd/node_modules/core-js-bundle": { "version": "3.19.2", - "resolved": "https://registry.npmjs.org/core-js-bundle/-/core-js-bundle-3.19.2.tgz", - "integrity": "sha512-LoFua00O2j1ffgGDViAUQMKuwDXBB/XFOmEGY/9QcyQfIrjlom8XZzj0YymB2aUmPZtHmk1fAjPrz9OEXifW4g==", "dev": true, "hasInstallScript": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, - "node_modules/core-js-compat": { + "packages/open-scd/node_modules/core-js-compat": { "version": "3.19.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.2.tgz", - "integrity": "sha512-ObBY1W5vx/LFFMaL1P5Udo4Npib6fu+cMokeziWkA8Tns4FcDemKF5j9JvaI5JhdkW8EQJQGJN1EcrzmEwuAqQ==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.18.1", "semver": "7.0.0" @@ -7102,38 +6542,33 @@ "url": "https://opencollective.com/core-js" } }, - "node_modules/core-js-compat/node_modules/semver": { + "packages/open-scd/node_modules/core-js-compat/node_modules/semver": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/core-js-pure": { + "packages/open-scd/node_modules/core-js-pure": { "version": "3.19.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.2.tgz", - "integrity": "sha512-5LkcgQEy8pFeVnd/zomkUBSwnmIxuF1C8E9KrMAbOc8f34IBT9RGvTYeNDdp1PnvMJrrVhvk1hg/yVV5h/znlg==", - "deprecated": "core-js-pure@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", "dev": true, "hasInstallScript": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, - "node_modules/core-util-is": { + "packages/open-scd/node_modules/core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/cosmiconfig": { + "packages/open-scd/node_modules/cosmiconfig": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -7145,26 +6580,23 @@ "node": ">=10" } }, - "node_modules/create-require": { + "packages/open-scd/node_modules/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 + "dev": true, + "license": "MIT" }, - "node_modules/cross-fetch": { + "packages/open-scd/node_modules/cross-fetch": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", "dev": true, + "license": "MIT", "dependencies": { "node-fetch": "2.6.7" } }, - "node_modules/cross-spawn": { + "packages/open-scd/node_modules/cross-spawn": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -7174,20 +6606,18 @@ "node": ">= 8" } }, - "node_modules/crypto-random-string": { + "packages/open-scd/node_modules/crypto-random-string": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/css-select": { + "packages/open-scd/node_modules/css-select": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^5.0.0", @@ -7199,11 +6629,10 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css-what": { + "packages/open-scd/node_modules/css-what": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -7211,11 +6640,10 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/cssesc": { + "packages/open-scd/node_modules/cssesc": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, + "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -7223,20 +6651,18 @@ "node": ">=4" } }, - "node_modules/dargs": { + "packages/open-scd/node_modules/dargs": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/dashdash": { + "packages/open-scd/node_modules/dashdash": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" }, @@ -7244,11 +6670,10 @@ "node": ">=0.10" } }, - "node_modules/date-fns": { + "packages/open-scd/node_modules/date-fns": { "version": "2.27.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.27.0.tgz", - "integrity": "sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.11" }, @@ -7257,26 +6682,23 @@ "url": "https://opencollective.com/date-fns" } }, - "node_modules/dateformat": { + "packages/open-scd/node_modules/dateformat": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, - "node_modules/debounce": { + "packages/open-scd/node_modules/debounce": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/debug": { + "packages/open-scd/node_modules/debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -7289,29 +6711,26 @@ } } }, - "node_modules/debuglog": { + "packages/open-scd/node_modules/debuglog": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, - "node_modules/decamelize": { + "packages/open-scd/node_modules/decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/decamelize-keys": { + "packages/open-scd/node_modules/decamelize-keys": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, + "license": "MIT", "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" @@ -7320,20 +6739,18 @@ "node": ">=0.10.0" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { + "packages/open-scd/node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/decompress-response": { + "packages/open-scd/node_modules/decompress-response": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -7344,11 +6761,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decompress-response/node_modules/mimic-response": { + "packages/open-scd/node_modules/decompress-response/node_modules/mimic-response": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -7356,11 +6772,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/deep-eql": { + "packages/open-scd/node_modules/deep-eql": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, + "license": "MIT", "dependencies": { "type-detect": "^4.0.0" }, @@ -7368,41 +6783,36 @@ "node": ">=0.12" } }, - "node_modules/deep-equal": { + "packages/open-scd/node_modules/deep-equal": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/deep-extend": { + "packages/open-scd/node_modules/deep-extend": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } }, - "node_modules/deep-is": { + "packages/open-scd/node_modules/deep-is": { "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 + "dev": true, + "license": "MIT" }, - "node_modules/deepmerge": { + "packages/open-scd/node_modules/deepmerge": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/default-browser-id": { + "packages/open-scd/node_modules/default-browser-id": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-2.0.0.tgz", - "integrity": "sha1-AezONxpx6F8VoXF354YwR+c9vn0=", "dev": true, + "license": "MIT", "dependencies": { "bplist-parser": "^0.1.0", "pify": "^2.3.0", @@ -7412,47 +6822,42 @@ "node": ">=4" } }, - "node_modules/defaults": { + "packages/open-scd/node_modules/defaults": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, + "license": "MIT", "dependencies": { "clone": "^1.0.2" } }, - "node_modules/defaults/node_modules/clone": { + "packages/open-scd/node_modules/defaults/node_modules/clone": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } }, - "node_modules/defer-to-connect": { + "packages/open-scd/node_modules/defer-to-connect": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, - "node_modules/define-lazy-prop": { + "packages/open-scd/node_modules/define-lazy-prop": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/define-properties": { + "packages/open-scd/node_modules/define-properties": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dev": true, + "license": "MIT", "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -7464,68 +6869,60 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/delayed-stream": { + "packages/open-scd/node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, - "node_modules/delegates": { + "packages/open-scd/node_modules/delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/depd": { + "packages/open-scd/node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/dependency-graph": { + "packages/open-scd/node_modules/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, + "license": "MIT", "engines": { "node": ">= 0.6.0" } }, - "node_modules/destroy": { + "packages/open-scd/node_modules/destroy": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/detect-indent": { + "packages/open-scd/node_modules/detect-indent": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/detect-newline": { + "packages/open-scd/node_modules/detect-newline": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/detect-port": { + "packages/open-scd/node_modules/detect-port": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", "dev": true, + "license": "MIT", "dependencies": { "address": "^1.0.1", "debug": "^2.6.0" @@ -7538,51 +6935,45 @@ "node": ">= 4.2.1" } }, - "node_modules/detect-port/node_modules/debug": { + "packages/open-scd/node_modules/detect-port/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, - "node_modules/detect-port/node_modules/ms": { + "packages/open-scd/node_modules/detect-port/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/devtools-protocol": { + "packages/open-scd/node_modules/devtools-protocol": { "version": "0.0.981744", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", - "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, - "node_modules/dezalgo": { + "packages/open-scd/node_modules/dezalgo": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", - "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", "dev": true, + "license": "ISC", "dependencies": { "asap": "^2.0.0", "wrappy": "1" } }, - "node_modules/diff": { + "packages/open-scd/node_modules/diff": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, - "node_modules/dir-glob": { + "packages/open-scd/node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -7590,11 +6981,10 @@ "node": ">=8" } }, - "node_modules/doctrine": { + "packages/open-scd/node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -7602,11 +6992,10 @@ "node": ">=6.0.0" } }, - "node_modules/dom-serializer": { + "packages/open-scd/node_modules/dom-serializer": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, + "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -7616,49 +7005,44 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/dom-serializer/node_modules/entities": { + "packages/open-scd/node_modules/dom-serializer/node_modules/entities": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, + "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/dom5": { + "packages/open-scd/node_modules/dom5": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.1.tgz", - "integrity": "sha512-JPFiouQIr16VQ4dX6i0+Hpbg3H2bMKPmZ+WZgBOSSvOPx9QHwwY8sPzeM2baUtViESYto6wC2nuZOMC/6gulcA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@types/parse5": "^2.2.34", "clone": "^2.1.0", "parse5": "^4.0.0" } }, - "node_modules/dom5/node_modules/parse5": { + "packages/open-scd/node_modules/dom5/node_modules/parse5": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/domelementtype": { + "packages/open-scd/node_modules/domelementtype": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, - "node_modules/domhandler": { + "packages/open-scd/node_modules/domhandler": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.2.0" }, @@ -7669,11 +7053,10 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/domutils": { + "packages/open-scd/node_modules/domutils": { "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -7683,21 +7066,19 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/dot-case": { + "packages/open-scd/node_modules/dot-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, - "node_modules/dot-prop": { + "packages/open-scd/node_modules/dot-prop": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, + "license": "MIT", "dependencies": { "is-obj": "^2.0.0" }, @@ -7705,11 +7086,10 @@ "node": ">=8" } }, - "node_modules/dotgitignore": { + "packages/open-scd/node_modules/dotgitignore": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz", - "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==", "dev": true, + "license": "ISC", "dependencies": { "find-up": "^3.0.0", "minimatch": "^3.0.4" @@ -7718,11 +7098,10 @@ "node": ">=6" } }, - "node_modules/dotgitignore/node_modules/find-up": { + "packages/open-scd/node_modules/dotgitignore/node_modules/find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^3.0.0" }, @@ -7730,11 +7109,10 @@ "node": ">=6" } }, - "node_modules/dotgitignore/node_modules/locate-path": { + "packages/open-scd/node_modules/dotgitignore/node_modules/locate-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -7743,11 +7121,10 @@ "node": ">=6" } }, - "node_modules/dotgitignore/node_modules/p-locate": { + "packages/open-scd/node_modules/dotgitignore/node_modules/p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.0.0" }, @@ -7755,48 +7132,42 @@ "node": ">=6" } }, - "node_modules/dotgitignore/node_modules/path-exists": { + "packages/open-scd/node_modules/dotgitignore/node_modules/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, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/duplexer3": { + "packages/open-scd/node_modules/duplexer3": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, - "node_modules/dynamic-import-polyfill": { + "packages/open-scd/node_modules/dynamic-import-polyfill": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dynamic-import-polyfill/-/dynamic-import-polyfill-0.1.1.tgz", - "integrity": "sha512-m953zv0w5oDagTItWm6Auhmk/pY7EiejaqiVbnzSS3HIjh1FCUeK7WzuaVtWPNs58A+/xpIE+/dVk6pKsrua8g==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/ecc-jsbn": { + "packages/open-scd/node_modules/ecc-jsbn": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, + "license": "MIT", "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, - "node_modules/ee-first": { + "packages/open-scd/node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/ejs": { + "packages/open-scd/node_modules/ejs": { "version": "3.1.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -7807,51 +7178,45 @@ "node": ">=0.10.0" } }, - "node_modules/electron-to-chromium": { + "packages/open-scd/node_modules/electron-to-chromium": { "version": "1.4.11", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.11.tgz", - "integrity": "sha512-2OhsaYgsWGhWjx2et8kaUcdktPbBGjKM2X0BReUCKcSCPttEY+hz2zie820JLbttU8jwL92+JJysWwkut3wZgA==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/emoji-regex": { + "packages/open-scd/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/emojis-list": { + "packages/open-scd/node_modules/emojis-list": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, - "node_modules/encodeurl": { + "packages/open-scd/node_modules/encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/encoding": { + "packages/open-scd/node_modules/encoding": { "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "iconv-lite": "^0.6.2" } }, - "node_modules/encoding/node_modules/iconv-lite": { + "packages/open-scd/node_modules/encoding/node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -7860,20 +7225,18 @@ "node": ">=0.10.0" } }, - "node_modules/end-of-stream": { + "packages/open-scd/node_modules/end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, - "node_modules/enquirer": { + "packages/open-scd/node_modules/enquirer": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-colors": "^4.1.1" }, @@ -7881,11 +7244,10 @@ "node": ">=8.6" } }, - "node_modules/entities": { + "packages/open-scd/node_modules/entities": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -7893,41 +7255,36 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/env-paths": { + "packages/open-scd/node_modules/env-paths": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/err-code": { + "packages/open-scd/node_modules/err-code": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/error-ex": { + "packages/open-scd/node_modules/error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, - "node_modules/errorstacks": { + "packages/open-scd/node_modules/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 + "dev": true, + "license": "MIT" }, - "node_modules/es-abstract": { + "packages/open-scd/node_modules/es-abstract": { "version": "1.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -7970,11 +7327,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-dev-server": { + "packages/open-scd/node_modules/es-dev-server": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-dev-server/-/es-dev-server-2.1.0.tgz", - "integrity": "sha512-Vrq/4PyMzWz33QmOdSncvoWLTJVcv2e96z8FLHQwP9zK7DyLeDZCckII8VTW+btUGtM7aErvLH/d/R2pjjjs8w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.1", "@babel/plugin-proposal-dynamic-import": "^7.10.4", @@ -8049,26 +7405,23 @@ "node": ">=0.10.0" } }, - "node_modules/es-dev-server/node_modules/ansi-regex": { + "packages/open-scd/node_modules/es-dev-server/node_modules/ansi-regex": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/es-dev-server/node_modules/es-module-lexer": { + "packages/open-scd/node_modules/es-dev-server/node_modules/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 + "dev": true, + "license": "MIT" }, - "node_modules/es-dev-server/node_modules/get-stream": { + "packages/open-scd/node_modules/es-dev-server/node_modules/get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -8079,30 +7432,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-dev-server/node_modules/koa-etag": { + "packages/open-scd/node_modules/es-dev-server/node_modules/koa-etag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-3.0.0.tgz", - "integrity": "sha1-nvc4Ld1agqsN6xU0FckVg293HT8=", "dev": true, + "license": "MIT", "dependencies": { "etag": "^1.3.0", "mz": "^2.1.0" } }, - "node_modules/es-dev-server/node_modules/lru-cache": { + "packages/open-scd/node_modules/es-dev-server/node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, - "node_modules/es-dev-server/node_modules/open": { + "packages/open-scd/node_modules/es-dev-server/node_modules/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, + "license": "MIT", "dependencies": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" @@ -8114,17 +7464,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-dev-server/node_modules/parse5": { + "packages/open-scd/node_modules/es-dev-server/node_modules/parse5": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/es-dev-server/node_modules/strip-ansi": { + "packages/open-scd/node_modules/es-dev-server/node_modules/strip-ansi": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" }, @@ -8132,61 +7480,53 @@ "node": ">=6" } }, - "node_modules/es-dev-server/node_modules/tr46": { + "packages/open-scd/node_modules/es-dev-server/node_modules/tr46": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.1.0" } }, - "node_modules/es-dev-server/node_modules/tslib": { + "packages/open-scd/node_modules/es-dev-server/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, - "node_modules/es-dev-server/node_modules/webidl-conversions": { + "packages/open-scd/node_modules/es-dev-server/node_modules/webidl-conversions": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, - "node_modules/es-dev-server/node_modules/whatwg-url": { + "packages/open-scd/node_modules/es-dev-server/node_modules/whatwg-url": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, + "license": "MIT", "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", "webidl-conversions": "^4.0.2" } }, - "node_modules/es-dev-server/node_modules/yallist": { + "packages/open-scd/node_modules/es-dev-server/node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/es-module-lexer": { + "packages/open-scd/node_modules/es-module-lexer": { "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 + "dev": true, + "license": "MIT" }, - "node_modules/es-module-shims": { + "packages/open-scd/node_modules/es-module-shims": { "version": "0.4.7", - "resolved": "https://registry.npmjs.org/es-module-shims/-/es-module-shims-0.4.7.tgz", - "integrity": "sha512-0LTiSQoPWwdcaTVIQXhGlaDwTneD0g9/tnH1PNs3zHFFH+xoCeJclDM3rQeqF9nurXPfMKm3l9+kfPRa5VpbKg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/es-set-tostringtag": { + "packages/open-scd/node_modules/es-set-tostringtag": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3", "has": "^1.0.3", @@ -8196,11 +7536,10 @@ "node": ">= 0.4" } }, - "node_modules/es-to-primitive": { + "packages/open-scd/node_modules/es-to-primitive": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -8213,54 +7552,48 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esbuild": { + "packages/open-scd/node_modules/esbuild": { "version": "0.9.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.9.7.tgz", - "integrity": "sha512-VtUf6aQ89VTmMLKrWHYG50uByMF4JQlVysb8dmg6cOgW8JnFCipmz7p+HNBl+RR3LLCuBxFGVauAe2wfnF9bLg==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" } }, - "node_modules/escalade": { + "packages/open-scd/node_modules/escalade": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/escape-goat": { + "packages/open-scd/node_modules/escape-goat": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/escape-html": { + "packages/open-scd/node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/escape-string-regexp": { + "packages/open-scd/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } }, - "node_modules/esinstall": { + "packages/open-scd/node_modules/esinstall": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/esinstall/-/esinstall-1.1.7.tgz", - "integrity": "sha512-irDsrIF7fZ5BCQEAV5gmH+4nsK6JhnkI9C9VloXdmzJLbM1EcshPw8Ap95UUGc4ZJdzGeOrjV+jgKjQ/Z7Q3pg==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/plugin-commonjs": "^16.0.0", "@rollup/plugin-inject": "^4.0.2", @@ -8284,11 +7617,10 @@ "vm2": "^3.9.2" } }, - "node_modules/esinstall/node_modules/@rollup/plugin-node-resolve": { + "packages/open-scd/node_modules/esinstall/node_modules/@rollup/plugin-node-resolve": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-10.0.0.tgz", - "integrity": "sha512-sNijGta8fqzwA1VwUEtTvWCx2E7qC70NMsDh4ZG13byAXYigBNZMxALhKUSycBks5gupJdq0lFrKumFrRZ8H3A==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^3.1.0", "@types/resolve": "1.17.1", @@ -8304,19 +7636,15 @@ "rollup": "^1.20.0||^2.0.0" } }, - "node_modules/esinstall/node_modules/es-module-lexer": { + "packages/open-scd/node_modules/esinstall/node_modules/es-module-lexer": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.6.0.tgz", - "integrity": "sha512-f8kcHX1ArhllUtb/wVSyvygoKCznIjnxhLxy7TCvIiMdT7fL4ZDTIKaadMe6eLvOXg6Wk02UeoFgUoZ2EKZZUA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/esinstall/node_modules/fsevents": { + "packages/open-scd/node_modules/esinstall/node_modules/fsevents": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "deprecated": "\"Please update to latest v2.3 or v2.2\"", "dev": true, - "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -8325,11 +7653,10 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/esinstall/node_modules/rollup": { + "packages/open-scd/node_modules/esinstall/node_modules/rollup": { "version": "2.37.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.37.1.tgz", - "integrity": "sha512-V3ojEeyGeSdrMSuhP3diBb06P+qV4gKQeanbDv+Qh/BZbhdZ7kHV0xAt8Yjk4GFshq/WjO7R4c7DFM20AwTFVQ==", "dev": true, + "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -8340,11 +7667,10 @@ "fsevents": "~2.1.2" } }, - "node_modules/eslint": { + "packages/open-scd/node_modules/eslint": { "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "7.12.11", "@eslint/eslintrc": "^0.4.3", @@ -8397,11 +7723,10 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-config-airbnb-base": { + "packages/open-scd/node_modules/eslint-config-airbnb-base": { "version": "14.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", - "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", "dev": true, + "license": "MIT", "dependencies": { "confusing-browser-globals": "^1.0.10", "object.assign": "^4.1.2", @@ -8415,11 +7740,10 @@ "eslint-plugin-import": "^2.22.1" } }, - "node_modules/eslint-config-prettier": { + "packages/open-scd/node_modules/eslint-config-prettier": { "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", "dev": true, + "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -8427,30 +7751,27 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-import-resolver-node": { + "packages/open-scd/node_modules/eslint-import-resolver-node": { "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.2.7", "resolve": "^1.20.0" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { + "packages/open-scd/node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/eslint-module-utils": { + "packages/open-scd/node_modules/eslint-module-utils": { "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, + "license": "MIT", "dependencies": { "debug": "^3.2.7", "find-up": "^2.1.0", @@ -8460,20 +7781,18 @@ "node": ">=4" } }, - "node_modules/eslint-module-utils/node_modules/debug": { + "packages/open-scd/node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/eslint-module-utils/node_modules/find-up": { + "packages/open-scd/node_modules/eslint-module-utils/node_modules/find-up": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^2.0.0" }, @@ -8481,11 +7800,10 @@ "node": ">=4" } }, - "node_modules/eslint-module-utils/node_modules/locate-path": { + "packages/open-scd/node_modules/eslint-module-utils/node_modules/locate-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -8494,11 +7812,10 @@ "node": ">=4" } }, - "node_modules/eslint-module-utils/node_modules/p-limit": { + "packages/open-scd/node_modules/eslint-module-utils/node_modules/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, + "license": "MIT", "dependencies": { "p-try": "^1.0.0" }, @@ -8506,11 +7823,10 @@ "node": ">=4" } }, - "node_modules/eslint-module-utils/node_modules/p-locate": { + "packages/open-scd/node_modules/eslint-module-utils/node_modules/p-locate": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^1.1.0" }, @@ -8518,29 +7834,26 @@ "node": ">=4" } }, - "node_modules/eslint-module-utils/node_modules/p-try": { + "packages/open-scd/node_modules/eslint-module-utils/node_modules/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, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/eslint-module-utils/node_modules/path-exists": { + "packages/open-scd/node_modules/eslint-module-utils/node_modules/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, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/eslint-plugin-babel": { + "packages/open-scd/node_modules/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, + "license": "MIT", "dependencies": { "eslint-rule-composer": "^0.3.0" }, @@ -8551,20 +7864,18 @@ "eslint": ">=4.0.0" } }, - "node_modules/eslint-plugin-html": { + "packages/open-scd/node_modules/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, + "license": "ISC", "dependencies": { "htmlparser2": "^7.1.2" } }, - "node_modules/eslint-plugin-import": { + "packages/open-scd/node_modules/eslint-plugin-import": { "version": "2.25.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz", - "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", "dev": true, + "license": "MIT", "dependencies": { "array-includes": "^3.1.4", "array.prototype.flat": "^1.2.5", @@ -8587,20 +7898,18 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { + "packages/open-scd/node_modules/eslint-plugin-import/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { + "packages/open-scd/node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -8608,17 +7917,15 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/ms": { + "packages/open-scd/node_modules/eslint-plugin-import/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/eslint-plugin-lit": { + "packages/open-scd/node_modules/eslint-plugin-lit": { "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, + "license": "MIT", "dependencies": { "parse5": "^6.0.1", "parse5-htmlparser2-tree-adapter": "^6.0.1", @@ -8631,11 +7938,10 @@ "eslint": ">= 5" } }, - "node_modules/eslint-plugin-lit-a11y": { + "packages/open-scd/node_modules/eslint-plugin-lit-a11y": { "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, + "license": "ISC", "dependencies": { "aria-query": "^4.2.2", "axe-core": "^4.3.3", @@ -8653,42 +7959,37 @@ "eslint": ">= 5" } }, - "node_modules/eslint-plugin-lit-a11y/node_modules/emoji-regex": { + "packages/open-scd/node_modules/eslint-plugin-lit-a11y/node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/eslint-plugin-lit-a11y/node_modules/parse5": { + "packages/open-scd/node_modules/eslint-plugin-lit-a11y/node_modules/parse5": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/eslint-plugin-no-only-tests": { + "packages/open-scd/node_modules/eslint-plugin-no-only-tests": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-2.6.0.tgz", - "integrity": "sha512-T9SmE/g6UV1uZo1oHAqOvL86XWl7Pl2EpRpnLI8g/bkJu+h7XBCB+1LnubRZ2CUQXj805vh4/CYZdnqtVaEo2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } }, - "node_modules/eslint-plugin-tsdoc": { + "packages/open-scd/node_modules/eslint-plugin-tsdoc": { "version": "0.2.14", - "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.14.tgz", - "integrity": "sha512-fJ3fnZRsdIoBZgzkQjv8vAj6NeeOoFkTfgosj6mKsFjX70QV256sA/wq+y/R2+OL4L8E79VVaVWrPeZnKNe8Ng==", "dev": true, + "license": "MIT", "dependencies": { "@microsoft/tsdoc": "0.13.2", "@microsoft/tsdoc-config": "0.15.2" } }, - "node_modules/eslint-plugin-wc": { + "packages/open-scd/node_modules/eslint-plugin-wc": { "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, + "license": "MIT", "dependencies": { "is-valid-element-name": "^1.0.0", "js-levenshtein-esm": "^1.2.0" @@ -8697,20 +7998,18 @@ "eslint": ">=5" } }, - "node_modules/eslint-rule-composer": { + "packages/open-scd/node_modules/eslint-rule-composer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } }, - "node_modules/eslint-rule-extender": { + "packages/open-scd/node_modules/eslint-rule-extender": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/eslint-rule-extender/-/eslint-rule-extender-0.0.1.tgz", - "integrity": "sha512-F0j1Twve3lamL3J0rRSVAynlp58sDPG39JFcQrM+u9Na7PmCgiPHNODh6YE9mduaGcsn3NBqbf6LZRj0cLr8Ng==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -8719,11 +8018,10 @@ "url": "https://github.com/sponsors/kaicataldo" } }, - "node_modules/eslint-scope": { + "packages/open-scd/node_modules/eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -8732,11 +8030,10 @@ "node": ">=8.0.0" } }, - "node_modules/eslint-utils": { + "packages/open-scd/node_modules/eslint-utils": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^1.1.0" }, @@ -8747,38 +8044,34 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "packages/open-scd/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=4" } }, - "node_modules/eslint-visitor-keys": { + "packages/open-scd/node_modules/eslint-visitor-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10" } }, - "node_modules/eslint/node_modules/@babel/code-frame": { + "packages/open-scd/node_modules/eslint/node_modules/@babel/code-frame": { "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/highlight": "^7.10.4" } }, - "node_modules/eslint/node_modules/ajv": { + "packages/open-scd/node_modules/eslint/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -8790,11 +8083,10 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/escape-string-regexp": { + "packages/open-scd/node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -8802,17 +8094,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/json-schema-traverse": { + "packages/open-scd/node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/espree": { + "packages/open-scd/node_modules/espree": { "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^7.4.0", "acorn-jsx": "^5.3.1", @@ -8822,20 +8112,18 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { + "packages/open-scd/node_modules/espree/node_modules/eslint-visitor-keys": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=4" } }, - "node_modules/esprima": { + "packages/open-scd/node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -8844,11 +8132,10 @@ "node": ">=4" } }, - "node_modules/esquery": { + "packages/open-scd/node_modules/esquery": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -8856,20 +8143,18 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { + "packages/open-scd/node_modules/esquery/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, - "node_modules/esrecurse": { + "packages/open-scd/node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -8877,59 +8162,52 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "packages/open-scd/node_modules/esrecurse/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, - "node_modules/estraverse": { + "packages/open-scd/node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, - "node_modules/estree-walker": { + "packages/open-scd/node_modules/estree-walker": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/esutils": { + "packages/open-scd/node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/etag": { + "packages/open-scd/node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/eventemitter3": { + "packages/open-scd/node_modules/eventemitter3": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/execa": { + "packages/open-scd/node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -8948,17 +8226,15 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/extend": { + "packages/open-scd/node_modules/extend": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/external-editor": { + "packages/open-scd/node_modules/external-editor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, + "license": "MIT", "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -8968,11 +8244,10 @@ "node": ">=4" } }, - "node_modules/extract-zip": { + "packages/open-scd/node_modules/extract-zip": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -8988,11 +8263,10 @@ "@types/yauzl": "^2.9.1" } }, - "node_modules/extract-zip/node_modules/get-stream": { + "packages/open-scd/node_modules/extract-zip/node_modules/get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -9003,20 +8277,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/extsprintf": { + "packages/open-scd/node_modules/extsprintf": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true, "engines": [ "node >=0.6.0" - ] + ], + "license": "MIT" }, - "node_modules/fast-check": { + "packages/open-scd/node_modules/fast-check": { "version": "2.20.0", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.20.0.tgz", - "integrity": "sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog==", "dev": true, + "license": "MIT", "dependencies": { "pure-rand": "^5.0.0" }, @@ -9028,17 +8300,15 @@ "url": "https://opencollective.com/fast-check" } }, - "node_modules/fast-deep-equal": { + "packages/open-scd/node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/fast-glob": { + "packages/open-scd/node_modules/fast-glob": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -9050,47 +8320,41 @@ "node": ">=8" } }, - "node_modules/fast-json-stable-stringify": { + "packages/open-scd/node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/fast-levenshtein": { + "packages/open-scd/node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/fastq": { + "packages/open-scd/node_modules/fastq": { "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, - "node_modules/fd-slicer": { + "packages/open-scd/node_modules/fd-slicer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, + "license": "MIT", "dependencies": { "pend": "~1.2.0" } }, - "node_modules/fdir": { + "packages/open-scd/node_modules/fdir": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-5.1.0.tgz", - "integrity": "sha512-IgTtZwL52tx2wqWeuGDzXYTnNsEjNLahZpJw30hCQDyVnoHXwY5acNDnjGImTTL1R0z1PCyLw20VAbE5qLic3Q==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/figures": { + "packages/open-scd/node_modules/figures": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -9101,11 +8365,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/file-entry-cache": { + "packages/open-scd/node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -9113,29 +8376,26 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/filelist": { + "packages/open-scd/node_modules/filelist": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } }, - "node_modules/filelist/node_modules/brace-expansion": { + "packages/open-scd/node_modules/filelist/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, - "node_modules/filelist/node_modules/minimatch": { + "packages/open-scd/node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -9143,11 +8403,10 @@ "node": ">=10" } }, - "node_modules/fill-range": { + "packages/open-scd/node_modules/fill-range": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -9155,11 +8414,10 @@ "node": ">=8" } }, - "node_modules/find-cache-dir": { + "packages/open-scd/node_modules/find-cache-dir": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, + "license": "MIT", "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -9172,11 +8430,10 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/find-cache-dir/node_modules/pkg-dir": { + "packages/open-scd/node_modules/find-cache-dir/node_modules/pkg-dir": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -9184,11 +8441,10 @@ "node": ">=8" } }, - "node_modules/find-replace": { + "packages/open-scd/node_modules/find-replace": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, + "license": "MIT", "dependencies": { "array-back": "^3.0.1" }, @@ -9196,11 +8452,10 @@ "node": ">=4.0.0" } }, - "node_modules/find-up": { + "packages/open-scd/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -9209,11 +8464,10 @@ "node": ">=8" } }, - "node_modules/flat": { + "packages/open-scd/node_modules/flat": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "is-buffer": "~2.0.3" }, @@ -9221,11 +8475,10 @@ "flat": "cli.js" } }, - "node_modules/flat-cache": { + "packages/open-scd/node_modules/flat-cache": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -9234,35 +8487,31 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/flatted": { + "packages/open-scd/node_modules/flatted": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/for-each": { + "packages/open-scd/node_modules/for-each": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, - "node_modules/forever-agent": { + "packages/open-scd/node_modules/forever-agent": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true, + "license": "Apache-2.0", "engines": { "node": "*" } }, - "node_modules/form-data": { + "packages/open-scd/node_modules/form-data": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -9272,20 +8521,18 @@ "node": ">= 0.12" } }, - "node_modules/fresh": { + "packages/open-scd/node_modules/fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/fs-access": { + "packages/open-scd/node_modules/fs-access": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", "dev": true, + "license": "MIT", "dependencies": { "null-check": "^1.0.0" }, @@ -9293,17 +8540,15 @@ "node": ">=0.10.0" } }, - "node_modules/fs-constants": { + "packages/open-scd/node_modules/fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/fs-extra": { + "packages/open-scd/node_modules/fs-extra": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -9313,11 +8558,10 @@ "node": ">=12" } }, - "node_modules/fs-minipass": { + "packages/open-scd/node_modules/fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -9325,18 +8569,15 @@ "node": ">= 8" } }, - "node_modules/fs.realpath": { + "packages/open-scd/node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/fsevents": { + "packages/open-scd/node_modules/fsevents": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -9345,17 +8586,15 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/function-bind": { + "packages/open-scd/node_modules/function-bind": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/function.prototype.name": { + "packages/open-scd/node_modules/function.prototype.name": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -9369,26 +8608,23 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { + "packages/open-scd/node_modules/functional-red-black-tree": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/functions-have-names": { + "packages/open-scd/node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { + "packages/open-scd/node_modules/gauge": { "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, + "license": "ISC", "dependencies": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -9400,20 +8636,18 @@ "wide-align": "^1.1.0" } }, - "node_modules/gauge/node_modules/ansi-regex": { + "packages/open-scd/node_modules/gauge/node_modules/ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "packages/open-scd/node_modules/gauge/node_modules/is-fullwidth-code-point": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, + "license": "MIT", "dependencies": { "number-is-nan": "^1.0.0" }, @@ -9421,11 +8655,10 @@ "node": ">=0.10.0" } }, - "node_modules/gauge/node_modules/string-width": { + "packages/open-scd/node_modules/gauge/node_modules/string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, + "license": "MIT", "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -9435,11 +8668,10 @@ "node": ">=0.10.0" } }, - "node_modules/gauge/node_modules/strip-ansi": { + "packages/open-scd/node_modules/gauge/node_modules/strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -9447,47 +8679,42 @@ "node": ">=0.10.0" } }, - "node_modules/generic-names": { + "packages/open-scd/node_modules/generic-names": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz", - "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==", "dev": true, + "license": "MIT", "dependencies": { "loader-utils": "^1.1.0" } }, - "node_modules/gensync": { + "packages/open-scd/node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/get-caller-file": { + "packages/open-scd/node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-func-name": { + "packages/open-scd/node_modules/get-func-name": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, - "node_modules/get-intrinsic": { + "packages/open-scd/node_modules/get-intrinsic": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -9497,17 +8724,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-own-enumerable-property-symbols": { + "packages/open-scd/node_modules/get-own-enumerable-property-symbols": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/get-pkg-repo": { + "packages/open-scd/node_modules/get-pkg-repo": { "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, + "license": "MIT", "dependencies": { "@hutson/parse-repository-url": "^3.0.0", "hosted-git-info": "^4.0.0", @@ -9521,17 +8746,15 @@ "node": ">=6.9.0" } }, - "node_modules/get-pkg-repo/node_modules/isarray": { + "packages/open-scd/node_modules/get-pkg-repo/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/get-pkg-repo/node_modules/readable-stream": { + "packages/open-scd/node_modules/get-pkg-repo/node_modules/readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -9542,36 +8765,32 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/get-pkg-repo/node_modules/safe-buffer": { + "packages/open-scd/node_modules/get-pkg-repo/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/get-pkg-repo/node_modules/string_decoder": { + "packages/open-scd/node_modules/get-pkg-repo/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, - "node_modules/get-pkg-repo/node_modules/through2": { + "packages/open-scd/node_modules/get-pkg-repo/node_modules/through2": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, - "node_modules/get-pkg-repo/node_modules/yargs": { + "packages/open-scd/node_modules/get-pkg-repo/node_modules/yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -9585,11 +8804,10 @@ "node": ">=10" } }, - "node_modules/get-stream": { + "packages/open-scd/node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -9597,11 +8815,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { + "packages/open-scd/node_modules/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, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -9613,20 +8830,18 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/getpass": { + "packages/open-scd/node_modules/getpass": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" } }, - "node_modules/git-raw-commits": { + "packages/open-scd/node_modules/git-raw-commits": { "version": "2.0.10", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", - "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", "dev": true, + "license": "MIT", "dependencies": { "dargs": "^7.0.0", "lodash": "^4.17.15", @@ -9641,11 +8856,10 @@ "node": ">=10" } }, - "node_modules/git-remote-origin-url": { + "packages/open-scd/node_modules/git-remote-origin-url": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", "dev": true, + "license": "MIT", "dependencies": { "gitconfiglocal": "^1.0.0", "pify": "^2.3.0" @@ -9654,11 +8868,10 @@ "node": ">=4" } }, - "node_modules/git-semver-tags": { + "packages/open-scd/node_modules/git-semver-tags": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", - "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", "dev": true, + "license": "MIT", "dependencies": { "meow": "^8.0.0", "semver": "^6.0.0" @@ -9670,29 +8883,26 @@ "node": ">=10" } }, - "node_modules/git-semver-tags/node_modules/semver": { + "packages/open-scd/node_modules/git-semver-tags/node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/gitconfiglocal": { + "packages/open-scd/node_modules/gitconfiglocal": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", "dev": true, + "license": "BSD", "dependencies": { "ini": "^1.3.2" } }, - "node_modules/glob": { + "packages/open-scd/node_modules/glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9708,11 +8918,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob-parent": { + "packages/open-scd/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -9720,11 +8929,10 @@ "node": ">= 6" } }, - "node_modules/global-dirs": { + "packages/open-scd/node_modules/global-dirs": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "dev": true, + "license": "MIT", "dependencies": { "ini": "^1.3.4" }, @@ -9732,11 +8940,10 @@ "node": ">=4" } }, - "node_modules/globals": { + "packages/open-scd/node_modules/globals": { "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -9747,11 +8954,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globals/node_modules/type-fest": { + "packages/open-scd/node_modules/globals/node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -9759,11 +8965,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globalthis": { + "packages/open-scd/node_modules/globalthis": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.1.3" }, @@ -9774,11 +8979,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { + "packages/open-scd/node_modules/globby": { "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -9794,20 +8998,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby/node_modules/ignore": { + "packages/open-scd/node_modules/globby/node_modules/ignore": { "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, - "node_modules/gopd": { + "packages/open-scd/node_modules/gopd": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -9815,11 +9017,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/got": { + "packages/open-scd/node_modules/got": { "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -9840,26 +9041,23 @@ "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/graceful-fs": { + "packages/open-scd/node_modules/graceful-fs": { "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/growl": { + "packages/open-scd/node_modules/growl": { "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.x" } }, - "node_modules/handlebars": { + "packages/open-scd/node_modules/handlebars": { "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.0", @@ -9876,30 +9074,26 @@ "uglify-js": "^3.1.4" } }, - "node_modules/handlebars/node_modules/source-map": { + "packages/open-scd/node_modules/handlebars/node_modules/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, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/har-schema": { + "packages/open-scd/node_modules/har-schema": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "dev": true, + "license": "ISC", "engines": { "node": ">=4" } }, - "node_modules/har-validator": { + "packages/open-scd/node_modules/har-validator": { "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -9908,11 +9102,10 @@ "node": ">=6" } }, - "node_modules/har-validator/node_modules/ajv": { + "packages/open-scd/node_modules/har-validator/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -9924,26 +9117,23 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/har-validator/node_modules/json-schema-traverse": { + "packages/open-scd/node_modules/har-validator/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/hard-rejection": { + "packages/open-scd/node_modules/hard-rejection": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/has": { + "packages/open-scd/node_modules/has": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.1" }, @@ -9951,29 +9141,26 @@ "node": ">= 0.4.0" } }, - "node_modules/has-bigints": { + "packages/open-scd/node_modules/has-bigints": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-flag": { + "packages/open-scd/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/has-property-descriptors": { + "packages/open-scd/node_modules/has-property-descriptors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.1" }, @@ -9981,11 +9168,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { + "packages/open-scd/node_modules/has-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9993,11 +9179,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { + "packages/open-scd/node_modules/has-symbols": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -10005,11 +9190,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { + "packages/open-scd/node_modules/has-tostringtag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -10020,35 +9204,31 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { + "packages/open-scd/node_modules/has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/has-yarn": { + "packages/open-scd/node_modules/has-yarn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/he": { + "packages/open-scd/node_modules/he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, + "license": "MIT", "bin": { "he": "bin/he" } }, - "node_modules/hosted-git-info": { + "packages/open-scd/node_modules/hosted-git-info": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -10056,17 +9236,15 @@ "node": ">=10" } }, - "node_modules/html-escaper": { + "packages/open-scd/node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/html-minifier-terser": { + "packages/open-scd/node_modules/html-minifier-terser": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", "dev": true, + "license": "MIT", "dependencies": { "camel-case": "^4.1.1", "clean-css": "^4.2.3", @@ -10083,10 +9261,8 @@ "node": ">=6" } }, - "node_modules/htmlparser2": { + "packages/open-scd/node_modules/htmlparser2": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", - "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -10095,6 +9271,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.2", @@ -10102,11 +9279,10 @@ "entities": "^3.0.1" } }, - "node_modules/http-assert": { + "packages/open-scd/node_modules/http-assert": { "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, + "license": "MIT", "dependencies": { "deep-equal": "~1.0.1", "http-errors": "~1.8.0" @@ -10115,17 +9291,15 @@ "node": ">= 0.8" } }, - "node_modules/http-cache-semantics": { + "packages/open-scd/node_modules/http-cache-semantics": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, - "node_modules/http-errors": { + "packages/open-scd/node_modules/http-errors": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", @@ -10137,20 +9311,18 @@ "node": ">= 0.6" } }, - "node_modules/http-errors/node_modules/depd": { + "packages/open-scd/node_modules/http-errors/node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/http-proxy-agent": { + "packages/open-scd/node_modules/http-proxy-agent": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/once": "1", "agent-base": "6", @@ -10160,11 +9332,10 @@ "node": ">= 6" } }, - "node_modules/http-signature": { + "packages/open-scd/node_modules/http-signature": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -10175,11 +9346,10 @@ "npm": ">=1.3.7" } }, - "node_modules/http2-wrapper": { + "packages/open-scd/node_modules/http2-wrapper": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, + "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" @@ -10188,11 +9358,10 @@ "node": ">=10.19.0" } }, - "node_modules/http2-wrapper/node_modules/quick-lru": { + "packages/open-scd/node_modules/http2-wrapper/node_modules/quick-lru": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -10200,20 +9369,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/httpie": { + "packages/open-scd/node_modules/httpie": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/httpie/-/httpie-1.1.2.tgz", - "integrity": "sha512-VQ82oXG95oY1fQw/XecHuvcFBA+lZQ9Vwj1RfLcO8a7HpDd4cc2ukwpJt+TUlFaLUAzZErylxWu6wclJ1rUhUQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/https-proxy-agent": { + "packages/open-scd/node_modules/https-proxy-agent": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -10222,29 +9389,26 @@ "node": ">= 6" } }, - "node_modules/human-signals": { + "packages/open-scd/node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, - "node_modules/humanize-ms": { + "packages/open-scd/node_modules/humanize-ms": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.0.0" } }, - "node_modules/husky": { + "packages/open-scd/node_modules/husky": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", "dev": true, + "license": "MIT", "bin": { "husky": "lib/bin.js" }, @@ -10255,11 +9419,10 @@ "url": "https://github.com/sponsors/typicode" } }, - "node_modules/iconv-lite": { + "packages/open-scd/node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -10267,17 +9430,15 @@ "node": ">=0.10.0" } }, - "node_modules/icss-replace-symbols": { + "packages/open-scd/node_modules/icss-replace-symbols": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/icss-utils": { + "packages/open-scd/node_modules/icss-utils": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, + "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -10285,16 +9446,13 @@ "postcss": "^8.1.0" } }, - "node_modules/idb": { + "packages/open-scd/node_modules/idb": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/ieee754": { + "packages/open-scd/node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, "funding": [ { @@ -10309,31 +9467,29 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, - "node_modules/ignore": { + "packages/open-scd/node_modules/ignore": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, - "node_modules/ignore-walk": { + "packages/open-scd/node_modules/ignore-walk": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", "dev": true, + "license": "ISC", "dependencies": { "minimatch": "^3.0.4" } }, - "node_modules/import-fresh": { + "packages/open-scd/node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -10345,84 +9501,74 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/resolve-from": { + "packages/open-scd/node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/import-lazy": { + "packages/open-scd/node_modules/import-lazy": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/imurmurhash": { + "packages/open-scd/node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } }, - "node_modules/indent-string": { + "packages/open-scd/node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/infer-owner": { + "packages/open-scd/node_modules/infer-owner": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/inflation": { + "packages/open-scd/node_modules/inflation": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", - "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, - "node_modules/inflight": { + "packages/open-scd/node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, - "node_modules/inherits": { + "packages/open-scd/node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/ini": { + "packages/open-scd/node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/inquirer": { + "packages/open-scd/node_modules/inquirer": { "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.0", @@ -10442,11 +9588,10 @@ "node": ">=8.0.0" } }, - "node_modules/internal-slot": { + "packages/open-scd/node_modules/internal-slot": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.0", "has": "^1.0.3", @@ -10456,32 +9601,28 @@ "node": ">= 0.4" } }, - "node_modules/intersection-observer": { + "packages/open-scd/node_modules/intersection-observer": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/intersection-observer/-/intersection-observer-0.7.0.tgz", - "integrity": "sha512-Id0Fij0HsB/vKWGeBe9PxeY45ttRiBmhFyyt/geBdDHBYNctMRTE3dC1U3ujzz3lap+hVXlEcVaB56kZP/eEUg==", - "dev": true + "dev": true, + "license": "W3C-20150513" }, - "node_modules/intl-list-format": { + "packages/open-scd/node_modules/intl-list-format": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/intl-list-format/-/intl-list-format-1.0.3.tgz", - "integrity": "sha512-VNF1Mh0K1xALXkz/5QsK1gfKRvEQO/jWaniTGAzQvbzGr5uyGDskQrRjnf6Qnbc9/JRbNE8BQtTg6iWuFrZorw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } }, - "node_modules/ip": { + "packages/open-scd/node_modules/ip": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/is-array-buffer": { + "packages/open-scd/node_modules/is-array-buffer": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -10491,17 +9632,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-arrayish": { + "packages/open-scd/node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/is-bigint": { + "packages/open-scd/node_modules/is-bigint": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, + "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -10509,11 +9648,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-binary-path": { + "packages/open-scd/node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -10521,11 +9659,10 @@ "node": ">=8" } }, - "node_modules/is-boolean-object": { + "packages/open-scd/node_modules/is-boolean-object": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -10537,10 +9674,8 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-buffer": { + "packages/open-scd/node_modules/is-buffer": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true, "funding": [ { @@ -10556,15 +9691,15 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/is-callable": { + "packages/open-scd/node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -10572,11 +9707,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-ci": { + "packages/open-scd/node_modules/is-ci": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, + "license": "MIT", "dependencies": { "ci-info": "^2.0.0" }, @@ -10584,11 +9718,10 @@ "is-ci": "bin.js" } }, - "node_modules/is-core-module": { + "packages/open-scd/node_modules/is-core-module": { "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "dev": true, + "license": "MIT", "dependencies": { "has": "^1.0.3" }, @@ -10596,11 +9729,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-date-object": { + "packages/open-scd/node_modules/is-date-object": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -10611,11 +9743,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { + "packages/open-scd/node_modules/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, + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -10626,29 +9757,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extglob": { + "packages/open-scd/node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { + "packages/open-scd/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/is-generator-function": { + "packages/open-scd/node_modules/is-generator-function": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -10659,11 +9787,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-glob": { + "packages/open-scd/node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -10671,11 +9798,10 @@ "node": ">=0.10.0" } }, - "node_modules/is-installed-globally": { + "packages/open-scd/node_modules/is-installed-globally": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", "dev": true, + "license": "MIT", "dependencies": { "global-dirs": "^2.0.1", "is-path-inside": "^3.0.1" @@ -10687,11 +9813,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-installed-globally/node_modules/global-dirs": { + "packages/open-scd/node_modules/is-installed-globally/node_modules/global-dirs": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", "dev": true, + "license": "MIT", "dependencies": { "ini": "1.3.7" }, @@ -10702,38 +9827,33 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-installed-globally/node_modules/ini": { + "packages/open-scd/node_modules/is-installed-globally/node_modules/ini": { "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/is-interactive": { + "packages/open-scd/node_modules/is-interactive": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/is-lambda": { + "packages/open-scd/node_modules/is-lambda": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/is-module": { + "packages/open-scd/node_modules/is-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/is-negative-zero": { + "packages/open-scd/node_modules/is-negative-zero": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -10741,29 +9861,26 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-npm": { + "packages/open-scd/node_modules/is-npm": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/is-number": { + "packages/open-scd/node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, - "node_modules/is-number-object": { + "packages/open-scd/node_modules/is-number-object": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -10774,62 +9891,55 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-obj": { + "packages/open-scd/node_modules/is-obj": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/is-path-inside": { + "packages/open-scd/node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/is-plain-obj": { + "packages/open-scd/node_modules/is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-plain-object": { + "packages/open-scd/node_modules/is-plain-object": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-potential-custom-element-name": { + "packages/open-scd/node_modules/is-potential-custom-element-name": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/is-reference": { + "packages/open-scd/node_modules/is-reference": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "*" } }, - "node_modules/is-regex": { + "packages/open-scd/node_modules/is-regex": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -10841,20 +9951,18 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-regexp": { + "packages/open-scd/node_modules/is-regexp": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-shared-array-buffer": { + "packages/open-scd/node_modules/is-shared-array-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -10862,11 +9970,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-stream": { + "packages/open-scd/node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -10874,11 +9981,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-string": { + "packages/open-scd/node_modules/is-string": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -10889,11 +9995,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-symbol": { + "packages/open-scd/node_modules/is-symbol": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -10904,11 +10009,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-text-path": { + "packages/open-scd/node_modules/is-text-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", "dev": true, + "license": "MIT", "dependencies": { "text-extensions": "^1.0.0" }, @@ -10916,11 +10020,10 @@ "node": ">=0.10.0" } }, - "node_modules/is-typed-array": { + "packages/open-scd/node_modules/is-typed-array": { "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -10935,17 +10038,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typedarray": { + "packages/open-scd/node_modules/is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/is-unicode-supported": { + "packages/open-scd/node_modules/is-unicode-supported": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -10953,29 +10054,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-valid-element-name": { + "packages/open-scd/node_modules/is-valid-element-name": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-element-name/-/is-valid-element-name-1.0.0.tgz", - "integrity": "sha1-Ju8/12zfHxItEFQG4y01sN4AWYE=", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "is-potential-custom-element-name": "^1.0.0" } }, - "node_modules/is-valid-identifier": { + "packages/open-scd/node_modules/is-valid-identifier": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-valid-identifier/-/is-valid-identifier-2.0.2.tgz", - "integrity": "sha512-mpS5EGqXOwzXtKAg6I44jIAqeBfntFLxpAth1rrKbxtKyI6LPktyDYpHBI+tHlduhhX/SF26mFXmxQu995QVqg==", "dev": true, + "license": "MIT", "dependencies": { "assert": "^1.4.1" } }, - "node_modules/is-weakref": { + "packages/open-scd/node_modules/is-weakref": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -10983,11 +10081,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-wsl": { + "packages/open-scd/node_modules/is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, + "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -10995,23 +10092,20 @@ "node": ">=8" } }, - "node_modules/is-yarn-global": { + "packages/open-scd/node_modules/is-yarn-global": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/isarray": { + "packages/open-scd/node_modules/isarray": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/isbinaryfile": { + "packages/open-scd/node_modules/isbinaryfile": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", - "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8.0.0" }, @@ -11019,32 +10113,28 @@ "url": "https://github.com/sponsors/gjtorikian/" } }, - "node_modules/isexe": { + "packages/open-scd/node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/isstream": { + "packages/open-scd/node_modules/isstream": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/istanbul-lib-coverage": { + "packages/open-scd/node_modules/istanbul-lib-coverage": { "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, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, - "node_modules/istanbul-lib-report": { + "packages/open-scd/node_modules/istanbul-lib-report": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", @@ -11054,11 +10144,10 @@ "node": ">=8" } }, - "node_modules/istanbul-reports": { + "packages/open-scd/node_modules/istanbul-reports": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.1.tgz", - "integrity": "sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -11067,11 +10156,10 @@ "node": ">=8" } }, - "node_modules/jake": { + "packages/open-scd/node_modules/jake": { "version": "10.8.5", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", - "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", @@ -11085,17 +10173,15 @@ "node": ">=10" } }, - "node_modules/jake/node_modules/async": { + "packages/open-scd/node_modules/jake/node_modules/async": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/jest-worker": { + "packages/open-scd/node_modules/jest-worker": { "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -11105,29 +10191,25 @@ "node": ">= 10.13.0" } }, - "node_modules/jju": { + "packages/open-scd/node_modules/jju": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/js-levenshtein-esm": { + "packages/open-scd/node_modules/js-levenshtein-esm": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/js-levenshtein-esm/-/js-levenshtein-esm-1.2.0.tgz", - "integrity": "sha512-fzreKVq1eD7eGcQr7MtRpQH94f8gIfhdrc7yeih38xh684TNMK9v5aAu2wxfIRMk/GpAJRrzcirMAPIaSDaByQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/js-tokens": { + "packages/open-scd/node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/js-yaml": { + "packages/open-scd/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -11136,17 +10218,15 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { + "packages/open-scd/node_modules/jsbn": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/jsesc": { + "packages/open-scd/node_modules/jsesc": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -11154,62 +10234,53 @@ "node": ">=4" } }, - "node_modules/json-buffer": { + "packages/open-scd/node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/json-parse-better-errors": { + "packages/open-scd/node_modules/json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/json-parse-even-better-errors": { + "packages/open-scd/node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/json-schema": { + "packages/open-scd/node_modules/json-schema": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" }, - "node_modules/json-schema-traverse": { + "packages/open-scd/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/json-stable-stringify-without-jsonify": { + "packages/open-scd/node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/json-stringify-nice": { + "packages/open-scd/node_modules/json-stringify-nice": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", - "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", "dev": true, + "license": "ISC", "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/json-stringify-safe": { + "packages/open-scd/node_modules/json-stringify-safe": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/json5": { + "packages/open-scd/node_modules/json5": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -11217,17 +10288,15 @@ "json5": "lib/cli.js" } }, - "node_modules/jsonc-parser": { + "packages/open-scd/node_modules/jsonc-parser": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/jsonfile": { + "packages/open-scd/node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -11235,38 +10304,34 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jsonparse": { + "packages/open-scd/node_modules/jsonparse": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true, "engines": [ "node >= 0.2.0" - ] + ], + "license": "MIT" }, - "node_modules/jsonpointer": { + "packages/open-scd/node_modules/jsonpointer": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/jsonschema": { + "packages/open-scd/node_modules/jsonschema": { "version": "1.2.11", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.11.tgz", - "integrity": "sha512-XNZHs3N1IOa3lPKm//npxMhOdaoPw+MvEV0NIgxcER83GTJcG13rehtWmpBCfEt8DrtYwIkMTs8bdXoYs4fvnQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, - "node_modules/JSONStream": { + "packages/open-scd/node_modules/JSONStream": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, + "license": "(MIT OR Apache-2.0)", "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -11278,11 +10343,10 @@ "node": "*" } }, - "node_modules/jsprim": { + "packages/open-scd/node_modules/jsprim": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -11293,29 +10357,25 @@ "node": ">=0.6.0" } }, - "node_modules/just-diff": { + "packages/open-scd/node_modules/just-diff": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-3.1.1.tgz", - "integrity": "sha512-sdMWKjRq8qWZEjDcVA6llnUT8RDEBIfOiGpYFPYa9u+2c39JCsejktSP7mj5eRid5EIvTzIpQ2kDOCw1Nq9BjQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/just-diff-apply": { + "packages/open-scd/node_modules/just-diff-apply": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-3.1.2.tgz", - "integrity": "sha512-TCa7ZdxCeq6q3Rgms2JCRHTCfWAETPZ8SzYUbkYF6KR3I03sN29DaOIC+xyWboIcMvjAsD5iG2u/RWzHD8XpgQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/just-extend": { + "packages/open-scd/node_modules/just-extend": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", - "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/keygrip": { + "packages/open-scd/node_modules/keygrip": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", - "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", "dev": true, + "license": "MIT", "dependencies": { "tsscmp": "1.0.6" }, @@ -11323,38 +10383,34 @@ "node": ">= 0.6" } }, - "node_modules/keyv": { + "packages/open-scd/node_modules/keyv": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", - "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, - "node_modules/kind-of": { + "packages/open-scd/node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/kleur": { + "packages/open-scd/node_modules/kleur": { "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/koa": { + "packages/open-scd/node_modules/koa": { "version": "2.13.4", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.4.tgz", - "integrity": "sha512-43zkIKubNbnrULWlHdN5h1g3SEKXOEzoAlRsHOTFpnlDu8JlAOZSMJBLULusuXRequboiwJcj5vtYXKB3k7+2g==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "^1.3.5", "cache-content-type": "^1.0.0", @@ -11384,17 +10440,15 @@ "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" } }, - "node_modules/koa-compose": { + "packages/open-scd/node_modules/koa-compose": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/koa-compress": { + "packages/open-scd/node_modules/koa-compress": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/koa-compress/-/koa-compress-3.1.0.tgz", - "integrity": "sha512-0m24/yS/GbhWI+g9FqtvStY+yJwTObwoxOvPok6itVjRen7PBWkjsJ8pre76m+99YybXLKhOJ62mJ268qyBFMQ==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "^3.0.0", "compressible": "^2.0.0", @@ -11405,11 +10459,10 @@ "node": ">= 8.0.0" } }, - "node_modules/koa-convert": { + "packages/open-scd/node_modules/koa-convert": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", - "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", "dev": true, + "license": "MIT", "dependencies": { "co": "^4.6.0", "koa-compose": "^4.1.0" @@ -11418,26 +10471,23 @@ "node": ">= 10" } }, - "node_modules/koa-etag": { + "packages/open-scd/node_modules/koa-etag": { "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, + "license": "MIT", "dependencies": { "etag": "^1.8.1" } }, - "node_modules/koa-is-json": { + "packages/open-scd/node_modules/koa-is-json": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", - "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/koa-send": { + "packages/open-scd/node_modules/koa-send": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", - "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.1", "http-errors": "^1.7.3", @@ -11447,11 +10497,10 @@ "node": ">= 8" } }, - "node_modules/koa-static": { + "packages/open-scd/node_modules/koa-static": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", - "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.1.0", "koa-send": "^5.0.0" @@ -11460,20 +10509,18 @@ "node": ">= 7.6.0" } }, - "node_modules/koa-static/node_modules/debug": { + "packages/open-scd/node_modules/koa-static/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/latest-version": { + "packages/open-scd/node_modules/latest-version": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", "dev": true, + "license": "MIT", "dependencies": { "package-json": "^6.3.0" }, @@ -11481,20 +10528,18 @@ "node": ">=8" } }, - "node_modules/leven": { + "packages/open-scd/node_modules/leven": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/levn": { + "packages/open-scd/node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -11503,42 +10548,37 @@ "node": ">= 0.8.0" } }, - "node_modules/lighthouse-logger": { + "packages/open-scd/node_modules/lighthouse-logger": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", - "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "debug": "^2.6.9", "marky": "^1.2.2" } }, - "node_modules/lighthouse-logger/node_modules/debug": { + "packages/open-scd/node_modules/lighthouse-logger/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, - "node_modules/lighthouse-logger/node_modules/ms": { + "packages/open-scd/node_modules/lighthouse-logger/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/lines-and-columns": { + "packages/open-scd/node_modules/lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/lint-staged": { + "packages/open-scd/node_modules/lint-staged": { "version": "11.2.6", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.2.6.tgz", - "integrity": "sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg==", "dev": true, + "license": "MIT", "dependencies": { "cli-truncate": "2.1.0", "colorette": "^1.4.0", @@ -11562,20 +10602,18 @@ "url": "https://opencollective.com/lint-staged" } }, - "node_modules/lint-staged/node_modules/commander": { + "packages/open-scd/node_modules/lint-staged/node_modules/commander": { "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, + "license": "MIT", "engines": { "node": ">= 12" } }, - "node_modules/lint-staged/node_modules/supports-color": { + "packages/open-scd/node_modules/lint-staged/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11586,11 +10624,10 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/listr2": { + "packages/open-scd/node_modules/listr2": { "version": "3.13.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.13.5.tgz", - "integrity": "sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA==", "dev": true, + "license": "MIT", "dependencies": { "cli-truncate": "^2.1.0", "colorette": "^2.0.16", @@ -11613,53 +10650,46 @@ } } }, - "node_modules/listr2/node_modules/colorette": { + "packages/open-scd/node_modules/listr2/node_modules/colorette": { "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/listr2/node_modules/rxjs": { + "packages/open-scd/node_modules/listr2/node_modules/rxjs": { "version": "7.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", - "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "~2.1.0" } }, - "node_modules/listr2/node_modules/tslib": { + "packages/open-scd/node_modules/listr2/node_modules/tslib": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", - "dev": true + "dev": true, + "license": "0BSD" }, - "node_modules/lit-element": { + "packages/open-scd/node_modules/lit-element": { "version": "2.5.1", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-2.5.1.tgz", - "integrity": "sha512-ogu7PiJTA33bEK0xGu1dmaX5vhcRjBXCFexPja0e7P7jqLhTpNKYRPmE+GmiCaRVAbiQKGkUgkh/i6+bh++dPQ==", + "license": "BSD-3-Clause", "dependencies": { "lit-html": "^1.1.1" } }, - "node_modules/lit-html": { + "packages/open-scd/node_modules/lit-html": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-1.4.1.tgz", - "integrity": "sha512-B9btcSgPYb1q4oSOb/PrOT6Z/H+r6xuNzfH4lFli/AWhYwdtrgQkQWBbIc6mdnf6E2IL3gDXdkkqNktpU0OZQA==" + "license": "BSD-3-Clause" }, - "node_modules/lit-translate": { + "packages/open-scd/node_modules/lit-translate": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/lit-translate/-/lit-translate-1.2.1.tgz", - "integrity": "sha512-jykKpkdRX0lx3JYq9jUMzVs02ISClOe2wxyPHat5wVKPyBRJQxgXxLxj1AbpuLNBCDZKEysMBpeJ1z0Y35Bk2Q==", + "license": "MIT", "dependencies": { "lit-html": "^1.2.1" } }, - "node_modules/load-json-file": { + "packages/open-scd/node_modules/load-json-file": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -11670,11 +10700,10 @@ "node": ">=4" } }, - "node_modules/load-json-file/node_modules/parse-json": { + "packages/open-scd/node_modules/load-json-file/node_modules/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, + "license": "MIT", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -11683,20 +10712,18 @@ "node": ">=4" } }, - "node_modules/load-json-file/node_modules/pify": { + "packages/open-scd/node_modules/load-json-file/node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/loader-utils": { + "packages/open-scd/node_modules/loader-utils": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", "dev": true, + "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -11706,11 +10733,10 @@ "node": ">=4.0.0" } }, - "node_modules/locate-path": { + "packages/open-scd/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -11718,71 +10744,60 @@ "node": ">=8" } }, - "node_modules/lodash": { + "packages/open-scd/node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/lodash.camelcase": { + "packages/open-scd/node_modules/lodash.camelcase": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/lodash.debounce": { + "packages/open-scd/node_modules/lodash.debounce": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/lodash.get": { + "packages/open-scd/node_modules/lodash.get": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/lodash.ismatch": { + "packages/open-scd/node_modules/lodash.ismatch": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/lodash.memoize": { + "packages/open-scd/node_modules/lodash.memoize": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/lodash.merge": { + "packages/open-scd/node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/lodash.sortby": { + "packages/open-scd/node_modules/lodash.sortby": { "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/lodash.truncate": { + "packages/open-scd/node_modules/lodash.truncate": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/lodash.uniq": { + "packages/open-scd/node_modules/lodash.uniq": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/log-symbols": { + "packages/open-scd/node_modules/log-symbols": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^2.0.1" }, @@ -11790,11 +10805,10 @@ "node": ">=4" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { + "packages/open-scd/node_modules/log-symbols/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -11802,11 +10816,10 @@ "node": ">=4" } }, - "node_modules/log-symbols/node_modules/chalk": { + "packages/open-scd/node_modules/log-symbols/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -11816,35 +10829,31 @@ "node": ">=4" } }, - "node_modules/log-symbols/node_modules/color-convert": { + "packages/open-scd/node_modules/log-symbols/node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, - "node_modules/log-symbols/node_modules/color-name": { + "packages/open-scd/node_modules/log-symbols/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/log-symbols/node_modules/has-flag": { + "packages/open-scd/node_modules/log-symbols/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/log-symbols/node_modules/supports-color": { + "packages/open-scd/node_modules/log-symbols/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -11852,11 +10861,10 @@ "node": ">=4" } }, - "node_modules/log-update": { + "packages/open-scd/node_modules/log-update": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", @@ -11870,11 +10878,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/wrap-ansi": { + "packages/open-scd/node_modules/log-update/node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -11884,29 +10891,26 @@ "node": ">=8" } }, - "node_modules/lower-case": { + "packages/open-scd/node_modules/lower-case": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, - "node_modules/lowercase-keys": { + "packages/open-scd/node_modules/lowercase-keys": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/lru-cache": { + "packages/open-scd/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -11914,26 +10918,23 @@ "node": ">=10" } }, - "node_modules/lunr": { + "packages/open-scd/node_modules/lunr": { "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/magic-string": { + "packages/open-scd/node_modules/magic-string": { "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", "dev": true, + "license": "MIT", "dependencies": { "sourcemap-codec": "^1.4.4" } }, - "node_modules/make-dir": { + "packages/open-scd/node_modules/make-dir": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^6.0.0" }, @@ -11944,26 +10945,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/semver": { + "packages/open-scd/node_modules/make-dir/node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/make-error": { + "packages/open-scd/node_modules/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 + "dev": true, + "license": "ISC" }, - "node_modules/make-fetch-happen": { + "packages/open-scd/node_modules/make-fetch-happen": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", "dev": true, + "license": "ISC", "dependencies": { "agentkeepalive": "^4.1.3", "cacache": "^15.2.0", @@ -11986,11 +10984,10 @@ "node": ">= 10" } }, - "node_modules/map-obj": { + "packages/open-scd/node_modules/map-obj": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -11998,10 +10995,9 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/marked": { + "packages/open-scd/node_modules/marked": { "version": "4.0.10", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.10.tgz", - "integrity": "sha512-+QvuFj0nGgO970fySghXGmuw+Fd0gD2x3+MqCWLIPf5oxdv1Ka6b2q+z9RP01P/IaKPMEramy+7cNy/Lw8c3hw==", + "license": "MIT", "bin": { "marked": "bin/marked.js" }, @@ -12009,26 +11005,23 @@ "node": ">= 12" } }, - "node_modules/marky": { + "packages/open-scd/node_modules/marky": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.2.tgz", - "integrity": "sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, - "node_modules/media-typer": { + "packages/open-scd/node_modules/media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/meow": { + "packages/open-scd/node_modules/meow": { "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", @@ -12049,35 +11042,31 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge-stream": { + "packages/open-scd/node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/merge2": { + "packages/open-scd/node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, - "node_modules/meriyah": { + "packages/open-scd/node_modules/meriyah": { "version": "3.1.6", - "resolved": "https://registry.npmjs.org/meriyah/-/meriyah-3.1.6.tgz", - "integrity": "sha512-JDOSi6DIItDc33U5N52UdV6P8v+gn+fqZKfbAfHzdWApRQyQWdcvxPvAr9t01bI2rBxGvSrKRQSCg3SkZC1qeg==", "dev": true, + "license": "ISC", "engines": { "node": ">=10.4.0" } }, - "node_modules/micromatch": { + "packages/open-scd/node_modules/micromatch": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.1", "picomatch": "^2.2.3" @@ -12086,20 +11075,18 @@ "node": ">=8.6" } }, - "node_modules/mime-db": { + "packages/open-scd/node_modules/mime-db": { "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/mime-types": { + "packages/open-scd/node_modules/mime-types": { "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.51.0" }, @@ -12107,38 +11094,34 @@ "node": ">= 0.6" } }, - "node_modules/mimic-fn": { + "packages/open-scd/node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/mimic-response": { + "packages/open-scd/node_modules/mimic-response": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/min-indent": { + "packages/open-scd/node_modules/min-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/minimatch": { + "packages/open-scd/node_modules/minimatch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -12146,17 +11129,15 @@ "node": "*" } }, - "node_modules/minimist": { + "packages/open-scd/node_modules/minimist": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/minimist-options": { + "packages/open-scd/node_modules/minimist-options": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, + "license": "MIT", "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", @@ -12166,11 +11147,10 @@ "node": ">= 6" } }, - "node_modules/minipass": { + "packages/open-scd/node_modules/minipass": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", - "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -12178,11 +11158,10 @@ "node": ">=8" } }, - "node_modules/minipass-collect": { + "packages/open-scd/node_modules/minipass-collect": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -12190,11 +11169,10 @@ "node": ">= 8" } }, - "node_modules/minipass-fetch": { + "packages/open-scd/node_modules/minipass-fetch": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", "dev": true, + "license": "MIT", "dependencies": { "minipass": "^3.1.0", "minipass-sized": "^1.0.3", @@ -12207,11 +11185,10 @@ "encoding": "^0.1.12" } }, - "node_modules/minipass-flush": { + "packages/open-scd/node_modules/minipass-flush": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -12219,21 +11196,19 @@ "node": ">= 8" } }, - "node_modules/minipass-json-stream": { + "packages/open-scd/node_modules/minipass-json-stream": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", "dev": true, + "license": "MIT", "dependencies": { "jsonparse": "^1.3.1", "minipass": "^3.0.0" } }, - "node_modules/minipass-pipeline": { + "packages/open-scd/node_modules/minipass-pipeline": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -12241,11 +11216,10 @@ "node": ">=8" } }, - "node_modules/minipass-sized": { + "packages/open-scd/node_modules/minipass-sized": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -12253,11 +11227,10 @@ "node": ">=8" } }, - "node_modules/minizlib": { + "packages/open-scd/node_modules/minizlib": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, + "license": "MIT", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -12266,11 +11239,10 @@ "node": ">= 8" } }, - "node_modules/mkdirp": { + "packages/open-scd/node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -12278,17 +11250,15 @@ "node": ">=10" } }, - "node_modules/mkdirp-classic": { + "packages/open-scd/node_modules/mkdirp-classic": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/mkdirp-infer-owner": { + "packages/open-scd/node_modules/mkdirp-infer-owner": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", - "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", "dev": true, + "license": "ISC", "dependencies": { "chownr": "^2.0.0", "infer-owner": "^1.0.4", @@ -12298,20 +11268,18 @@ "node": ">=10" } }, - "node_modules/mkdirp-infer-owner/node_modules/chownr": { + "packages/open-scd/node_modules/mkdirp-infer-owner/node_modules/chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, - "node_modules/mocha": { + "packages/open-scd/node_modules/mocha": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", - "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-colors": "3.2.3", "browser-stdout": "1.3.1", @@ -12345,29 +11313,26 @@ "node": ">= 6.0.0" } }, - "node_modules/mocha/node_modules/ansi-colors": { + "packages/open-scd/node_modules/mocha/node_modules/ansi-colors": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/mocha/node_modules/ansi-regex": { + "packages/open-scd/node_modules/mocha/node_modules/ansi-regex": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/mocha/node_modules/ansi-styles": { + "packages/open-scd/node_modules/mocha/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -12375,62 +11340,54 @@ "node": ">=4" } }, - "node_modules/mocha/node_modules/cliui": { + "packages/open-scd/node_modules/mocha/node_modules/cliui": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", "wrap-ansi": "^5.1.0" } }, - "node_modules/mocha/node_modules/color-convert": { + "packages/open-scd/node_modules/mocha/node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, - "node_modules/mocha/node_modules/color-name": { + "packages/open-scd/node_modules/mocha/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/mocha/node_modules/debug": { + "packages/open-scd/node_modules/mocha/node_modules/debug": { "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/mocha/node_modules/diff": { + "packages/open-scd/node_modules/mocha/node_modules/diff": { "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, - "node_modules/mocha/node_modules/emoji-regex": { + "packages/open-scd/node_modules/mocha/node_modules/emoji-regex": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/mocha/node_modules/find-up": { + "packages/open-scd/node_modules/mocha/node_modules/find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^3.0.0" }, @@ -12438,11 +11395,10 @@ "node": ">=6" } }, - "node_modules/mocha/node_modules/glob": { + "packages/open-scd/node_modules/mocha/node_modules/glob": { "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -12455,11 +11411,10 @@ "node": "*" } }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "packages/open-scd/node_modules/mocha/node_modules/glob/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -12467,29 +11422,26 @@ "node": "*" } }, - "node_modules/mocha/node_modules/has-flag": { + "packages/open-scd/node_modules/mocha/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/mocha/node_modules/is-fullwidth-code-point": { + "packages/open-scd/node_modules/mocha/node_modules/is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/mocha/node_modules/js-yaml": { + "packages/open-scd/node_modules/mocha/node_modules/js-yaml": { "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -12498,11 +11450,10 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/mocha/node_modules/locate-path": { + "packages/open-scd/node_modules/mocha/node_modules/locate-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -12511,12 +11462,10 @@ "node": ">=6" } }, - "node_modules/mocha/node_modules/mkdirp": { + "packages/open-scd/node_modules/mocha/node_modules/mkdirp": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.5" }, @@ -12524,17 +11473,15 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mocha/node_modules/ms": { + "packages/open-scd/node_modules/mocha/node_modules/ms": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/mocha/node_modules/object.assign": { + "packages/open-scd/node_modules/mocha/node_modules/object.assign": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.1.2", "function-bind": "^1.1.1", @@ -12545,11 +11492,10 @@ "node": ">= 0.4" } }, - "node_modules/mocha/node_modules/p-locate": { + "packages/open-scd/node_modules/mocha/node_modules/p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.0.0" }, @@ -12557,20 +11503,18 @@ "node": ">=6" } }, - "node_modules/mocha/node_modules/path-exists": { + "packages/open-scd/node_modules/mocha/node_modules/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, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/mocha/node_modules/string-width": { + "packages/open-scd/node_modules/mocha/node_modules/string-width": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -12580,11 +11524,10 @@ "node": ">=6" } }, - "node_modules/mocha/node_modules/strip-ansi": { + "packages/open-scd/node_modules/mocha/node_modules/strip-ansi": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" }, @@ -12592,20 +11535,18 @@ "node": ">=6" } }, - "node_modules/mocha/node_modules/strip-json-comments": { + "packages/open-scd/node_modules/mocha/node_modules/strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/mocha/node_modules/supports-color": { + "packages/open-scd/node_modules/mocha/node_modules/supports-color": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -12613,11 +11554,10 @@ "node": ">=6" } }, - "node_modules/mocha/node_modules/which": { + "packages/open-scd/node_modules/mocha/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -12625,11 +11565,10 @@ "which": "bin/which" } }, - "node_modules/mocha/node_modules/wrap-ansi": { + "packages/open-scd/node_modules/mocha/node_modules/wrap-ansi": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", @@ -12639,17 +11578,15 @@ "node": ">=6" } }, - "node_modules/mocha/node_modules/y18n": { + "packages/open-scd/node_modules/mocha/node_modules/y18n": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/mocha/node_modules/yargs": { + "packages/open-scd/node_modules/mocha/node_modules/yargs": { "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^5.0.0", "find-up": "^3.0.0", @@ -12663,59 +11600,52 @@ "yargs-parser": "^13.1.2" } }, - "node_modules/mocha/node_modules/yargs-parser": { + "packages/open-scd/node_modules/mocha/node_modules/yargs-parser": { "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, - "node_modules/modify-values": { + "packages/open-scd/node_modules/modify-values": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/ms": { + "packages/open-scd/node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/mute-stream": { + "packages/open-scd/node_modules/mute-stream": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/mz": { + "packages/open-scd/node_modules/mz": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dev": true, + "license": "MIT", "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, - "node_modules/nanocolors": { + "packages/open-scd/node_modules/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 + "dev": true, + "license": "MIT" }, - "node_modules/nanoid": { + "packages/open-scd/node_modules/nanoid": { "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", "dev": true, + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -12723,37 +11653,32 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/natural-compare": { + "packages/open-scd/node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/negotiator": { + "packages/open-scd/node_modules/negotiator": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/neo-async": { + "packages/open-scd/node_modules/neo-async": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/ngraph.events": { + "packages/open-scd/node_modules/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==" + "license": "BSD-3-Clause" }, - "node_modules/nise": { + "packages/open-scd/node_modules/nise": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.0.tgz", - "integrity": "sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^1.7.0", "@sinonjs/fake-timers": "^7.0.4", @@ -12762,40 +11687,36 @@ "path-to-regexp": "^1.7.0" } }, - "node_modules/no-case": { + "packages/open-scd/node_modules/no-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, + "license": "MIT", "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, - "node_modules/node-environment-flags": { + "packages/open-scd/node_modules/node-environment-flags": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "object.getownpropertydescriptors": "^2.0.3", "semver": "^5.7.0" } }, - "node_modules/node-environment-flags/node_modules/semver": { + "packages/open-scd/node_modules/node-environment-flags/node_modules/semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, - "node_modules/node-fetch": { + "packages/open-scd/node_modules/node-fetch": { "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -12811,33 +11732,29 @@ } } }, - "node_modules/node-fetch/node_modules/tr46": { + "packages/open-scd/node_modules/node-fetch/node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/node-fetch/node_modules/webidl-conversions": { + "packages/open-scd/node_modules/node-fetch/node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, - "node_modules/node-fetch/node_modules/whatwg-url": { + "packages/open-scd/node_modules/node-fetch/node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", "dev": true, + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, - "node_modules/node-gyp": { + "packages/open-scd/node_modules/node-gyp": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", "dev": true, + "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", @@ -12857,28 +11774,25 @@ "node": ">= 10.12.0" } }, - "node_modules/node-gyp-build": { + "packages/open-scd/node_modules/node-gyp-build": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", "dev": true, + "license": "MIT", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, - "node_modules/node-releases": { + "packages/open-scd/node_modules/node-releases": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/nopt": { + "packages/open-scd/node_modules/nopt": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, + "license": "ISC", "dependencies": { "abbrev": "1" }, @@ -12889,11 +11803,10 @@ "node": ">=6" } }, - "node_modules/normalize-package-data": { + "packages/open-scd/node_modules/normalize-package-data": { "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, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -12904,20 +11817,18 @@ "node": ">=10" } }, - "node_modules/normalize-path": { + "packages/open-scd/node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/normalize-url": { + "packages/open-scd/node_modules/normalize-url": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -12925,20 +11836,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-bundled": { + "packages/open-scd/node_modules/npm-bundled": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", "dev": true, + "license": "ISC", "dependencies": { "npm-normalize-package-bin": "^1.0.1" } }, - "node_modules/npm-install-checks": { + "packages/open-scd/node_modules/npm-install-checks": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, @@ -12946,17 +11855,15 @@ "node": ">=10" } }, - "node_modules/npm-normalize-package-bin": { + "packages/open-scd/node_modules/npm-normalize-package-bin": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/npm-package-arg": { + "packages/open-scd/node_modules/npm-package-arg": { "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", "dev": true, + "license": "ISC", "dependencies": { "hosted-git-info": "^4.0.1", "semver": "^7.3.4", @@ -12966,11 +11873,10 @@ "node": ">=10" } }, - "node_modules/npm-packlist": { + "packages/open-scd/node_modules/npm-packlist": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", - "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.6", "ignore-walk": "^3.0.3", @@ -12984,11 +11890,10 @@ "node": ">=10" } }, - "node_modules/npm-pick-manifest": { + "packages/open-scd/node_modules/npm-pick-manifest": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", - "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", "dev": true, + "license": "ISC", "dependencies": { "npm-install-checks": "^4.0.0", "npm-normalize-package-bin": "^1.0.1", @@ -12996,11 +11901,10 @@ "semver": "^7.3.4" } }, - "node_modules/npm-registry-fetch": { + "packages/open-scd/node_modules/npm-registry-fetch": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", "dev": true, + "license": "ISC", "dependencies": { "make-fetch-happen": "^9.0.1", "minipass": "^3.1.3", @@ -13013,11 +11917,10 @@ "node": ">=10" } }, - "node_modules/npm-run-path": { + "packages/open-scd/node_modules/npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -13025,11 +11928,10 @@ "node": ">=8" } }, - "node_modules/npmlog": { + "packages/open-scd/node_modules/npmlog": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, + "license": "ISC", "dependencies": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -13037,11 +11939,10 @@ "set-blocking": "~2.0.0" } }, - "node_modules/nth-check": { + "packages/open-scd/node_modules/nth-check": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -13049,65 +11950,58 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/null-check": { + "packages/open-scd/node_modules/null-check": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/number-is-nan": { + "packages/open-scd/node_modules/number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/oauth-sign": { + "packages/open-scd/node_modules/oauth-sign": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "*" } }, - "node_modules/object-assign": { + "packages/open-scd/node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/object-inspect": { + "packages/open-scd/node_modules/object-inspect": { "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-keys": { + "packages/open-scd/node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, - "node_modules/object.assign": { + "packages/open-scd/node_modules/object.assign": { "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -13121,11 +12015,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.entries": { + "packages/open-scd/node_modules/object.entries": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -13135,11 +12028,10 @@ "node": ">= 0.4" } }, - "node_modules/object.getownpropertydescriptors": { + "packages/open-scd/node_modules/object.getownpropertydescriptors": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", - "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -13152,11 +12044,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.values": { + "packages/open-scd/node_modules/object.values": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -13169,11 +12060,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/on-finished": { + "packages/open-scd/node_modules/on-finished": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "dev": true, + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -13181,20 +12071,18 @@ "node": ">= 0.8" } }, - "node_modules/once": { + "packages/open-scd/node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } }, - "node_modules/onetime": { + "packages/open-scd/node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -13205,17 +12093,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/only": { + "packages/open-scd/node_modules/only": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=", "dev": true }, - "node_modules/open": { + "packages/open-scd/node_modules/open": { "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dev": true, + "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -13228,11 +12113,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/optionator": { + "packages/open-scd/node_modules/optionator": { "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -13245,11 +12129,10 @@ "node": ">= 0.8.0" } }, - "node_modules/ora": { + "packages/open-scd/node_modules/ora": { "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -13268,11 +12151,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/log-symbols": { + "packages/open-scd/node_modules/ora/node_modules/log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -13284,47 +12166,42 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/os-homedir": { + "packages/open-scd/node_modules/os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/os-tmpdir": { + "packages/open-scd/node_modules/os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/p-cancelable": { + "packages/open-scd/node_modules/p-cancelable": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/p-finally": { + "packages/open-scd/node_modules/p-finally": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/p-limit": { + "packages/open-scd/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -13335,11 +12212,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate": { + "packages/open-scd/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -13347,11 +12223,10 @@ "node": ">=8" } }, - "node_modules/p-map": { + "packages/open-scd/node_modules/p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, + "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -13362,11 +12237,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-queue": { + "packages/open-scd/node_modules/p-queue": { "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", "dev": true, + "license": "MIT", "dependencies": { "eventemitter3": "^4.0.4", "p-timeout": "^3.2.0" @@ -13378,11 +12252,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-timeout": { + "packages/open-scd/node_modules/p-timeout": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, + "license": "MIT", "dependencies": { "p-finally": "^1.0.0" }, @@ -13390,20 +12263,18 @@ "node": ">=8" } }, - "node_modules/p-try": { + "packages/open-scd/node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/package-json": { + "packages/open-scd/node_modules/package-json": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "dev": true, + "license": "MIT", "dependencies": { "got": "^9.6.0", "registry-auth-token": "^4.0.0", @@ -13414,20 +12285,18 @@ "node": ">=8" } }, - "node_modules/package-json/node_modules/@sindresorhus/is": { + "packages/open-scd/node_modules/package-json/node_modules/@sindresorhus/is": { "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/package-json/node_modules/@szmarczak/http-timer": { + "packages/open-scd/node_modules/package-json/node_modules/@szmarczak/http-timer": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", "dev": true, + "license": "MIT", "dependencies": { "defer-to-connect": "^1.0.1" }, @@ -13435,11 +12304,10 @@ "node": ">=6" } }, - "node_modules/package-json/node_modules/cacheable-request": { + "packages/open-scd/node_modules/package-json/node_modules/cacheable-request": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", "dev": true, + "license": "MIT", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -13453,11 +12321,10 @@ "node": ">=8" } }, - "node_modules/package-json/node_modules/cacheable-request/node_modules/get-stream": { + "packages/open-scd/node_modules/package-json/node_modules/cacheable-request/node_modules/get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -13468,20 +12335,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/package-json/node_modules/cacheable-request/node_modules/lowercase-keys": { + "packages/open-scd/node_modules/package-json/node_modules/cacheable-request/node_modules/lowercase-keys": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/package-json/node_modules/decompress-response": { + "packages/open-scd/node_modules/package-json/node_modules/decompress-response": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" }, @@ -13489,17 +12354,15 @@ "node": ">=4" } }, - "node_modules/package-json/node_modules/defer-to-connect": { + "packages/open-scd/node_modules/package-json/node_modules/defer-to-connect": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/package-json/node_modules/get-stream": { + "packages/open-scd/node_modules/package-json/node_modules/get-stream": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -13507,11 +12370,10 @@ "node": ">=6" } }, - "node_modules/package-json/node_modules/got": { + "packages/open-scd/node_modules/package-json/node_modules/got": { "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/is": "^0.14.0", "@szmarczak/http-timer": "^1.1.2", @@ -13529,71 +12391,63 @@ "node": ">=8.6" } }, - "node_modules/package-json/node_modules/json-buffer": { + "packages/open-scd/node_modules/package-json/node_modules/json-buffer": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/package-json/node_modules/keyv": { + "packages/open-scd/node_modules/package-json/node_modules/keyv": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.0" } }, - "node_modules/package-json/node_modules/lowercase-keys": { + "packages/open-scd/node_modules/package-json/node_modules/lowercase-keys": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/package-json/node_modules/normalize-url": { + "packages/open-scd/node_modules/package-json/node_modules/normalize-url": { "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/package-json/node_modules/p-cancelable": { + "packages/open-scd/node_modules/package-json/node_modules/p-cancelable": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/package-json/node_modules/responselike": { + "packages/open-scd/node_modules/package-json/node_modules/responselike": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", "dev": true, + "license": "MIT", "dependencies": { "lowercase-keys": "^1.0.0" } }, - "node_modules/package-json/node_modules/semver": { + "packages/open-scd/node_modules/package-json/node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/pacote": { + "packages/open-scd/node_modules/pacote": { "version": "11.3.5", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", - "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/git": "^2.1.0", "@npmcli/installed-package-contents": "^1.0.6", @@ -13622,40 +12476,36 @@ "node": ">=10" } }, - "node_modules/pacote/node_modules/chownr": { + "packages/open-scd/node_modules/pacote/node_modules/chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, - "node_modules/panzoom": { + "packages/open-scd/node_modules/panzoom": { "version": "9.4.2", - "resolved": "https://registry.npmjs.org/panzoom/-/panzoom-9.4.2.tgz", - "integrity": "sha512-sQLr0t6EmNFXpZHag0HQVtOKqF9xjF7iZdgWg3Ss1o7uh2QZLvcrz7S0Cl8M0d2TkPZ69JfPJdknXN3I0e/2aQ==", + "license": "MIT", "dependencies": { "amator": "^1.1.0", "ngraph.events": "^1.2.1", "wheel": "^1.0.0" } }, - "node_modules/param-case": { + "packages/open-scd/node_modules/param-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, + "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, - "node_modules/parent-module": { + "packages/open-scd/node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -13663,22 +12513,20 @@ "node": ">=6" } }, - "node_modules/parse-conflict-json": { + "packages/open-scd/node_modules/parse-conflict-json": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-1.1.1.tgz", - "integrity": "sha512-4gySviBiW5TRl7XHvp1agcS7SOe0KZOjC//71dzZVWJrY9hCrgtvl5v3SyIxCZ4fZF47TxD9nfzmxcx76xmbUw==", "dev": true, + "license": "ISC", "dependencies": { "json-parse-even-better-errors": "^2.3.0", "just-diff": "^3.0.1", "just-diff-apply": "^3.0.0" } }, - "node_modules/parse-json": { + "packages/open-scd/node_modules/parse-json": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -13692,145 +12540,127 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse5": { + "packages/open-scd/node_modules/parse5": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/parse5-htmlparser2-tree-adapter": { + "packages/open-scd/node_modules/parse5-htmlparser2-tree-adapter": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, + "license": "MIT", "dependencies": { "parse5": "^6.0.1" } }, - "node_modules/parseurl": { + "packages/open-scd/node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/pascal-case": { + "packages/open-scd/node_modules/pascal-case": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, - "node_modules/path-exists": { + "packages/open-scd/node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/path-is-absolute": { + "packages/open-scd/node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/path-is-inside": { + "packages/open-scd/node_modules/path-is-inside": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true + "dev": true, + "license": "(WTFPL OR MIT)" }, - "node_modules/path-key": { + "packages/open-scd/node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/path-parse": { + "packages/open-scd/node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/path-to-regexp": { + "packages/open-scd/node_modules/path-to-regexp": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dev": true, + "license": "MIT", "dependencies": { "isarray": "0.0.1" } }, - "node_modules/path-type": { + "packages/open-scd/node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/pathval": { + "packages/open-scd/node_modules/pathval": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, - "node_modules/pend": { + "packages/open-scd/node_modules/pend": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/performance-now": { + "packages/open-scd/node_modules/performance-now": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/periscopic": { + "packages/open-scd/node_modules/periscopic": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-2.0.3.tgz", - "integrity": "sha512-FuCZe61mWxQOJAQFEfmt9FjzebRlcpFz8sFPbyaCKtdusPkMEbA9ey0eARnRav5zAhmXznhaQkKGFAPn7X9NUw==", "dev": true, + "license": "MIT", "dependencies": { "estree-walker": "^2.0.2", "is-reference": "^1.1.4" } }, - "node_modules/periscopic/node_modules/estree-walker": { + "packages/open-scd/node_modules/periscopic/node_modules/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 + "dev": true, + "license": "MIT" }, - "node_modules/picocolors": { + "packages/open-scd/node_modules/picocolors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/picomatch": { + "packages/open-scd/node_modules/picomatch": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -13838,20 +12668,18 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { + "packages/open-scd/node_modules/pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/pkg-dir": { + "packages/open-scd/node_modules/pkg-dir": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^2.1.0" }, @@ -13859,11 +12687,10 @@ "node": ">=4" } }, - "node_modules/pkg-dir/node_modules/find-up": { + "packages/open-scd/node_modules/pkg-dir/node_modules/find-up": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^2.0.0" }, @@ -13871,11 +12698,10 @@ "node": ">=4" } }, - "node_modules/pkg-dir/node_modules/locate-path": { + "packages/open-scd/node_modules/pkg-dir/node_modules/locate-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -13884,11 +12710,10 @@ "node": ">=4" } }, - "node_modules/pkg-dir/node_modules/p-limit": { + "packages/open-scd/node_modules/pkg-dir/node_modules/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, + "license": "MIT", "dependencies": { "p-try": "^1.0.0" }, @@ -13896,11 +12721,10 @@ "node": ">=4" } }, - "node_modules/pkg-dir/node_modules/p-locate": { + "packages/open-scd/node_modules/pkg-dir/node_modules/p-locate": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^1.1.0" }, @@ -13908,38 +12732,34 @@ "node": ">=4" } }, - "node_modules/pkg-dir/node_modules/p-try": { + "packages/open-scd/node_modules/pkg-dir/node_modules/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, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/pkg-dir/node_modules/path-exists": { + "packages/open-scd/node_modules/pkg-dir/node_modules/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, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/please-upgrade-node": { + "packages/open-scd/node_modules/please-upgrade-node": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", "dev": true, + "license": "MIT", "dependencies": { "semver-compare": "^1.0.0" } }, - "node_modules/polyfills-loader": { + "packages/open-scd/node_modules/polyfills-loader": { "version": "1.7.6", - "resolved": "https://registry.npmjs.org/polyfills-loader/-/polyfills-loader-1.7.6.tgz", - "integrity": "sha512-AiLIgmGFmzcvsqewyKsqWb7H8CnWNTSQBoM0u+Mauzmp0DsjObXmnZdeqvTn0HNwc1wYHHTOta82WjSjG341eQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.1", "@open-wc/building-utils": "^2.18.3", @@ -13961,17 +12781,15 @@ "node": ">=0.10.0" } }, - "node_modules/polyfills-loader/node_modules/parse5": { + "packages/open-scd/node_modules/polyfills-loader/node_modules/parse5": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/portfinder": { + "packages/open-scd/node_modules/portfinder": { "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, + "license": "MIT", "dependencies": { "async": "^2.6.2", "debug": "^3.1.1", @@ -13981,20 +12799,18 @@ "node": ">= 0.12.0" } }, - "node_modules/portfinder/node_modules/debug": { + "packages/open-scd/node_modules/portfinder/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/portfinder/node_modules/mkdirp": { + "packages/open-scd/node_modules/portfinder/node_modules/mkdirp": { "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.5" }, @@ -14002,11 +12818,10 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/postcss": { + "packages/open-scd/node_modules/postcss": { "version": "8.4.4", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.4.tgz", - "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==", "dev": true, + "license": "MIT", "dependencies": { "nanoid": "^3.1.30", "picocolors": "^1.0.0", @@ -14020,11 +12835,10 @@ "url": "https://opencollective.com/postcss/" } }, - "node_modules/postcss-modules": { + "packages/open-scd/node_modules/postcss-modules": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.2.2.tgz", - "integrity": "sha512-/H08MGEmaalv/OU8j6bUKi/kZr2kqGF6huAW8m9UAgOLWtpFdhA14+gPBoymtqyv+D4MLsmqaF2zvIegdCxJXg==", "dev": true, + "license": "MIT", "dependencies": { "generic-names": "^2.0.1", "icss-replace-symbols": "^1.1.0", @@ -14039,11 +12853,10 @@ "postcss": "^8.0.0" } }, - "node_modules/postcss-modules-extract-imports": { + "packages/open-scd/node_modules/postcss-modules-extract-imports": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, + "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -14051,11 +12864,10 @@ "postcss": "^8.1.0" } }, - "node_modules/postcss-modules-local-by-default": { + "packages/open-scd/node_modules/postcss-modules-local-by-default": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, + "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -14068,11 +12880,10 @@ "postcss": "^8.1.0" } }, - "node_modules/postcss-modules-scope": { + "packages/open-scd/node_modules/postcss-modules-scope": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, + "license": "ISC", "dependencies": { "postcss-selector-parser": "^6.0.4" }, @@ -14083,11 +12894,10 @@ "postcss": "^8.1.0" } }, - "node_modules/postcss-modules-values": { + "packages/open-scd/node_modules/postcss-modules-values": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, + "license": "ISC", "dependencies": { "icss-utils": "^5.0.0" }, @@ -14098,11 +12908,10 @@ "postcss": "^8.1.0" } }, - "node_modules/postcss-selector-parser": { + "packages/open-scd/node_modules/postcss-selector-parser": { "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -14111,35 +12920,31 @@ "node": ">=4" } }, - "node_modules/postcss-value-parser": { + "packages/open-scd/node_modules/postcss-value-parser": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/prelude-ls": { + "packages/open-scd/node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, - "node_modules/prepend-http": { + "packages/open-scd/node_modules/prepend-http": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/prettier": { + "packages/open-scd/node_modules/prettier": { "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin-prettier.js" }, @@ -14147,11 +12952,10 @@ "node": ">=10.13.0" } }, - "node_modules/pretty-bytes": { + "packages/open-scd/node_modules/pretty-bytes": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -14159,56 +12963,49 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/proc-log": { + "packages/open-scd/node_modules/proc-log": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz", - "integrity": "sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/process-nextick-args": { + "packages/open-scd/node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/progress": { + "packages/open-scd/node_modules/progress": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, - "node_modules/promise-all-reject-late": { + "packages/open-scd/node_modules/promise-all-reject-late": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", "dev": true, + "license": "ISC", "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/promise-call-limit": { + "packages/open-scd/node_modules/promise-call-limit": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz", - "integrity": "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==", "dev": true, + "license": "ISC", "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/promise-inflight": { + "packages/open-scd/node_modules/promise-inflight": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/promise-retry": { + "packages/open-scd/node_modules/promise-retry": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, + "license": "MIT", "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -14217,48 +13014,42 @@ "node": ">=10" } }, - "node_modules/proxy-from-env": { + "packages/open-scd/node_modules/proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/pseudomap": { + "packages/open-scd/node_modules/pseudomap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/psl": { + "packages/open-scd/node_modules/psl": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/pump": { + "packages/open-scd/node_modules/pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, - "node_modules/punycode": { + "packages/open-scd/node_modules/punycode": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/pupa": { + "packages/open-scd/node_modules/pupa": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", "dev": true, + "license": "MIT", "dependencies": { "escape-goat": "^2.0.0" }, @@ -14266,11 +13057,10 @@ "node": ">=8" } }, - "node_modules/puppeteer-core": { + "packages/open-scd/node_modules/puppeteer-core": { "version": "13.7.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-13.7.0.tgz", - "integrity": "sha512-rXja4vcnAzFAP1OVLq/5dWNfwBGuzcOARJ6qGV7oAZhnLmVRU8G5MsdeQEAOy332ZhkIOnn9jp15R89LKHyp2Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { "cross-fetch": "3.1.5", "debug": "4.3.4", @@ -14289,11 +13079,10 @@ "node": ">=10.18.1" } }, - "node_modules/puppeteer-core/node_modules/pkg-dir": { + "packages/open-scd/node_modules/puppeteer-core/node_modules/pkg-dir": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -14301,11 +13090,10 @@ "node": ">=8" } }, - "node_modules/puppeteer-core/node_modules/ws": { + "packages/open-scd/node_modules/puppeteer-core/node_modules/ws": { "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -14322,31 +13110,28 @@ } } }, - "node_modules/pure-rand": { + "packages/open-scd/node_modules/pure-rand": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.0.tgz", - "integrity": "sha512-lD2/y78q+7HqBx2SaT6OT4UcwtvXNRfEpzYEzl0EQ+9gZq2Qi3fa0HDnYPeqQwhlHJFBUhT7AO3mLU3+8bynHA==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/fast-check" } }, - "node_modules/q": { + "packages/open-scd/node_modules/q": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" } }, - "node_modules/qs": { + "packages/open-scd/node_modules/qs": { "version": "6.11.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", - "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -14357,10 +13142,8 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/queue-microtask": { + "packages/open-scd/node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -14375,31 +13158,29 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, - "node_modules/quick-lru": { + "packages/open-scd/node_modules/quick-lru": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/randombytes": { + "packages/open-scd/node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } }, - "node_modules/raw-body": { + "packages/open-scd/node_modules/raw-body": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", - "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.1", "http-errors": "1.8.1", @@ -14410,11 +13191,10 @@ "node": ">= 0.8" } }, - "node_modules/rc": { + "packages/open-scd/node_modules/rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -14425,26 +13205,23 @@ "rc": "cli.js" } }, - "node_modules/rc/node_modules/strip-json-comments": { + "packages/open-scd/node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/read-cmd-shim": { + "packages/open-scd/node_modules/read-cmd-shim": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", - "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/read-package-json-fast": { + "packages/open-scd/node_modules/read-package-json-fast": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", "dev": true, + "license": "ISC", "dependencies": { "json-parse-even-better-errors": "^2.3.0", "npm-normalize-package-bin": "^1.0.1" @@ -14453,11 +13230,10 @@ "node": ">=10" } }, - "node_modules/read-pkg": { + "packages/open-scd/node_modules/read-pkg": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -14468,11 +13244,10 @@ "node": ">=8" } }, - "node_modules/read-pkg-up": { + "packages/open-scd/node_modules/read-pkg-up": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -14485,26 +13260,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg-up/node_modules/type-fest": { + "packages/open-scd/node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, - "node_modules/read-pkg/node_modules/hosted-git-info": { + "packages/open-scd/node_modules/read-pkg/node_modules/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 + "dev": true, + "license": "ISC" }, - "node_modules/read-pkg/node_modules/normalize-package-data": { + "packages/open-scd/node_modules/read-pkg/node_modules/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, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -14512,29 +13284,26 @@ "validate-npm-package-license": "^3.0.1" } }, - "node_modules/read-pkg/node_modules/semver": { + "packages/open-scd/node_modules/read-pkg/node_modules/semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, - "node_modules/read-pkg/node_modules/type-fest": { + "packages/open-scd/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, - "node_modules/readable-stream": { + "packages/open-scd/node_modules/readable-stream": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -14544,11 +13313,10 @@ "node": ">= 6" } }, - "node_modules/readdir-scoped-modules": { + "packages/open-scd/node_modules/readdir-scoped-modules": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", "dev": true, + "license": "ISC", "dependencies": { "debuglog": "^1.0.1", "dezalgo": "^1.0.0", @@ -14556,11 +13324,10 @@ "once": "^1.3.0" } }, - "node_modules/readdirp": { + "packages/open-scd/node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -14568,11 +13335,10 @@ "node": ">=8.10.0" } }, - "node_modules/redent": { + "packages/open-scd/node_modules/redent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, + "license": "MIT", "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -14581,26 +13347,23 @@ "node": ">=8" } }, - "node_modules/reduce-flatten": { + "packages/open-scd/node_modules/reduce-flatten": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/regenerate": { + "packages/open-scd/node_modules/regenerate": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/regenerate-unicode-properties": { + "packages/open-scd/node_modules/regenerate-unicode-properties": { "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, + "license": "MIT", "dependencies": { "regenerate": "^1.4.2" }, @@ -14608,26 +13371,23 @@ "node": ">=4" } }, - "node_modules/regenerator-runtime": { + "packages/open-scd/node_modules/regenerator-runtime": { "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/regenerator-transform": { + "packages/open-scd/node_modules/regenerator-transform": { "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.4" } }, - "node_modules/regexp.prototype.flags": { + "packages/open-scd/node_modules/regexp.prototype.flags": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -14640,11 +13400,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { + "packages/open-scd/node_modules/regexpp": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -14652,11 +13411,10 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/regexpu-core": { + "packages/open-scd/node_modules/regexpu-core": { "version": "4.8.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", - "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", "dev": true, + "license": "MIT", "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^9.0.0", @@ -14669,11 +13427,10 @@ "node": ">=4" } }, - "node_modules/registry-auth-token": { + "packages/open-scd/node_modules/registry-auth-token": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", "dev": true, + "license": "MIT", "dependencies": { "rc": "^1.2.8" }, @@ -14681,11 +13438,10 @@ "node": ">=6.0.0" } }, - "node_modules/registry-url": { + "packages/open-scd/node_modules/registry-url": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "dev": true, + "license": "MIT", "dependencies": { "rc": "^1.2.8" }, @@ -14693,17 +13449,15 @@ "node": ">=8" } }, - "node_modules/regjsgen": { + "packages/open-scd/node_modules/regjsgen": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/regjsparser": { + "packages/open-scd/node_modules/regjsparser": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", - "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "jsesc": "~0.5.0" }, @@ -14711,30 +13465,25 @@ "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/node_modules/jsesc": { + "packages/open-scd/node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true, "bin": { "jsesc": "bin/jsesc" } }, - "node_modules/relateurl": { + "packages/open-scd/node_modules/relateurl": { "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } }, - "node_modules/request": { + "packages/open-scd/node_modules/request": { "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", "dev": true, + "license": "Apache-2.0", "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -14761,59 +13510,52 @@ "node": ">= 6" } }, - "node_modules/request/node_modules/qs": { + "packages/open-scd/node_modules/request/node_modules/qs": { "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.6" } }, - "node_modules/require-directory": { + "packages/open-scd/node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/require-from-string": { + "packages/open-scd/node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { + "packages/open-scd/node_modules/require-main-filename": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/requireindex": { + "packages/open-scd/node_modules/requireindex": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.5" } }, - "node_modules/resize-observer-polyfill": { + "packages/open-scd/node_modules/resize-observer-polyfill": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/resolve": { + "packages/open-scd/node_modules/resolve": { "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" @@ -14822,26 +13564,23 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-alpn": { + "packages/open-scd/node_modules/resolve-alpn": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/resolve-from": { + "packages/open-scd/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/resolve-global": { + "packages/open-scd/node_modules/resolve-global": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", - "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", "dev": true, + "license": "MIT", "dependencies": { "global-dirs": "^0.1.1" }, @@ -14849,11 +13588,10 @@ "node": ">=8" } }, - "node_modules/resolve-path": { + "packages/open-scd/node_modules/resolve-path": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", - "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", "dev": true, + "license": "MIT", "dependencies": { "http-errors": "~1.6.2", "path-is-absolute": "1.0.1" @@ -14862,20 +13600,18 @@ "node": ">= 0.8" } }, - "node_modules/resolve-path/node_modules/depd": { + "packages/open-scd/node_modules/resolve-path/node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/resolve-path/node_modules/http-errors": { + "packages/open-scd/node_modules/resolve-path/node_modules/http-errors": { "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -14886,32 +13622,28 @@ "node": ">= 0.6" } }, - "node_modules/resolve-path/node_modules/inherits": { + "packages/open-scd/node_modules/resolve-path/node_modules/inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/resolve-path/node_modules/setprototypeof": { + "packages/open-scd/node_modules/resolve-path/node_modules/setprototypeof": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/responselike": { + "packages/open-scd/node_modules/responselike": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", "dev": true, + "license": "MIT", "dependencies": { "lowercase-keys": "^2.0.0" } }, - "node_modules/restore-cursor": { + "packages/open-scd/node_modules/restore-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -14920,36 +13652,32 @@ "node": ">=8" } }, - "node_modules/retry": { + "packages/open-scd/node_modules/retry": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, - "node_modules/reusify": { + "packages/open-scd/node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/rfdc": { + "packages/open-scd/node_modules/rfdc": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/rimraf": { + "packages/open-scd/node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -14960,11 +13688,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rollup": { + "packages/open-scd/node_modules/rollup": { "version": "2.60.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.60.2.tgz", - "integrity": "sha512-1Bgjpq61sPjgoZzuiDSGvbI1tD91giZABgjCQBKM5aYLnzjq52GoDuWVwT/cm/MCxCMPU8gqQvkj8doQ5C8Oqw==", "dev": true, + "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -14975,21 +13702,18 @@ "fsevents": "~2.3.2" } }, - "node_modules/rollup-plugin-polyfill-node": { + "packages/open-scd/node_modules/rollup-plugin-polyfill-node": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.6.2.tgz", - "integrity": "sha512-gMCVuR0zsKq0jdBn8pSXN1Ejsc458k2QsFFvQdbHoM0Pot5hEnck+pBP/FDwFS6uAi77pD3rDTytsaUStsOMlA==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/plugin-inject": "^4.0.0" } }, - "node_modules/rollup-plugin-terser": { + "packages/open-scd/node_modules/rollup-plugin-terser": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.10.4", "jest-worker": "^26.2.1", @@ -15000,11 +13724,10 @@ "rollup": "^2.0.0" } }, - "node_modules/rollup-plugin-terser/node_modules/acorn": { + "packages/open-scd/node_modules/rollup-plugin-terser/node_modules/acorn": { "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -15012,17 +13735,15 @@ "node": ">=0.4.0" } }, - "node_modules/rollup-plugin-terser/node_modules/commander": { + "packages/open-scd/node_modules/rollup-plugin-terser/node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/rollup-plugin-terser/node_modules/terser": { + "packages/open-scd/node_modules/rollup-plugin-terser/node_modules/terser": { "version": "5.16.5", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.5.tgz", - "integrity": "sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -15036,19 +13757,16 @@ "node": ">=10" } }, - "node_modules/run-async": { + "packages/open-scd/node_modules/run-async": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, - "node_modules/run-parallel": { + "packages/open-scd/node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -15064,15 +13782,15 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, - "node_modules/rxjs": { + "packages/open-scd/node_modules/rxjs": { "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -15080,16 +13798,13 @@ "npm": ">=2.0.0" } }, - "node_modules/rxjs/node_modules/tslib": { + "packages/open-scd/node_modules/rxjs/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, - "node_modules/safe-buffer": { + "packages/open-scd/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -15104,13 +13819,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, - "node_modules/safe-regex-test": { + "packages/open-scd/node_modules/safe-regex-test": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -15120,17 +13835,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safer-buffer": { + "packages/open-scd/node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/semver": { + "packages/open-scd/node_modules/semver": { "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -15141,17 +13854,15 @@ "node": ">=10" } }, - "node_modules/semver-compare": { + "packages/open-scd/node_modules/semver-compare": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/semver-diff": { + "packages/open-scd/node_modules/semver-diff": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^6.3.0" }, @@ -15159,47 +13870,41 @@ "node": ">=8" } }, - "node_modules/semver-diff/node_modules/semver": { + "packages/open-scd/node_modules/semver-diff/node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/serialize-javascript": { + "packages/open-scd/node_modules/serialize-javascript": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, - "node_modules/set-blocking": { + "packages/open-scd/node_modules/set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/setprototypeof": { + "packages/open-scd/node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/shady-css-scoped-element": { + "packages/open-scd/node_modules/shady-css-scoped-element": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/shady-css-scoped-element/-/shady-css-scoped-element-0.0.2.tgz", - "integrity": "sha512-Dqfl70x6JiwYDujd33ZTbtCK0t52E7+H2swdWQNSTzfsolSa6LJHnTpN4T9OpJJEq4bxuzHRLFO9RBcy/UfrMQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/shebang-command": { + "packages/open-scd/node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -15207,31 +13912,28 @@ "node": ">=8" } }, - "node_modules/shebang-regex": { + "packages/open-scd/node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/shiki": { + "packages/open-scd/node_modules/shiki": { "version": "0.9.14", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.14.tgz", - "integrity": "sha512-uLHjjyJdNsMzF9GOF8vlOuZ8BwigiYPraMN5yjC826k8K7Xu90JQcC5GUNrzRibLgT2EOk9597I1IX+jRdA8nw==", "dev": true, + "license": "MIT", "dependencies": { "jsonc-parser": "^3.0.0", "vscode-oniguruma": "^1.6.1", "vscode-textmate": "5.2.0" } }, - "node_modules/side-channel": { + "packages/open-scd/node_modules/side-channel": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -15241,17 +13943,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { + "packages/open-scd/node_modules/signal-exit": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/sinon": { + "packages/open-scd/node_modules/sinon": { "version": "11.1.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-11.1.2.tgz", - "integrity": "sha512-59237HChms4kg7/sXhiRcUzdSkKuydDeTiamT/jesUVHshBgL8XAmhgFo0GfK6RruMDM/iRSij1EybmMog9cJw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^1.8.3", "@sinonjs/fake-timers": "^7.1.2", @@ -15265,30 +13965,27 @@ "url": "https://opencollective.com/sinon" } }, - "node_modules/sinon-chai": { + "packages/open-scd/node_modules/sinon-chai": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.7.0.tgz", - "integrity": "sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==", "dev": true, + "license": "(BSD-2-Clause OR WTFPL)", "peerDependencies": { "chai": "^4.0.0", "sinon": ">=4.0.0" } }, - "node_modules/sinon/node_modules/diff": { + "packages/open-scd/node_modules/sinon/node_modules/diff": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, - "node_modules/skypack": { + "packages/open-scd/node_modules/skypack": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/skypack/-/skypack-0.3.2.tgz", - "integrity": "sha512-je1pix0QYER6iHuUGbgcafRJT5TI+EGUIBfzBLMqo3Wi22I2SzB9TVHQqwKCw8pzJMuHqhVTFEHc3Ey+ra25Sw==", "dev": true, + "license": "MIT", "dependencies": { "cacache": "^15.0.0", "cachedir": "^2.3.0", @@ -15307,11 +14004,10 @@ "node": ">=10.19.0" } }, - "node_modules/skypack/node_modules/find-up": { + "packages/open-scd/node_modules/skypack/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -15323,11 +14019,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/skypack/node_modules/locate-path": { + "packages/open-scd/node_modules/skypack/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -15338,11 +14033,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/skypack/node_modules/p-limit": { + "packages/open-scd/node_modules/skypack/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -15353,11 +14047,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/skypack/node_modules/p-locate": { + "packages/open-scd/node_modules/skypack/node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -15368,20 +14061,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/slash": { + "packages/open-scd/node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/slice-ansi": { + "packages/open-scd/node_modules/slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -15394,21 +14085,19 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/smart-buffer": { + "packages/open-scd/node_modules/smart-buffer": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" } }, - "node_modules/snowpack": { + "packages/open-scd/node_modules/snowpack": { "version": "3.8.6", - "resolved": "https://registry.npmjs.org/snowpack/-/snowpack-3.8.6.tgz", - "integrity": "sha512-EZ3Y7RtTiPvxnVFTKPfkvi2PKBrprXCvOHKWQQLBkHonf+xdtG51RiNjtrRLJeCjislAlD6OoeGHUxz76ToGHw==", "dev": true, + "license": "MIT", "dependencies": { "@npmcli/arborist": "^2.6.4", "bufferutil": "^4.0.2", @@ -15472,23 +14161,20 @@ "fsevents": "^2.3.2" } }, - "node_modules/snowpack/node_modules/es-module-lexer": { + "packages/open-scd/node_modules/snowpack/node_modules/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 + "dev": true, + "license": "MIT" }, - "node_modules/snowpack/node_modules/estree-walker": { + "packages/open-scd/node_modules/snowpack/node_modules/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 + "dev": true, + "license": "MIT" }, - "node_modules/snowpack/node_modules/find-up": { + "packages/open-scd/node_modules/snowpack/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -15500,11 +14186,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/snowpack/node_modules/locate-path": { + "packages/open-scd/node_modules/snowpack/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -15515,11 +14200,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/snowpack/node_modules/p-limit": { + "packages/open-scd/node_modules/snowpack/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -15530,11 +14214,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/snowpack/node_modules/p-locate": { + "packages/open-scd/node_modules/snowpack/node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -15545,11 +14228,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/snowpack/node_modules/rollup": { + "packages/open-scd/node_modules/snowpack/node_modules/rollup": { "version": "2.37.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.37.1.tgz", - "integrity": "sha512-V3ojEeyGeSdrMSuhP3diBb06P+qV4gKQeanbDv+Qh/BZbhdZ7kHV0xAt8Yjk4GFshq/WjO7R4c7DFM20AwTFVQ==", "dev": true, + "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -15560,13 +14242,10 @@ "fsevents": "~2.1.2" } }, - "node_modules/snowpack/node_modules/rollup/node_modules/fsevents": { + "packages/open-scd/node_modules/snowpack/node_modules/rollup/node_modules/fsevents": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "deprecated": "\"Please update to latest v2.3 or v2.2\"", "dev": true, - "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -15575,11 +14254,10 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/socks": { + "packages/open-scd/node_modules/socks": { "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", "dev": true, + "license": "MIT", "dependencies": { "ip": "^1.1.5", "smart-buffer": "^4.1.0" @@ -15589,11 +14267,10 @@ "npm": ">= 3.0.0" } }, - "node_modules/socks-proxy-agent": { + "packages/open-scd/node_modules/socks-proxy-agent": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", - "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.1", @@ -15603,92 +14280,81 @@ "node": ">= 10" } }, - "node_modules/source-map": { + "packages/open-scd/node_modules/source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">= 8" } }, - "node_modules/source-map-js": { + "packages/open-scd/node_modules/source-map-js": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", - "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/source-map-support": { + "packages/open-scd/node_modules/source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "node_modules/source-map-support/node_modules/source-map": { + "packages/open-scd/node_modules/source-map-support/node_modules/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, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/sourcemap-codec": { + "packages/open-scd/node_modules/sourcemap-codec": { "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/spawn-command": { + "packages/open-scd/node_modules/spawn-command": { "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/spdx-correct": { + "packages/open-scd/node_modules/spdx-correct": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, - "node_modules/spdx-exceptions": { + "packages/open-scd/node_modules/spdx-exceptions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true + "dev": true, + "license": "CC-BY-3.0" }, - "node_modules/spdx-expression-parse": { + "packages/open-scd/node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, - "node_modules/spdx-license-ids": { + "packages/open-scd/node_modules/spdx-license-ids": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, - "node_modules/split": { + "packages/open-scd/node_modules/split": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, + "license": "MIT", "dependencies": { "through": "2" }, @@ -15696,26 +14362,23 @@ "node": "*" } }, - "node_modules/split2": { + "packages/open-scd/node_modules/split2": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, + "license": "ISC", "dependencies": { "readable-stream": "^3.0.0" } }, - "node_modules/sprintf-js": { + "packages/open-scd/node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, - "node_modules/sshpk": { + "packages/open-scd/node_modules/sshpk": { "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, + "license": "MIT", "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -15736,11 +14399,10 @@ "node": ">=0.10.0" } }, - "node_modules/ssri": { + "packages/open-scd/node_modules/ssri": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.1.1" }, @@ -15748,12 +14410,10 @@ "node": ">= 8" } }, - "node_modules/standard-version": { + "packages/open-scd/node_modules/standard-version": { "version": "9.3.2", - "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.3.2.tgz", - "integrity": "sha512-u1rfKP4o4ew7Yjbfycv80aNMN2feTiqseAhUhrrx2XtdQGmu7gucpziXe68Z4YfHVqlxVEzo4aUA0Iu3VQOTgQ==", - "deprecated": "standard-version is deprecated. If you're a GitHub user, I recommend https://github.com/googleapis/release-please as an alternative.", "dev": true, + "license": "ISC", "dependencies": { "chalk": "^2.4.2", "conventional-changelog": "3.1.24", @@ -15778,11 +14438,10 @@ "node": ">=10" } }, - "node_modules/standard-version/node_modules/ansi-styles": { + "packages/open-scd/node_modules/standard-version/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -15790,11 +14449,10 @@ "node": ">=4" } }, - "node_modules/standard-version/node_modules/chalk": { + "packages/open-scd/node_modules/standard-version/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -15804,26 +14462,23 @@ "node": ">=4" } }, - "node_modules/standard-version/node_modules/color-convert": { + "packages/open-scd/node_modules/standard-version/node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, - "node_modules/standard-version/node_modules/color-name": { + "packages/open-scd/node_modules/standard-version/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/standard-version/node_modules/find-up": { + "packages/open-scd/node_modules/standard-version/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -15835,20 +14490,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/standard-version/node_modules/has-flag": { + "packages/open-scd/node_modules/standard-version/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/standard-version/node_modules/locate-path": { + "packages/open-scd/node_modules/standard-version/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -15859,11 +14512,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/standard-version/node_modules/p-limit": { + "packages/open-scd/node_modules/standard-version/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -15874,11 +14526,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/standard-version/node_modules/p-locate": { + "packages/open-scd/node_modules/standard-version/node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -15889,11 +14540,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/standard-version/node_modules/supports-color": { + "packages/open-scd/node_modules/standard-version/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -15901,11 +14551,10 @@ "node": ">=4" } }, - "node_modules/standard-version/node_modules/yargs": { + "packages/open-scd/node_modules/standard-version/node_modules/yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -15919,44 +14568,39 @@ "node": ">=10" } }, - "node_modules/statuses": { + "packages/open-scd/node_modules/statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/string_decoder": { + "packages/open-scd/node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, - "node_modules/string-argv": { + "packages/open-scd/node_modules/string-argv": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.19" } }, - "node_modules/string-hash": { + "packages/open-scd/node_modules/string-hash": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", - "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", - "dev": true + "dev": true, + "license": "CC0-1.0" }, - "node_modules/string-width": { + "packages/open-scd/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -15966,11 +14610,10 @@ "node": ">=8" } }, - "node_modules/string.prototype.matchall": { + "packages/open-scd/node_modules/string.prototype.matchall": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -15985,11 +14628,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimend": { + "packages/open-scd/node_modules/string.prototype.trimend": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -15999,11 +14641,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimstart": { + "packages/open-scd/node_modules/string.prototype.trimstart": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -16013,11 +14654,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stringify-object": { + "packages/open-scd/node_modules/stringify-object": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", @@ -16027,26 +14667,23 @@ "node": ">=4" } }, - "node_modules/stringify-object/node_modules/is-obj": { + "packages/open-scd/node_modules/stringify-object/node_modules/is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/stringify-package": { + "packages/open-scd/node_modules/stringify-package": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", - "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/strip-ansi": { + "packages/open-scd/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -16054,38 +14691,34 @@ "node": ">=8" } }, - "node_modules/strip-bom": { + "packages/open-scd/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/strip-comments": { + "packages/open-scd/node_modules/strip-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, - "node_modules/strip-final-newline": { + "packages/open-scd/node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/strip-indent": { + "packages/open-scd/node_modules/strip-indent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, + "license": "MIT", "dependencies": { "min-indent": "^1.0.0" }, @@ -16093,11 +14726,10 @@ "node": ">=8" } }, - "node_modules/strip-json-comments": { + "packages/open-scd/node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -16105,11 +14737,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/supports-color": { + "packages/open-scd/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -16117,17 +14748,15 @@ "node": ">=8" } }, - "node_modules/systemjs": { + "packages/open-scd/node_modules/systemjs": { "version": "6.11.0", - "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-6.11.0.tgz", - "integrity": "sha512-7YPIY44j+BoY+E6cGBSw0oCU8SNTTIHKZgftcBdwWkDzs/M86Fdlr21FrzAyph7Zo8r3CFGscyFe4rrBtixrBg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/table": { + "packages/open-scd/node_modules/table": { "version": "6.7.5", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.5.tgz", - "integrity": "sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -16139,11 +14768,10 @@ "node": ">=10.0.0" } }, - "node_modules/table-layout": { + "packages/open-scd/node_modules/table-layout": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", "dev": true, + "license": "MIT", "dependencies": { "array-back": "^4.0.1", "deep-extend": "~0.6.0", @@ -16154,29 +14782,26 @@ "node": ">=8.0.0" } }, - "node_modules/table-layout/node_modules/array-back": { + "packages/open-scd/node_modules/table-layout/node_modules/array-back": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/table-layout/node_modules/typical": { + "packages/open-scd/node_modules/table-layout/node_modules/typical": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/tar": { + "packages/open-scd/node_modules/tar": { "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "dev": true, + "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -16189,11 +14814,10 @@ "node": ">= 10" } }, - "node_modules/tar-fs": { + "packages/open-scd/node_modules/tar-fs": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, + "license": "MIT", "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -16201,11 +14825,10 @@ "tar-stream": "^2.1.4" } }, - "node_modules/tar-stream": { + "packages/open-scd/node_modules/tar-stream": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -16217,29 +14840,26 @@ "node": ">=6" } }, - "node_modules/tar/node_modules/chownr": { + "packages/open-scd/node_modules/tar/node_modules/chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, - "node_modules/temp-dir": { + "packages/open-scd/node_modules/temp-dir": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/tempy": { + "packages/open-scd/node_modules/tempy": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", - "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", "dev": true, + "license": "MIT", "dependencies": { "is-stream": "^2.0.0", "temp-dir": "^2.0.0", @@ -16253,11 +14873,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tempy/node_modules/type-fest": { + "packages/open-scd/node_modules/tempy/node_modules/type-fest": { "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -16265,11 +14884,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/term-size": { + "packages/open-scd/node_modules/term-size": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -16277,11 +14895,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/terser": { + "packages/open-scd/node_modules/terser": { "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -16294,50 +14911,44 @@ "node": ">=6.0.0" } }, - "node_modules/terser/node_modules/commander": { + "packages/open-scd/node_modules/terser/node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/terser/node_modules/source-map": { + "packages/open-scd/node_modules/terser/node_modules/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, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/text-extensions": { + "packages/open-scd/node_modules/text-extensions": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } }, - "node_modules/text-table": { + "packages/open-scd/node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/thenify": { + "packages/open-scd/node_modules/thenify": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, + "license": "MIT", "dependencies": { "any-promise": "^1.0.0" } }, - "node_modules/thenify-all": { + "packages/open-scd/node_modules/thenify-all": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", "dev": true, + "license": "MIT", "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -16345,26 +14956,23 @@ "node": ">=0.8" } }, - "node_modules/through": { + "packages/open-scd/node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/through2": { + "packages/open-scd/node_modules/through2": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "3" } }, - "node_modules/tmp": { + "packages/open-scd/node_modules/tmp": { "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, + "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -16372,29 +14980,26 @@ "node": ">=0.6.0" } }, - "node_modules/to-fast-properties": { + "packages/open-scd/node_modules/to-fast-properties": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/to-readable-stream": { + "packages/open-scd/node_modules/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, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/to-regex-range": { + "packages/open-scd/node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -16402,20 +15007,18 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { + "packages/open-scd/node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6" } }, - "node_modules/tough-cookie": { + "packages/open-scd/node_modules/tough-cookie": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -16424,11 +15027,10 @@ "node": ">=0.8" } }, - "node_modules/tr46": { + "packages/open-scd/node_modules/tr46": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.1.1" }, @@ -16436,35 +15038,31 @@ "node": ">=12" } }, - "node_modules/tree-kill": { + "packages/open-scd/node_modules/tree-kill": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, + "license": "MIT", "bin": { "tree-kill": "cli.js" } }, - "node_modules/treeverse": { + "packages/open-scd/node_modules/treeverse": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-1.0.4.tgz", - "integrity": "sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/trim-newlines": { + "packages/open-scd/node_modules/trim-newlines": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/ts-node": { + "packages/open-scd/node_modules/ts-node": { "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", "dev": true, + "license": "MIT", "dependencies": { "arg": "^4.1.0", "create-require": "^1.1.0", @@ -16486,17 +15084,15 @@ "typescript": ">=2.7" } }, - "node_modules/ts-simple-type": { + "packages/open-scd/node_modules/ts-simple-type": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/ts-simple-type/-/ts-simple-type-1.0.7.tgz", - "integrity": "sha512-zKmsCQs4dZaeSKjEA7pLFDv7FHHqAFLPd0Mr//OIJvu8M+4p4bgSFJwZSEBEg3ec9W7RzRz1vi8giiX0+mheBQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/tsconfig-paths": { + "packages/open-scd/node_modules/tsconfig-paths": { "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.1", @@ -16504,25 +15100,22 @@ "strip-bom": "^3.0.0" } }, - "node_modules/tslib": { + "packages/open-scd/node_modules/tslib": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "license": "0BSD" }, - "node_modules/tsscmp": { + "packages/open-scd/node_modules/tsscmp": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.x" } }, - "node_modules/tsutils": { + "packages/open-scd/node_modules/tsutils": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^1.8.1" }, @@ -16533,17 +15126,15 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/tsutils/node_modules/tslib": { + "packages/open-scd/node_modules/tsutils/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, - "node_modules/tunnel-agent": { + "packages/open-scd/node_modules/tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -16551,17 +15142,15 @@ "node": "*" } }, - "node_modules/tweetnacl": { + "packages/open-scd/node_modules/tweetnacl": { "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true + "dev": true, + "license": "Unlicense" }, - "node_modules/type-check": { + "packages/open-scd/node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -16569,20 +15158,18 @@ "node": ">= 0.8.0" } }, - "node_modules/type-detect": { + "packages/open-scd/node_modules/type-detect": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/type-fest": { + "packages/open-scd/node_modules/type-fest": { "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -16590,11 +15177,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-is": { + "packages/open-scd/node_modules/type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -16603,11 +15189,10 @@ "node": ">= 0.6" } }, - "node_modules/typed-array-length": { + "packages/open-scd/node_modules/typed-array-length": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -16617,26 +15202,23 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typedarray": { + "packages/open-scd/node_modules/typedarray": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/typedarray-to-buffer": { + "packages/open-scd/node_modules/typedarray-to-buffer": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, + "license": "MIT", "dependencies": { "is-typedarray": "^1.0.0" } }, - "node_modules/typedoc": { + "packages/open-scd/node_modules/typedoc": { "version": "0.21.10", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.21.10.tgz", - "integrity": "sha512-Y0wYIehkjkPfsp3pv86fp3WPHUcOf8pnQUDLwG1PqSccUSqdsv7Pz1Gd5WrTJvXQB2wO1mKlZ8qW8qMiopKyjA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "glob": "^7.1.7", "handlebars": "^4.7.7", @@ -16657,20 +15239,18 @@ "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x" } }, - "node_modules/typedoc-default-themes": { + "packages/open-scd/node_modules/typedoc-default-themes": { "version": "0.12.10", - "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.12.10.tgz", - "integrity": "sha512-fIS001cAYHkyQPidWXmHuhs8usjP5XVJjWB8oZGqkTowZaz3v7g3KDZeeqE82FBrmkAnIBOY3jgy7lnPnqATbA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">= 8" } }, - "node_modules/typedoc-plugin-markdown": { + "packages/open-scd/node_modules/typedoc-plugin-markdown": { "version": "3.10.4", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.10.4.tgz", - "integrity": "sha512-if9w7S9fXLg73AYi/EoRSEhTOZlg3I8mIP8YEmvzSE33VrNXC9/hA0nVcLEwFVJeQY7ay6z67I6kW0KIv7LjeA==", "dev": true, + "license": "MIT", "dependencies": { "handlebars": "^4.7.7" }, @@ -16678,11 +15258,10 @@ "typedoc": ">=0.21.2" } }, - "node_modules/typescript": { + "packages/open-scd/node_modules/typescript": { "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -16691,19 +15270,16 @@ "node": ">=4.2.0" } }, - "node_modules/typical": { + "packages/open-scd/node_modules/typical": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/ua-parser-js": { + "packages/open-scd/node_modules/ua-parser-js": { "version": "1.0.34", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.34.tgz", - "integrity": "sha512-K9mwJm/DaB6mRLZfw6q8IMXipcrmuT6yfhYmwhAkuh+81sChuYstYA+znlgaflUPaYUa3odxKPKGw6Vw/lANew==", "dev": true, "funding": [ { @@ -16715,15 +15291,15 @@ "url": "https://paypal.me/faisalman" } ], + "license": "MIT", "engines": { "node": "*" } }, - "node_modules/uglify-js": { + "packages/open-scd/node_modules/uglify-js": { "version": "3.14.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.4.tgz", - "integrity": "sha512-AbiSR44J0GoCeV81+oxcy/jDOElO2Bx3d0MfQCUShq7JRXaM4KtQopZsq2vFv8bCq2yMaGrw1FgygUd03RyRDA==", "dev": true, + "license": "BSD-2-Clause", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -16732,11 +15308,10 @@ "node": ">=0.8.0" } }, - "node_modules/unbox-primitive": { + "packages/open-scd/node_modules/unbox-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -16747,30 +15322,27 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unbzip2-stream": { + "packages/open-scd/node_modules/unbzip2-stream": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" } }, - "node_modules/unicode-canonical-property-names-ecmascript": { + "packages/open-scd/node_modules/unicode-canonical-property-names-ecmascript": { "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, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/unicode-match-property-ecmascript": { + "packages/open-scd/node_modules/unicode-match-property-ecmascript": { "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, + "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -16779,47 +15351,42 @@ "node": ">=4" } }, - "node_modules/unicode-match-property-value-ecmascript": { + "packages/open-scd/node_modules/unicode-match-property-value-ecmascript": { "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, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/unicode-property-aliases-ecmascript": { + "packages/open-scd/node_modules/unicode-property-aliases-ecmascript": { "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, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/unique-filename": { + "packages/open-scd/node_modules/unique-filename": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, + "license": "ISC", "dependencies": { "unique-slug": "^2.0.0" } }, - "node_modules/unique-slug": { + "packages/open-scd/node_modules/unique-slug": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" } }, - "node_modules/unique-string": { + "packages/open-scd/node_modules/unique-string": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, + "license": "MIT", "dependencies": { "crypto-random-string": "^2.0.0" }, @@ -16827,29 +15394,26 @@ "node": ">=8" } }, - "node_modules/universalify": { + "packages/open-scd/node_modules/universalify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } }, - "node_modules/unpipe": { + "packages/open-scd/node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/untildify": { + "packages/open-scd/node_modules/untildify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", - "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", "dev": true, + "license": "MIT", "dependencies": { "os-homedir": "^1.0.0" }, @@ -16857,21 +15421,19 @@ "node": ">=0.10.0" } }, - "node_modules/upath": { + "packages/open-scd/node_modules/upath": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4", "yarn": "*" } }, - "node_modules/update-notifier": { + "packages/open-scd/node_modules/update-notifier": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boxen": "^4.2.0", "chalk": "^3.0.0", @@ -16894,11 +15456,10 @@ "url": "https://github.com/yeoman/update-notifier?sponsor=1" } }, - "node_modules/update-notifier/node_modules/chalk": { + "packages/open-scd/node_modules/update-notifier/node_modules/chalk": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -16907,20 +15468,18 @@ "node": ">=8" } }, - "node_modules/uri-js": { + "packages/open-scd/node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, - "node_modules/url-parse-lax": { + "packages/open-scd/node_modules/url-parse-lax": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "dev": true, + "license": "MIT", "dependencies": { "prepend-http": "^2.0.0" }, @@ -16928,38 +15487,34 @@ "node": ">=4" } }, - "node_modules/useragent": { + "packages/open-scd/node_modules/useragent": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", "dev": true, + "license": "MIT", "dependencies": { "lru-cache": "4.1.x", "tmp": "0.0.x" } }, - "node_modules/useragent/node_modules/lru-cache": { + "packages/open-scd/node_modules/useragent/node_modules/lru-cache": { "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, + "license": "ISC", "dependencies": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" } }, - "node_modules/useragent/node_modules/yallist": { + "packages/open-scd/node_modules/useragent/node_modules/yallist": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/utf-8-validate": { + "packages/open-scd/node_modules/utf-8-validate": { "version": "5.0.7", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", - "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -16967,48 +15522,41 @@ "node": ">=6.14.2" } }, - "node_modules/util": { + "packages/open-scd/node_modules/util": { "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, + "license": "MIT", "dependencies": { "inherits": "2.0.1" } }, - "node_modules/util-deprecate": { + "packages/open-scd/node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/util/node_modules/inherits": { + "packages/open-scd/node_modules/util/node_modules/inherits": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/uuid": { + "packages/open-scd/node_modules/uuid": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, + "license": "MIT", "bin": { "uuid": "bin/uuid" } }, - "node_modules/v8-compile-cache": { + "packages/open-scd/node_modules/v8-compile-cache": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/v8-to-istanbul": { + "packages/open-scd/node_modules/v8-to-istanbul": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", "dev": true, + "license": "ISC", "dependencies": { "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^1.6.0", @@ -17018,65 +15566,57 @@ "node": ">=10.12.0" } }, - "node_modules/valid-url": { + "packages/open-scd/node_modules/valid-url": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=", "dev": true }, - "node_modules/validate-npm-package-license": { + "packages/open-scd/node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, - "node_modules/validate-npm-package-name": { + "packages/open-scd/node_modules/validate-npm-package-name": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", "dev": true, + "license": "ISC", "dependencies": { "builtins": "^1.0.3" } }, - "node_modules/vary": { + "packages/open-scd/node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/verror": { + "packages/open-scd/node_modules/verror": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "engines": [ "node >=0.6.0" ], + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, - "node_modules/verror/node_modules/core-util-is": { + "packages/open-scd/node_modules/verror/node_modules/core-util-is": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/vm2": { + "packages/open-scd/node_modules/vm2": { "version": "3.9.14", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.14.tgz", - "integrity": "sha512-HgvPHYHeQy8+QhzlFryvSteA4uQLBCOub02mgqdR+0bN/akRZ48TGB1v0aCv7ksyc0HXx16AZtMHKS38alc6TA==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^8.7.0", "acorn-walk": "^8.2.0" @@ -17088,11 +15628,10 @@ "node": ">=6.0" } }, - "node_modules/vm2/node_modules/acorn": { + "packages/open-scd/node_modules/vm2/node_modules/acorn": { "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -17100,38 +15639,33 @@ "node": ">=0.4.0" } }, - "node_modules/vscode-oniguruma": { + "packages/open-scd/node_modules/vscode-oniguruma": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz", - "integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/vscode-textmate": { + "packages/open-scd/node_modules/vscode-textmate": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", - "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/walk-up-path": { + "packages/open-scd/node_modules/walk-up-path": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", - "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/wcwidth": { + "packages/open-scd/node_modules/wcwidth": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "dev": true, + "license": "MIT", "dependencies": { "defaults": "^1.0.3" } }, - "node_modules/web-component-analyzer": { + "packages/open-scd/node_modules/web-component-analyzer": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/web-component-analyzer/-/web-component-analyzer-1.1.6.tgz", - "integrity": "sha512-1PyBkb/jijDEVE+Pnk3DTmVHD8takipdvAwvZv1V8jIidsSIJ5nhN87Gs+4dpEb1vw48yp8dnbZKkvMYJ+C0VQ==", "dev": true, + "license": "MIT", "dependencies": { "fast-glob": "^3.2.2", "ts-simple-type": "~1.0.5", @@ -17143,22 +15677,20 @@ "web-component-analyzer": "cli.js" } }, - "node_modules/web-component-analyzer/node_modules/cliui": { + "packages/open-scd/node_modules/web-component-analyzer/node_modules/cliui": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" } }, - "node_modules/web-component-analyzer/node_modules/typescript": { + "packages/open-scd/node_modules/web-component-analyzer/node_modules/typescript": { "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -17167,11 +15699,10 @@ "node": ">=4.2.0" } }, - "node_modules/web-component-analyzer/node_modules/wrap-ansi": { + "packages/open-scd/node_modules/web-component-analyzer/node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -17181,17 +15712,15 @@ "node": ">=8" } }, - "node_modules/web-component-analyzer/node_modules/y18n": { + "packages/open-scd/node_modules/web-component-analyzer/node_modules/y18n": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/web-component-analyzer/node_modules/yargs": { + "packages/open-scd/node_modules/web-component-analyzer/node_modules/yargs": { "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -17209,11 +15738,10 @@ "node": ">=8" } }, - "node_modules/web-component-analyzer/node_modules/yargs-parser": { + "packages/open-scd/node_modules/web-component-analyzer/node_modules/yargs-parser": { "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -17222,26 +15750,23 @@ "node": ">=6" } }, - "node_modules/webidl-conversions": { + "packages/open-scd/node_modules/webidl-conversions": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" } }, - "node_modules/whatwg-fetch": { + "packages/open-scd/node_modules/whatwg-fetch": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/whatwg-url": { + "packages/open-scd/node_modules/whatwg-url": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, + "license": "MIT", "dependencies": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" @@ -17250,16 +15775,14 @@ "node": ">=12" } }, - "node_modules/wheel": { + "packages/open-scd/node_modules/wheel": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wheel/-/wheel-1.0.0.tgz", - "integrity": "sha512-XiCMHibOiqalCQ+BaNSwRoZ9FDTAvOsXxGHXChBugewDj7HC8VBIER71dEOiRH1fSdLbRCQzngKTSiZ06ZQzeA==" + "license": "MIT" }, - "node_modules/which": { + "packages/open-scd/node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -17270,11 +15793,10 @@ "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { + "packages/open-scd/node_modules/which-boxed-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, + "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -17286,17 +15808,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-module": { + "packages/open-scd/node_modules/which-module": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/which-typed-array": { + "packages/open-scd/node_modules/which-typed-array": { "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -17312,43 +15832,37 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wicg-inert": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/wicg-inert/-/wicg-inert-3.1.1.tgz", - "integrity": "sha512-PhBaNh8ur9Xm4Ggy4umelwNIP6pPP1bv3EaWaKqfb/QNme2rdLjm7wIInvV4WhxVHhzA4Spgw9qNSqWtB/ca2A==" + "packages/open-scd/node_modules/wicg-inert": { + "version": "3.1.1" }, - "node_modules/wide-align": { + "packages/open-scd/node_modules/wide-align": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2" } }, - "node_modules/wide-align/node_modules/ansi-regex": { + "packages/open-scd/node_modules/wide-align/node_modules/ansi-regex": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "packages/open-scd/node_modules/wide-align/node_modules/is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/wide-align/node_modules/string-width": { + "packages/open-scd/node_modules/wide-align/node_modules/string-width": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, + "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -17357,11 +15871,10 @@ "node": ">=4" } }, - "node_modules/wide-align/node_modules/strip-ansi": { + "packages/open-scd/node_modules/wide-align/node_modules/strip-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" }, @@ -17369,11 +15882,10 @@ "node": ">=4" } }, - "node_modules/widest-line": { + "packages/open-scd/node_modules/widest-line": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dev": true, + "license": "MIT", "dependencies": { "string-width": "^4.0.0" }, @@ -17381,26 +15893,23 @@ "node": ">=8" } }, - "node_modules/word-wrap": { + "packages/open-scd/node_modules/word-wrap": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/wordwrap": { + "packages/open-scd/node_modules/wordwrap": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/wordwrapjs": { + "packages/open-scd/node_modules/wordwrapjs": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", "dev": true, + "license": "MIT", "dependencies": { "reduce-flatten": "^2.0.0", "typical": "^5.2.0" @@ -17409,39 +15918,35 @@ "node": ">=8.0.0" } }, - "node_modules/wordwrapjs/node_modules/typical": { + "packages/open-scd/node_modules/wordwrapjs/node_modules/typical": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/workbox-background-sync": { + "packages/open-scd/node_modules/workbox-background-sync": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz", - "integrity": "sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==", "dev": true, + "license": "MIT", "dependencies": { "idb": "^7.0.1", "workbox-core": "6.5.4" } }, - "node_modules/workbox-broadcast-update": { + "packages/open-scd/node_modules/workbox-broadcast-update": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz", - "integrity": "sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "6.5.4" } }, - "node_modules/workbox-build": { + "packages/open-scd/node_modules/workbox-build": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.4.tgz", - "integrity": "sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==", "dev": true, + "license": "MIT", "dependencies": { "@apideck/better-ajv-errors": "^0.3.1", "@babel/core": "^7.11.1", @@ -17485,11 +15990,10 @@ "node": ">=10.0.0" } }, - "node_modules/workbox-build/node_modules/fs-extra": { + "packages/open-scd/node_modules/workbox-build/node_modules/fs-extra": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, + "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -17500,11 +16004,10 @@ "node": ">=10" } }, - "node_modules/workbox-build/node_modules/source-map": { + "packages/open-scd/node_modules/workbox-build/node_modules/source-map": { "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "whatwg-url": "^7.0.0" }, @@ -17512,46 +16015,41 @@ "node": ">= 8" } }, - "node_modules/workbox-build/node_modules/tr46": { + "packages/open-scd/node_modules/workbox-build/node_modules/tr46": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.1.0" } }, - "node_modules/workbox-build/node_modules/webidl-conversions": { + "packages/open-scd/node_modules/workbox-build/node_modules/webidl-conversions": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, - "node_modules/workbox-build/node_modules/whatwg-url": { + "packages/open-scd/node_modules/workbox-build/node_modules/whatwg-url": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, + "license": "MIT", "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", "webidl-conversions": "^4.0.2" } }, - "node_modules/workbox-cacheable-response": { + "packages/open-scd/node_modules/workbox-cacheable-response": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz", - "integrity": "sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "6.5.4" } }, - "node_modules/workbox-cli": { + "packages/open-scd/node_modules/workbox-cli": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-cli/-/workbox-cli-6.5.4.tgz", - "integrity": "sha512-+Cc0jYh25MofhCROZqfQkpYSAGvykyrUVekuuPaLFbJ8qxX/zzX8hRRpglfwxDwokAjz8S20oEph4s+MyQc+Yw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "chokidar": "^3.5.2", @@ -17574,11 +16072,10 @@ "node": ">=10.0.0" } }, - "node_modules/workbox-cli/node_modules/fs-extra": { + "packages/open-scd/node_modules/workbox-cli/node_modules/fs-extra": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, + "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -17589,17 +16086,15 @@ "node": ">=10" } }, - "node_modules/workbox-cli/node_modules/hosted-git-info": { + "packages/open-scd/node_modules/workbox-cli/node_modules/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 + "dev": true, + "license": "ISC" }, - "node_modules/workbox-cli/node_modules/meow": { + "packages/open-scd/node_modules/workbox-cli/node_modules/meow": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz", - "integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", @@ -17620,11 +16115,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/workbox-cli/node_modules/normalize-package-data": { + "packages/open-scd/node_modules/workbox-cli/node_modules/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, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -17632,20 +16126,18 @@ "validate-npm-package-license": "^3.0.1" } }, - "node_modules/workbox-cli/node_modules/semver": { + "packages/open-scd/node_modules/workbox-cli/node_modules/semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, - "node_modules/workbox-cli/node_modules/type-fest": { + "packages/open-scd/node_modules/workbox-cli/node_modules/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, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -17653,11 +16145,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/workbox-cli/node_modules/yargs-parser": { + "packages/open-scd/node_modules/workbox-cli/node_modules/yargs-parser": { "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -17666,27 +16157,24 @@ "node": ">=6" } }, - "node_modules/workbox-core": { + "packages/open-scd/node_modules/workbox-core": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.4.tgz", - "integrity": "sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/workbox-expiration": { + "packages/open-scd/node_modules/workbox-expiration": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.4.tgz", - "integrity": "sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==", "dev": true, + "license": "MIT", "dependencies": { "idb": "^7.0.1", "workbox-core": "6.5.4" } }, - "node_modules/workbox-google-analytics": { + "packages/open-scd/node_modules/workbox-google-analytics": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz", - "integrity": "sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==", "dev": true, + "license": "MIT", "dependencies": { "workbox-background-sync": "6.5.4", "workbox-core": "6.5.4", @@ -17694,40 +16182,36 @@ "workbox-strategies": "6.5.4" } }, - "node_modules/workbox-navigation-preload": { + "packages/open-scd/node_modules/workbox-navigation-preload": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz", - "integrity": "sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "6.5.4" } }, - "node_modules/workbox-precaching": { + "packages/open-scd/node_modules/workbox-precaching": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.4.tgz", - "integrity": "sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "6.5.4", "workbox-routing": "6.5.4", "workbox-strategies": "6.5.4" } }, - "node_modules/workbox-range-requests": { + "packages/open-scd/node_modules/workbox-range-requests": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz", - "integrity": "sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "6.5.4" } }, - "node_modules/workbox-recipes": { + "packages/open-scd/node_modules/workbox-recipes": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.4.tgz", - "integrity": "sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==", "dev": true, + "license": "MIT", "dependencies": { "workbox-cacheable-response": "6.5.4", "workbox-core": "6.5.4", @@ -17737,55 +16221,49 @@ "workbox-strategies": "6.5.4" } }, - "node_modules/workbox-routing": { + "packages/open-scd/node_modules/workbox-routing": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.4.tgz", - "integrity": "sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "6.5.4" } }, - "node_modules/workbox-strategies": { + "packages/open-scd/node_modules/workbox-strategies": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.4.tgz", - "integrity": "sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "6.5.4" } }, - "node_modules/workbox-streams": { + "packages/open-scd/node_modules/workbox-streams": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.4.tgz", - "integrity": "sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "6.5.4", "workbox-routing": "6.5.4" } }, - "node_modules/workbox-sw": { + "packages/open-scd/node_modules/workbox-sw": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.4.tgz", - "integrity": "sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/workbox-window": { + "packages/open-scd/node_modules/workbox-window": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.4.tgz", - "integrity": "sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==", "dev": true, + "license": "MIT", "dependencies": { "@types/trusted-types": "^2.0.2", "workbox-core": "6.5.4" } }, - "node_modules/wrap-ansi": { + "packages/open-scd/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -17798,17 +16276,15 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrappy": { + "packages/open-scd/node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/write-file-atomic": { + "packages/open-scd/node_modules/write-file-atomic": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -17816,11 +16292,10 @@ "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/ws": { + "packages/open-scd/node_modules/ws": { "version": "7.5.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", - "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -17837,53 +16312,47 @@ } } }, - "node_modules/xdg-basedir": { + "packages/open-scd/node_modules/xdg-basedir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/xtend": { + "packages/open-scd/node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4" } }, - "node_modules/y18n": { + "packages/open-scd/node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, - "node_modules/yallist": { + "packages/open-scd/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/yaml": { + "packages/open-scd/node_modules/yaml": { "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, + "license": "ISC", "engines": { "node": ">= 6" } }, - "node_modules/yargs": { + "packages/open-scd/node_modules/yargs": { "version": "17.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz", - "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -17897,20 +16366,18 @@ "node": ">=12" } }, - "node_modules/yargs-parser": { + "packages/open-scd/node_modules/yargs-parser": { "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, - "node_modules/yargs-unparser": { + "packages/open-scd/node_modules/yargs-unparser": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", "dev": true, + "license": "MIT", "dependencies": { "flat": "^4.1.0", "lodash": "^4.17.15", @@ -17920,20 +16387,18 @@ "node": ">=6" } }, - "node_modules/yargs-unparser/node_modules/ansi-regex": { + "packages/open-scd/node_modules/yargs-unparser/node_modules/ansi-regex": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/yargs-unparser/node_modules/ansi-styles": { + "packages/open-scd/node_modules/yargs-unparser/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -17941,43 +16406,38 @@ "node": ">=4" } }, - "node_modules/yargs-unparser/node_modules/cliui": { + "packages/open-scd/node_modules/yargs-unparser/node_modules/cliui": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", "wrap-ansi": "^5.1.0" } }, - "node_modules/yargs-unparser/node_modules/color-convert": { + "packages/open-scd/node_modules/yargs-unparser/node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, - "node_modules/yargs-unparser/node_modules/color-name": { + "packages/open-scd/node_modules/yargs-unparser/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/yargs-unparser/node_modules/emoji-regex": { + "packages/open-scd/node_modules/yargs-unparser/node_modules/emoji-regex": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/yargs-unparser/node_modules/find-up": { + "packages/open-scd/node_modules/yargs-unparser/node_modules/find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^3.0.0" }, @@ -17985,20 +16445,18 @@ "node": ">=6" } }, - "node_modules/yargs-unparser/node_modules/is-fullwidth-code-point": { + "packages/open-scd/node_modules/yargs-unparser/node_modules/is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/yargs-unparser/node_modules/locate-path": { + "packages/open-scd/node_modules/yargs-unparser/node_modules/locate-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -18007,11 +16465,10 @@ "node": ">=6" } }, - "node_modules/yargs-unparser/node_modules/p-locate": { + "packages/open-scd/node_modules/yargs-unparser/node_modules/p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.0.0" }, @@ -18019,20 +16476,18 @@ "node": ">=6" } }, - "node_modules/yargs-unparser/node_modules/path-exists": { + "packages/open-scd/node_modules/yargs-unparser/node_modules/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, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/yargs-unparser/node_modules/string-width": { + "packages/open-scd/node_modules/yargs-unparser/node_modules/string-width": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -18042,11 +16497,10 @@ "node": ">=6" } }, - "node_modules/yargs-unparser/node_modules/strip-ansi": { + "packages/open-scd/node_modules/yargs-unparser/node_modules/strip-ansi": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" }, @@ -18054,11 +16508,10 @@ "node": ">=6" } }, - "node_modules/yargs-unparser/node_modules/wrap-ansi": { + "packages/open-scd/node_modules/yargs-unparser/node_modules/wrap-ansi": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", @@ -18068,17 +16521,15 @@ "node": ">=6" } }, - "node_modules/yargs-unparser/node_modules/y18n": { + "packages/open-scd/node_modules/yargs-unparser/node_modules/y18n": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/yargs-unparser/node_modules/yargs": { + "packages/open-scd/node_modules/yargs-unparser/node_modules/yargs": { "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^5.0.0", "find-up": "^3.0.0", @@ -18092,58 +16543,52 @@ "yargs-parser": "^13.1.2" } }, - "node_modules/yargs-unparser/node_modules/yargs-parser": { + "packages/open-scd/node_modules/yargs-unparser/node_modules/yargs-parser": { "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, - "node_modules/yargs/node_modules/yargs-parser": { + "packages/open-scd/node_modules/yargs/node_modules/yargs-parser": { "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, - "node_modules/yauzl": { + "packages/open-scd/node_modules/yauzl": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "dev": true, + "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, - "node_modules/ylru": { + "packages/open-scd/node_modules/ylru": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", - "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } }, - "node_modules/yn": { + "packages/open-scd/node_modules/yn": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/yocto-queue": { + "packages/open-scd/node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -18151,14322 +16596,5 @@ "url": "https://github.com/sponsors/sindresorhus" } } - }, - "dependencies": { - "@apideck/better-ajv-errors": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", - "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", - "dev": true, - "requires": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - } - }, - "@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.0" - } - }, - "@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", - "dev": true - }, - "@babel/core": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", - "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "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/eslint-parser": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz", - "integrity": "sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ==", - "dev": true, - "peer": true, - "requires": { - "eslint-scope": "^5.1.1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true - } - } - }, - "@babel/eslint-plugin": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.18.10.tgz", - "integrity": "sha512-iV1OZj/7eg4wZIcsVEkXS3MUWdhmpLsu2h+9Zr2ppywKWdCRs6VfjxbRzmHHYeurTizrrnaJ9ZkbO8KOv4lauQ==", - "dev": true, - "peer": true, - "requires": { - "eslint-rule-composer": "^0.3.0" - } - }, - "@babel/generator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", - "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0", - "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.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", - "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz", - "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", - "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz", - "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz", - "integrity": "sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "regexpu-core": "^4.7.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz", - "integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz", - "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", - "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", - "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", - "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", - "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", - "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", - "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz", - "integrity": "sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-wrap-function": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-replace-supers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", - "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", - "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", - "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-validator-identifier": { - "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": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz", - "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helpers": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", - "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", - "dev": true, - "requires": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.3", - "@babel/types": "^7.16.0" - } - }, - "@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", - "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.16.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz", - "integrity": "sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz", - "integrity": "sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz", - "integrity": "sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.16.4", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", - "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz", - "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz", - "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz", - "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz", - "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz", - "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz", - "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz", - "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz", - "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.0" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz", - "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz", - "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz", - "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz", - "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz", - "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz", - "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz", - "integrity": "sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.16.0" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz", - "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz", - "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz", - "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "globals": "^11.1.0" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz", - "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz", - "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz", - "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz", - "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz", - "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz", - "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz", - "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz", - "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz", - "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz", - "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz", - "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.16.0", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz", - "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.15.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz", - "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz", - "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz", - "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz", - "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.16.0" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz", - "integrity": "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz", - "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz", - "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz", - "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz", - "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz", - "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz", - "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz", - "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz", - "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz", - "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz", - "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/preset-env": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz", - "integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-compilation-targets": "^7.16.3", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.2", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-async-generator-functions": "^7.16.4", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-class-static-block": "^7.16.0", - "@babel/plugin-proposal-dynamic-import": "^7.16.0", - "@babel/plugin-proposal-export-namespace-from": "^7.16.0", - "@babel/plugin-proposal-json-strings": "^7.16.0", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-object-rest-spread": "^7.16.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-proposal-private-property-in-object": "^7.16.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.16.0", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.16.0", - "@babel/plugin-transform-async-to-generator": "^7.16.0", - "@babel/plugin-transform-block-scoped-functions": "^7.16.0", - "@babel/plugin-transform-block-scoping": "^7.16.0", - "@babel/plugin-transform-classes": "^7.16.0", - "@babel/plugin-transform-computed-properties": "^7.16.0", - "@babel/plugin-transform-destructuring": "^7.16.0", - "@babel/plugin-transform-dotall-regex": "^7.16.0", - "@babel/plugin-transform-duplicate-keys": "^7.16.0", - "@babel/plugin-transform-exponentiation-operator": "^7.16.0", - "@babel/plugin-transform-for-of": "^7.16.0", - "@babel/plugin-transform-function-name": "^7.16.0", - "@babel/plugin-transform-literals": "^7.16.0", - "@babel/plugin-transform-member-expression-literals": "^7.16.0", - "@babel/plugin-transform-modules-amd": "^7.16.0", - "@babel/plugin-transform-modules-commonjs": "^7.16.0", - "@babel/plugin-transform-modules-systemjs": "^7.16.0", - "@babel/plugin-transform-modules-umd": "^7.16.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.0", - "@babel/plugin-transform-new-target": "^7.16.0", - "@babel/plugin-transform-object-super": "^7.16.0", - "@babel/plugin-transform-parameters": "^7.16.3", - "@babel/plugin-transform-property-literals": "^7.16.0", - "@babel/plugin-transform-regenerator": "^7.16.0", - "@babel/plugin-transform-reserved-words": "^7.16.0", - "@babel/plugin-transform-shorthand-properties": "^7.16.0", - "@babel/plugin-transform-spread": "^7.16.0", - "@babel/plugin-transform-sticky-regex": "^7.16.0", - "@babel/plugin-transform-template-literals": "^7.16.0", - "@babel/plugin-transform-typeof-symbol": "^7.16.0", - "@babel/plugin-transform-unicode-escapes": "^7.16.0", - "@babel/plugin-transform-unicode-regex": "^7.16.0", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.16.0", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.4.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.19.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/runtime": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", - "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/runtime-corejs3": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.3.tgz", - "integrity": "sha512-IAdDC7T0+wEB4y2gbIL0uOXEYpiZEeuFUTVbdGq+UwCcF35T/tS8KrmMomEwEc5wBbyfH3PJVpTSUqrhPDXFcQ==", - "dev": true, - "requires": { - "core-js-pure": "^3.19.0", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/traverse": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", - "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.3", - "@babel/types": "^7.16.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "to-fast-properties": "^2.0.0" - } - }, - "@commitlint/cli": { - "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.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", - "yargs": "^17.0.0" - } - }, - "@commitlint/config-conventional": { - "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.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-13.2.0.tgz", - "integrity": "sha512-rqhT62RehdLTRBu8OrPHnRCCd/7RmHEE4TiTlT4BLlr5ls5jlZhecOQWJ8np872uCNirrJ5NFjnjYYdbkNoW9Q==", - "dev": true, - "requires": { - "@commitlint/types": "^13.2.0", - "lodash": "^4.17.19" - } - }, - "@commitlint/execute-rule": { - "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.2.0", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-13.2.0.tgz", - "integrity": "sha512-yNBQJe6YFhM1pJAta4LvzQxccSKof6axJH7ALYjuhQqfT8AKlad7Y/2SuJ07ioyreNIqwOTuF2UfU8yJ7JzEIQ==", - "dev": true, - "requires": { - "@commitlint/types": "^13.2.0", - "chalk": "^4.0.0" - } - }, - "@commitlint/is-ignored": { - "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.2.0", - "semver": "7.3.5" - } - }, - "@commitlint/lint": { - "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.2.0", - "@commitlint/parse": "^13.2.0", - "@commitlint/rules": "^13.2.0", - "@commitlint/types": "^13.2.0" - } - }, - "@commitlint/load": { - "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.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", - "typescript": "^4.4.3" - }, - "dependencies": { - "typescript": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", - "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", - "dev": true - } - } - }, - "@commitlint/message": { - "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.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.2.0", - "conventional-changelog-angular": "^5.0.11", - "conventional-commits-parser": "^3.2.2" - } - }, - "@commitlint/read": { - "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.2.0", - "@commitlint/types": "^13.2.0", - "fs-extra": "^10.0.0", - "git-raw-commits": "^2.0.0" - } - }, - "@commitlint/resolve-extends": { - "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", - "lodash": "^4.17.19", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0" - } - }, - "@commitlint/rules": { - "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.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.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.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" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - } - } - }, - "@commitlint/types": { - "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", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } - } - }, - "@gar/promisify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", - "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true - }, - "@isaacs/string-locale-compare": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@koa/cors": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-3.1.0.tgz", - "integrity": "sha512-7ulRC1da/rBa6kj6P4g2aJfnET3z8Uf3SWu60cjbtxTA5g8lxRdX/Bd2P92EagGwwAhANeNw8T8if99rJliR6Q==", - "dev": true, - "requires": { - "vary": "^1.1.2" - } - }, - "@material/animation": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/animation/-/animation-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-R1QbY4fC6RBOoi4Dq/3yuD5OK0ts02WxGt1JXaddsdnO6szZJcfXm2aiCweU1GUpchoah+YzDBJrsmSoqFCKIg==", - "requires": { - "tslib": "^2.1.0" - } - }, - "@material/base": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/base/-/base-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-bCxGPqFQPh3rfBdqG+UvlrnRPSP2CzHhn0f44NqELY/SkmujIfS30rJOX965IKoD6lGdKWIfi/sAm03I81pZ7g==", - "requires": { - "tslib": "^2.1.0" - } - }, - "@material/button": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/button/-/button-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-FV44k7WH8d0Z7TjKldEILWXG+bgVz0CplqAYiPiRoxIaGljOq/D7+enuC8tJOUst+zyihVSKyYT69ghWuOKjjg==", - "requires": { - "@material/density": "12.0.0-canary.22d29cbb4.0", - "@material/dom": "12.0.0-canary.22d29cbb4.0", - "@material/elevation": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/ripple": "12.0.0-canary.22d29cbb4.0", - "@material/rtl": "12.0.0-canary.22d29cbb4.0", - "@material/shape": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "@material/touch-target": "12.0.0-canary.22d29cbb4.0", - "@material/typography": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/density": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/density/-/density-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-uCOzDL3U8EAOU6A+3lwbys6lB5P24PwEsNoe5YoB7CmkNS+8LLFPdemp4dMdVY2xGlDX+McaUOKJKmFub4cPUA==", - "requires": { - "tslib": "^2.1.0" - } - }, - "@material/dialog": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/dialog/-/dialog-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-WOK+HN7HQa3mHvNEsEnleDOHCLRAbpFOhGuGyqnSDOCyxTl2DcNCUqsWupDVDpAlLv2OfLdmceyJrejMF+8q7g==", - "requires": { - "@material/animation": "12.0.0-canary.22d29cbb4.0", - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/button": "12.0.0-canary.22d29cbb4.0", - "@material/dom": "12.0.0-canary.22d29cbb4.0", - "@material/elevation": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/icon-button": "12.0.0-canary.22d29cbb4.0", - "@material/ripple": "12.0.0-canary.22d29cbb4.0", - "@material/rtl": "12.0.0-canary.22d29cbb4.0", - "@material/shape": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "@material/touch-target": "12.0.0-canary.22d29cbb4.0", - "@material/typography": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/dom": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/dom/-/dom-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-9XvFE2OuOZizYXF3ptyMcJuN/JHZA4vKq5lPLrIbcTXnd4DzJ7L4JrMcMb75xfjugxj8uaXjdfI62gwHfzP/aw==", - "requires": { - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/drawer": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/drawer/-/drawer-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-a5tGNXOXJglDpq/5blE3ZxbfTnuYU6pnkswWHliSUc71fC1A6XmK51vLz/PCGPGV3qL8JS2sakOVMdssRuLPxA==", - "requires": { - "@material/animation": "12.0.0-canary.22d29cbb4.0", - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/dom": "12.0.0-canary.22d29cbb4.0", - "@material/elevation": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/list": "12.0.0-canary.22d29cbb4.0", - "@material/ripple": "12.0.0-canary.22d29cbb4.0", - "@material/rtl": "12.0.0-canary.22d29cbb4.0", - "@material/shape": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "@material/typography": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/elevation": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-fuOG6w7Crz+9iibkBAXOQGYBWMCDZSvXA9PlZFW1JFCHUWyzzTMJeJIaHAVMHFzhbVF/rjqF6CliDZyAz4fULg==", - "requires": { - "@material/animation": "12.0.0-canary.22d29cbb4.0", - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/feature-targeting": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-e72VDSIMrwF5aX4rkQcO1AHewX/ydWOujFtMBk4QD/asyDPKBv+bKwO6f/msM+Wqen8I+DbHC0PH/2K15gQ3pQ==", - "requires": { - "tslib": "^2.1.0" - } - }, - "@material/floating-label": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-MZIVki9uD6JMyfQ6v5FIgt2WEZQ3fOCpoOiE8c9cHuNiawVJc3pmoA5wT/38hJs3iMCx86D1jL1vK9UdyIdF7A==", - "requires": { - "@material/animation": "12.0.0-canary.22d29cbb4.0", - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/dom": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/rtl": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "@material/typography": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/form-field": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/form-field/-/form-field-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-wYNyh1RMqEviuWcredWYx8ENEjR1GYdQu/NE9SKlfK7zKsFxF7szwHDd/3cZd7BSYVJUeylveDW+KgXQaW0YpQ==", - "requires": { - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/ripple": "12.0.0-canary.22d29cbb4.0", - "@material/rtl": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "@material/typography": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/icon-button": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/icon-button/-/icon-button-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-2cKO9FIEYwQqd6qlvuC2IbZQ3m8xvw690sx+H/+1UFs17TY/STDfJRj1p5qf+MnIqaiz5jsoxQemuUkcej+uBw==", - "requires": { - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/density": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/ripple": "12.0.0-canary.22d29cbb4.0", - "@material/rtl": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "@material/touch-target": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/line-ripple": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-9LL/d3jWNesupmwvZtNbV2B1rc1i5BHatFgVt62B1xvfaViRL7EyS0K/+kv9SPWU6nqPLfdj33vOMukn2zIgAg==", - "requires": { - "@material/animation": "12.0.0-canary.22d29cbb4.0", - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/linear-progress": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/linear-progress/-/linear-progress-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-SuEJPdtMbY9hN7X8s9Y8MzVfnmQy32gi4cSIv3r3aL5wmfO29Dg5Gw8OkggEuVjy0QKTXSN9N74WdCdpQ5rUPw==", - "requires": { - "@material/animation": "12.0.0-canary.22d29cbb4.0", - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/progress-indicator": "12.0.0-canary.22d29cbb4.0", - "@material/rtl": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/list": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/list/-/list-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-Vai+ggNyDBuWM0ihBs3ELGEKCdRmFoTFEhfcZ321VEI2YE8EY6eW1tvazzBfSzpLZkrqcn2QkqD6UpQBzkp4AA==", - "requires": { - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/density": "12.0.0-canary.22d29cbb4.0", - "@material/dom": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/ripple": "12.0.0-canary.22d29cbb4.0", - "@material/rtl": "12.0.0-canary.22d29cbb4.0", - "@material/shape": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "@material/typography": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/menu": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/menu/-/menu-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-8JMFM/QdIC+CRDf79uSe5b4/kCF+3Re90OYlCVaT8LyfYGzYNtBQ8LPKaWlmS2fRN0eIBd1faoUGO0bvslulhg==", - "requires": { - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/dom": "12.0.0-canary.22d29cbb4.0", - "@material/elevation": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/list": "12.0.0-canary.22d29cbb4.0", - "@material/menu-surface": "12.0.0-canary.22d29cbb4.0", - "@material/ripple": "12.0.0-canary.22d29cbb4.0", - "@material/rtl": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/menu-surface": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-kvfewRPo4sJtGzBK/T94jjRYnnIaQbC5xqQ+AmGZHGUBsV713cVE1IWVSm0d+7MbERsqKMG9/JZik2Um3YZetQ==", - "requires": { - "@material/animation": "12.0.0-canary.22d29cbb4.0", - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/elevation": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/rtl": "12.0.0-canary.22d29cbb4.0", - "@material/shape": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/mwc-base": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-base/-/mwc-base-0.22.1.tgz", - "integrity": "sha512-KtQf4lQUoTQuetfhfRbVJhsXVcpX74LP4JI/cLmx+SGbpG+pXXWf6VI2MvZY2UoHVEkldqPHndeuqctBoY7vgg==", - "requires": { - "@material/base": "=12.0.0-canary.22d29cbb4.0", - "@material/dom": "=12.0.0-canary.22d29cbb4.0", - "lit-element": "^2.5.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-button": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-button/-/mwc-button-0.22.1.tgz", - "integrity": "sha512-Z+NOM+d7QkmIOGbVT7BA/rzLJMXGaxC4Bp+dXcm3ESu6ohPBtG878IyZGSGiMXXDtmAKgMAIp74z4gE/Y0j1pA==", - "requires": { - "@material/mwc-icon": "^0.22.1", - "@material/mwc-ripple": "^0.22.1", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-checkbox": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-checkbox/-/mwc-checkbox-0.22.1.tgz", - "integrity": "sha512-JfUEVWAos/sscPH1k9oUKhjtCbTuU4rl7GgKcenCF6EnxTaXbzxGJKPz28BUS5I14JM7vHNUwfqTC+M/87tNxg==", - "requires": { - "@material/mwc-base": "^0.22.1", - "@material/mwc-ripple": "^0.22.1", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-dialog": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-dialog/-/mwc-dialog-0.22.1.tgz", - "integrity": "sha512-NHHtsled57N2EjDLelEN5YeJSpW/PYxayA+d2B2zpQPbhqhl//VKxJ9fA6CPm1uc+Cvp2G7lbZ2oUUSQivu+Aw==", - "requires": { - "@material/dialog": "=12.0.0-canary.22d29cbb4.0", - "@material/dom": "=12.0.0-canary.22d29cbb4.0", - "@material/mwc-base": "^0.22.1", - "@material/mwc-button": "^0.22.1", - "blocking-elements": "^0.1.0", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1", - "wicg-inert": "^3.0.0" - } - }, - "@material/mwc-drawer": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-drawer/-/mwc-drawer-0.22.1.tgz", - "integrity": "sha512-klwo4VMIIeV4UY+0t4HJ5/2Z8hUjsPHoleEFamRf97yVgPnmCHHaXhe7fjq8srxgkXK81PzwA7PFGBofS248ag==", - "requires": { - "@material/drawer": "=12.0.0-canary.22d29cbb4.0", - "@material/mwc-base": "^0.22.1", - "blocking-elements": "^0.1.0", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1", - "wicg-inert": "^3.0.0" - } - }, - "@material/mwc-fab": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-fab/-/mwc-fab-0.22.1.tgz", - "integrity": "sha512-KFzZFFr/Nq3bJ0JJyEy7SHsvVLhoqMCTELEjcy2s4fZYT1mLUmHK+Iip1vuKP2I96Yvnym4wkFEcwz/zAMCWbA==", - "requires": { - "@material/mwc-ripple": "^0.22.1", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-floating-label": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-floating-label/-/mwc-floating-label-0.22.1.tgz", - "integrity": "sha512-BkFt9WL8RE05JESv73egh7XUsmXALL78u1ev98T579SER3kwfIepQhXTvAAnFRHFa7QjT8qa/U6RmsvHe1zYbg==", - "requires": { - "@material/floating-label": "=12.0.0-canary.22d29cbb4.0", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-formfield": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-formfield/-/mwc-formfield-0.22.1.tgz", - "integrity": "sha512-jk8YyX1STjh+HCQOjlEmtr+kVG8Nlkemh9GoVNkJoIH6k7n+WgYcVXoJtfGWJFBkO8kfHziRVeLRPGP8Nt8ErA==", - "requires": { - "@material/form-field": "=12.0.0-canary.22d29cbb4.0", - "@material/mwc-base": "^0.22.1", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-icon": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-icon/-/mwc-icon-0.22.1.tgz", - "integrity": "sha512-LX4MUThlYEBfpTr1O53J27KbzFhPbe2dBGouY9piztCI3FObbRVQI+LXFlXJm6KU0BzemaQfz105ZAuLlPAN4g==", - "requires": { - "lit-element": "^2.5.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-icon-button": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-icon-button/-/mwc-icon-button-0.22.1.tgz", - "integrity": "sha512-UHwWwzn9LrAKFmQLuKSMQZe1m+X0Xi//xAhLiIBOHaXyEH3QxmKr7pR82e8HQPc42+jUAxKUFmohMrppG6Dmcg==", - "requires": { - "@material/mwc-ripple": "^0.22.1", - "lit-element": "^2.5.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-icon-button-toggle": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-icon-button-toggle/-/mwc-icon-button-toggle-0.22.1.tgz", - "integrity": "sha512-4r2Hvmo8qhYfEmWNUPvXxmBY0PTdN3JIFvn7d8WPukPgVSCfhh8o4MbxySoHcuo81A+2K/eMRAiLNY7Y8O5Aew==", - "requires": { - "@material/mwc-base": "^0.22.1", - "@material/mwc-icon-button": "^0.22.1", - "@material/mwc-ripple": "^0.22.1", - "lit-element": "^2.5.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-line-ripple": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-line-ripple/-/mwc-line-ripple-0.22.1.tgz", - "integrity": "sha512-Wx2BHD+/z4Fm8TXyiv59UVeNAirunTfR3uCEjGMU/R7mXUwjpjOhY5bNYGUcP9VyMGG5CkLovc8XX96/iKs1ag==", - "requires": { - "@material/line-ripple": "=12.0.0-canary.22d29cbb4.0", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-linear-progress": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-linear-progress/-/mwc-linear-progress-0.22.1.tgz", - "integrity": "sha512-GqqUDomF1nZh6cN0Dgz41vphfvDR17+vdtYk1O5YU9ajW/yd+9SBqwbjfqo4g/jmCpJvMeKnBDZo3Hbc8KnK7g==", - "requires": { - "@material/linear-progress": "=12.0.0-canary.22d29cbb4.0", - "@material/mwc-base": "^0.22.1", - "@material/theme": "=12.0.0-canary.22d29cbb4.0", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-list": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-list/-/mwc-list-0.22.1.tgz", - "integrity": "sha512-NGfacR/vSHMte7BOrFM7Cafi+tRIeBH8vNFcpP7yjqPkYCXt/9cEw0j1KVtldCRi20V38vkewUKdh2v3DiP5dg==", - "requires": { - "@material/base": "=12.0.0-canary.22d29cbb4.0", - "@material/dom": "=12.0.0-canary.22d29cbb4.0", - "@material/list": "=12.0.0-canary.22d29cbb4.0", - "@material/mwc-base": "^0.22.1", - "@material/mwc-checkbox": "^0.22.1", - "@material/mwc-radio": "^0.22.1", - "@material/mwc-ripple": "^0.22.1", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-menu": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-menu/-/mwc-menu-0.22.1.tgz", - "integrity": "sha512-fY7dyxv9aIccMqPp0+ihbXfB8g7Khvz7tYhtVMLqb6CgpdXf06a/lW50eN0Mk4GC+mFyN36HKHDP7LMLFfsvlA==", - "requires": { - "@material/menu": "=12.0.0-canary.22d29cbb4.0", - "@material/menu-surface": "=12.0.0-canary.22d29cbb4.0", - "@material/mwc-base": "^0.22.1", - "@material/mwc-list": "^0.22.1", - "@material/shape": "=12.0.0-canary.22d29cbb4.0", - "@material/theme": "=12.0.0-canary.22d29cbb4.0", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-notched-outline": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-notched-outline/-/mwc-notched-outline-0.22.1.tgz", - "integrity": "sha512-Bi+CKK24/ypgQZech+vUOWPR8hjPxXILf+mt5liVoNXddGITbdFAShFndNb4Ln4Rn3omzvC63enhpYSS4ByRNw==", - "requires": { - "@material/mwc-base": "^0.22.1", - "@material/notched-outline": "=12.0.0-canary.22d29cbb4.0", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-radio": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-radio/-/mwc-radio-0.22.1.tgz", - "integrity": "sha512-pFVuDl/bSCK7gVXC54Lsm6lMclt8MYk0u4yVsjaEUTeFk0xMK1ZvoXifIkW0IHhAJVmWgGpWX57wSzLrRZbUNw==", - "requires": { - "@material/mwc-base": "^0.22.1", - "@material/mwc-ripple": "^0.22.1", - "@material/radio": "=12.0.0-canary.22d29cbb4.0", - "lit-element": "^2.5.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-ripple": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-ripple/-/mwc-ripple-0.22.1.tgz", - "integrity": "sha512-QQyWWPBZ6veWNbBMWo8WQw0iY9QUjLLANorug8mPHv13ETdhwVUUozeKOY0ZCXWupNlqtap1Gd0IQjv6HVRMjA==", - "requires": { - "@material/dom": "=12.0.0-canary.22d29cbb4.0", - "@material/mwc-base": "^0.22.1", - "@material/ripple": "=12.0.0-canary.22d29cbb4.0", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-select": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-select/-/mwc-select-0.22.1.tgz", - "integrity": "sha512-P5o2DD48AtEpr+ZqbFlQ04GgSmcbhOTdQEeDBkDAxSsuErXQZgzY1aPCXlaDI0QzQ/gNP/13b4ejLqstVp9SQg==", - "requires": { - "@material/dom": "=12.0.0-canary.22d29cbb4.0", - "@material/floating-label": "=12.0.0-canary.22d29cbb4.0", - "@material/line-ripple": "=12.0.0-canary.22d29cbb4.0", - "@material/list": "=12.0.0-canary.22d29cbb4.0", - "@material/mwc-base": "^0.22.1", - "@material/mwc-floating-label": "^0.22.1", - "@material/mwc-icon": "^0.22.1", - "@material/mwc-line-ripple": "^0.22.1", - "@material/mwc-list": "^0.22.1", - "@material/mwc-menu": "^0.22.1", - "@material/mwc-notched-outline": "^0.22.1", - "@material/select": "=12.0.0-canary.22d29cbb4.0", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-snackbar": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-snackbar/-/mwc-snackbar-0.22.1.tgz", - "integrity": "sha512-4ZTb4Gk/zKJWvvqqKuOFo1NO68DnCgyQlktPdNNTGhCERdxkEQnZz+mkAw+Mfr5tCBizomgaFzd6tuAZCUutyQ==", - "requires": { - "@material/mwc-base": "^0.22.1", - "@material/snackbar": "=12.0.0-canary.22d29cbb4.0", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-switch": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-switch/-/mwc-switch-0.22.1.tgz", - "integrity": "sha512-KDY3uqT2qTEw6Z9TS91Ucs0LViUcMsP1XHu6ZNhbv9Ai1uK/i8pwVWAIGIX9Cm1iCdjiYGfKm4DZLORDb/rfEQ==", - "requires": { - "@material/mwc-base": "^0.22.1", - "@material/mwc-ripple": "^0.22.1", - "@material/switch": "=12.0.0-canary.22d29cbb4.0", - "lit-element": "^2.5.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-tab": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-tab/-/mwc-tab-0.22.1.tgz", - "integrity": "sha512-sNPE8kRQEH04vEStxiidTjpyuHc+5Wm8+OVU8wrf6ChJa8KUV5bi2blWm6PW4rfQRo2Bs8AarDXv15t4wv3XWg==", - "requires": { - "@material/mwc-base": "^0.22.1", - "@material/mwc-ripple": "^0.22.1", - "@material/mwc-tab-indicator": "^0.22.1", - "@material/tab": "=12.0.0-canary.22d29cbb4.0", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-tab-bar": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-tab-bar/-/mwc-tab-bar-0.22.1.tgz", - "integrity": "sha512-USn9pIMNfz2vPh7w2U55j0EVr82x3odq9VdcDGG5d4jWwzMPjJ9CKMjqgFrlIiPmxieD5zeSW0LauGhwv6ujOg==", - "requires": { - "@material/mwc-base": "^0.22.1", - "@material/mwc-tab": "^0.22.1", - "@material/mwc-tab-scroller": "^0.22.1", - "@material/tab": "=12.0.0-canary.22d29cbb4.0", - "@material/tab-bar": "=12.0.0-canary.22d29cbb4.0", - "lit-element": "^2.5.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-tab-indicator": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-tab-indicator/-/mwc-tab-indicator-0.22.1.tgz", - "integrity": "sha512-/Q8vju7DAysqz3Fo+IINaGSeU9BinZbdaSUyRFjfrUWlzJCE6IYYB7zMyc2W+EjaxhjftpL/N3Sw50Xw+pAL+A==", - "requires": { - "@material/mwc-base": "^0.22.1", - "@material/tab-indicator": "=12.0.0-canary.22d29cbb4.0", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-tab-scroller": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-tab-scroller/-/mwc-tab-scroller-0.22.1.tgz", - "integrity": "sha512-dqAsXS7Nyw61vVb6d11zDg0xuvAYfOyPmz6wLwcXxzSlHOCfkuFu2fcjhssZIlW3DzzzrCw7aZ+T6mHOZcr0dg==", - "requires": { - "@material/dom": "=12.0.0-canary.22d29cbb4.0", - "@material/mwc-base": "^0.22.1", - "@material/tab-scroller": "=12.0.0-canary.22d29cbb4.0", - "lit-element": "^2.5.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-textarea": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-textarea/-/mwc-textarea-0.22.1.tgz", - "integrity": "sha512-ta5ARYpxaCRvseXTKkp8tFBfJ0oP8FWsE4FymrjV5b+UEAEzAzjcWWolIDyS7DdixSj1ROI5dJHsU/on5lWPjw==", - "requires": { - "@material/mwc-base": "^0.22.1", - "@material/mwc-textfield": "^0.22.1", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-textfield": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-textfield/-/mwc-textfield-0.22.1.tgz", - "integrity": "sha512-7xLlW2B1wMnCi2JSlOELELPEUda0w6bWpjn4LB4UPi1hAWG8VR+Rn5rR6q4NDav9pad+qA7+PGjNlE32xVUm7g==", - "requires": { - "@material/floating-label": "=12.0.0-canary.22d29cbb4.0", - "@material/line-ripple": "=12.0.0-canary.22d29cbb4.0", - "@material/mwc-base": "^0.22.1", - "@material/mwc-floating-label": "^0.22.1", - "@material/mwc-line-ripple": "^0.22.1", - "@material/mwc-notched-outline": "^0.22.1", - "@material/textfield": "=12.0.0-canary.22d29cbb4.0", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-top-app-bar": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-top-app-bar/-/mwc-top-app-bar-0.22.1.tgz", - "integrity": "sha512-SHQLjMrHRYsJaT0+8rNjkYW9LDi93AsGX+USuCYhVPeMhBUcqVmr09lTCqj3xyJ3JAy43XONPhtXjxlMT1jCNg==", - "requires": { - "@material/mwc-base": "^0.22.1", - "@material/top-app-bar": "=12.0.0-canary.22d29cbb4.0", - "lit-element": "^2.5.1", - "lit-html": "^1.4.1", - "tslib": "^2.0.1" - } - }, - "@material/mwc-top-app-bar-fixed": { - "version": "0.22.1", - "resolved": "https://registry.npmjs.org/@material/mwc-top-app-bar-fixed/-/mwc-top-app-bar-fixed-0.22.1.tgz", - "integrity": "sha512-ZpQGKmqmSHp1izqX1U0S+3E8s5xLSB81cjFlQPFKG6arU6TO8Xqyzd05JPfFHfau5aZeHQuJB0MOGN2QT31UCw==", - "requires": { - "@material/mwc-top-app-bar": "^0.22.1", - "@material/top-app-bar": "=12.0.0-canary.22d29cbb4.0", - "lit-element": "^2.5.1", - "tslib": "^2.0.1" - } - }, - "@material/notched-outline": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-LgVwQri2sI/EnAbSjyyzhifjcBKpYO48oy6HyRg6Cq/ZxOgNv3u/VG4fE3ToyNLe8pMPkfQsn2g8czuZoRYwxg==", - "requires": { - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/floating-label": "12.0.0-canary.22d29cbb4.0", - "@material/rtl": "12.0.0-canary.22d29cbb4.0", - "@material/shape": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/progress-indicator": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-XnG61vDDUPQWK3obQcPHaTPxEKFfPKo8qtiKxkFnGdzIeezDGj7n9m8gdvzcqed8rGZWCNKYOzodkRfplStpMw==", - "requires": { - "tslib": "^2.1.0" - } - }, - "@material/radio": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/radio/-/radio-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-piGy+6YEtW3odicIImRGnc3uY0iD42IAe4+pnVo36KsfHLm5peYuEc0jrLI4zdmOPYlRxSskIbAAzfMKdwKG1A==", - "requires": { - "@material/animation": "12.0.0-canary.22d29cbb4.0", - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/density": "12.0.0-canary.22d29cbb4.0", - "@material/dom": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/ripple": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "@material/touch-target": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/ripple": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-IzBtXi4EWx27Hkfd5Zkx/MrZAXJZe0AAQCo37Etl/af0/aJPIOyCOdHQiwoK2FqRH71pmNfUGrUWOeUxFyaSdw==", - "requires": { - "@material/animation": "12.0.0-canary.22d29cbb4.0", - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/dom": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/rtl": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-R7u7w5U+mvRwsj15tpf/CbALs3FrGVidsTkv8C1uZDK1ae490De8HSe839lcFcXmM8c/PFSx5B3rKyQG2AyraQ==", - "requires": { - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/select": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/select/-/select-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-ROpNqkHkv/ZUWNf4tWxDo/L6P2QwWaNKADSqYpg/XXecAm7NdBX5aDo63VCBPCm57JkAdBWJQB5MRrbkaWLTfA==", - "requires": { - "@material/animation": "12.0.0-canary.22d29cbb4.0", - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/density": "12.0.0-canary.22d29cbb4.0", - "@material/dom": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/floating-label": "12.0.0-canary.22d29cbb4.0", - "@material/line-ripple": "12.0.0-canary.22d29cbb4.0", - "@material/list": "12.0.0-canary.22d29cbb4.0", - "@material/menu": "12.0.0-canary.22d29cbb4.0", - "@material/menu-surface": "12.0.0-canary.22d29cbb4.0", - "@material/notched-outline": "12.0.0-canary.22d29cbb4.0", - "@material/ripple": "12.0.0-canary.22d29cbb4.0", - "@material/rtl": "12.0.0-canary.22d29cbb4.0", - "@material/shape": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "@material/typography": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/shape": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/shape/-/shape-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-yKC+cqdjGYg3sseZ4baNe9OLhBENHwX2SpJGZORZ7ix4/8pxzFG3wO80eZ8LsldzYem9MmtcbRilBZ4rvvxh0A==", - "requires": { - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/rtl": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/snackbar": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/snackbar/-/snackbar-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-NDYR2rYyF2kbQYCec/I0NmAPtnXMBpGYEQ4/m10rAzTP2hsyySZs0cKk54/V3czT+gFz9C9W3zCm1CwgJwL5fA==", - "requires": { - "@material/animation": "12.0.0-canary.22d29cbb4.0", - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/button": "12.0.0-canary.22d29cbb4.0", - "@material/dom": "12.0.0-canary.22d29cbb4.0", - "@material/elevation": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/icon-button": "12.0.0-canary.22d29cbb4.0", - "@material/ripple": "12.0.0-canary.22d29cbb4.0", - "@material/rtl": "12.0.0-canary.22d29cbb4.0", - "@material/shape": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "@material/typography": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/switch": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/switch/-/switch-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-kubSphtXl74TC/PAjp67lYi7Ngk0MEKTLzp1ZHiMHElew2Z9/IYHP0pPaQRTkBY0ddIx6hVdHMiMf8qB4zuz2w==", - "requires": { - "@material/animation": "12.0.0-canary.22d29cbb4.0", - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/density": "12.0.0-canary.22d29cbb4.0", - "@material/dom": "12.0.0-canary.22d29cbb4.0", - "@material/elevation": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/ripple": "12.0.0-canary.22d29cbb4.0", - "@material/rtl": "12.0.0-canary.22d29cbb4.0", - "@material/shape": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/tab": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/tab/-/tab-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-Tmb+8Dsx7wItbqOW4JHUVIq3I/inM3l/gk6EV/ctNeyz8coPIJL39yN4CcTX+VHsYykF+tK3jz4QSQX0ASfimQ==", - "requires": { - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/elevation": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/ripple": "12.0.0-canary.22d29cbb4.0", - "@material/rtl": "12.0.0-canary.22d29cbb4.0", - "@material/tab-indicator": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "@material/typography": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/tab-bar": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/tab-bar/-/tab-bar-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-cxGyfONh9tFK2tISHDSAWFfH/uxH/HfTTjuDQIiPkOLmr6oVgGPXP2AdsZ0Z60HJCAedbR9mdWCesEk8w4f8+Q==", - "requires": { - "@material/animation": "12.0.0-canary.22d29cbb4.0", - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/density": "12.0.0-canary.22d29cbb4.0", - "@material/elevation": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/tab": "12.0.0-canary.22d29cbb4.0", - "@material/tab-indicator": "12.0.0-canary.22d29cbb4.0", - "@material/tab-scroller": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "@material/typography": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/tab-indicator": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/tab-indicator/-/tab-indicator-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-7MeJG5bN7WCyNsjT+7iGci2XuIkwUXA3QRz3La2zKPBxnPkRiz7GUwkpr1b5h6wPpYfCWKyCbixQD9Ufgq3kKA==", - "requires": { - "@material/animation": "12.0.0-canary.22d29cbb4.0", - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/tab-scroller": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/tab-scroller/-/tab-scroller-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-IaFQiwJ/MKhbFvKcGmlAFNHCxXf5THyjefgzav/k0Fu49vzQFA1ZiSTvPU7/d0vV/G2amaba+l5w9TP9/n4KFw==", - "requires": { - "@material/animation": "12.0.0-canary.22d29cbb4.0", - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/dom": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/tab": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/textfield": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-OJMgS0iniOvnRJa5DWyFqg1VIC77KEdoXern9OQiQphUE1LJ2Kbbwwj0GgyULuxhcUlUSnnisw+J5IfWK7kMUg==", - "requires": { - "@material/animation": "12.0.0-canary.22d29cbb4.0", - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/density": "12.0.0-canary.22d29cbb4.0", - "@material/dom": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/floating-label": "12.0.0-canary.22d29cbb4.0", - "@material/line-ripple": "12.0.0-canary.22d29cbb4.0", - "@material/notched-outline": "12.0.0-canary.22d29cbb4.0", - "@material/ripple": "12.0.0-canary.22d29cbb4.0", - "@material/rtl": "12.0.0-canary.22d29cbb4.0", - "@material/shape": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "@material/typography": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/theme": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/theme/-/theme-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-r4xYCgc+CrbvDxCINVqXwAFWQ1WgV3s2+bUse/2iw53YqyemhhtzFjfp+DXLdC4zJSOuObWC45eaDKeseLMGMw==", - "requires": { - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/top-app-bar": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/top-app-bar/-/top-app-bar-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-fTS0kOHyUAKBhtz8olDvsCtZ6VxJEJ5QNUAZdHbJsTjig87poLLUP2CKJ18t5DjzW/KFMFjNYMSbah6NOREvqg==", - "requires": { - "@material/animation": "12.0.0-canary.22d29cbb4.0", - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/elevation": "12.0.0-canary.22d29cbb4.0", - "@material/ripple": "12.0.0-canary.22d29cbb4.0", - "@material/rtl": "12.0.0-canary.22d29cbb4.0", - "@material/shape": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "@material/typography": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/touch-target": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-aPEMmR+xRI5ywD9JM+njTgU14CCsgRSS7CLZwd+wsfJkMYPCi8rBM3t23bu/jILa4IT6TIe32Ew1xIBVxJNpgQ==", - "requires": { - "@material/base": "12.0.0-canary.22d29cbb4.0", - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@material/typography": { - "version": "12.0.0-canary.22d29cbb4.0", - "resolved": "https://registry.npmjs.org/@material/typography/-/typography-12.0.0-canary.22d29cbb4.0.tgz", - "integrity": "sha512-lIzU4IFjaSfVRbhsabTiri8CD+fEe9/DaGpoDm89sHm7b8RbN1+m+7OrePICcWgWFo2swRndph8qhzh7gTYdew==", - "requires": { - "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", - "@material/theme": "12.0.0-canary.22d29cbb4.0", - "tslib": "^2.1.0" - } - }, - "@mdn/browser-compat-data": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.1.0.tgz", - "integrity": "sha512-58eB5/ovJ5CfArzZwmZdenF/WlAGGS+1PG8RUb3oJ4st9exETBjClmFC0E1uVrZG1BwPaT205RKS8RhnUh5x3Q==", - "dev": true - }, - "@microsoft/tsdoc": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.13.2.tgz", - "integrity": "sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg==", - "dev": true - }, - "@microsoft/tsdoc-config": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.15.2.tgz", - "integrity": "sha512-mK19b2wJHSdNf8znXSMYVShAHktVr/ib0Ck2FA3lsVBSEhSI/TfXT7DJQkAYgcztTuwazGcg58ZjYdk0hTCVrA==", - "dev": true, - "requires": { - "@microsoft/tsdoc": "0.13.2", - "ajv": "~6.12.6", - "jju": "~1.4.0", - "resolve": "~1.19.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/arborist": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-2.10.0.tgz", - "integrity": "sha512-CLnD+zXG9oijEEzViimz8fbOoFVb7hoypiaf7p6giJhvYtrxLAyY3cZAMPIFQvsG731+02eMDp3LqVBNo7BaZA==", - "dev": true, - "requires": { - "@isaacs/string-locale-compare": "^1.0.1", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^1.0.2", - "@npmcli/metavuln-calculator": "^1.1.0", - "@npmcli/move-file": "^1.1.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^1.0.1", - "@npmcli/package-json": "^1.0.1", - "@npmcli/run-script": "^1.8.2", - "bin-links": "^2.2.1", - "cacache": "^15.0.3", - "common-ancestor-path": "^1.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "npm-install-checks": "^4.0.0", - "npm-package-arg": "^8.1.5", - "npm-pick-manifest": "^6.1.0", - "npm-registry-fetch": "^11.0.0", - "pacote": "^11.3.5", - "parse-conflict-json": "^1.1.1", - "proc-log": "^1.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "ssri": "^8.0.1", - "treeverse": "^1.0.4", - "walk-up-path": "^1.0.0" - } - }, - "@npmcli/fs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz", - "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", - "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - } - }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "@npmcli/map-workspaces": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-1.0.4.tgz", - "integrity": "sha512-wVR8QxhyXsFcD/cORtJwGQodeeaDf0OxcHie8ema4VgFeqwYkFsDPnSrIRSytX8xR6nKPAH89WnwTcaU608b/Q==", - "dev": true, - "requires": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^7.1.6", - "minimatch": "^3.0.4", - "read-package-json-fast": "^2.0.1" - } - }, - "@npmcli/metavuln-calculator": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-1.1.1.tgz", - "integrity": "sha512-9xe+ZZ1iGVaUovBVFI9h3qW+UuECUzhvZPxK9RaEA2mjU26o5D0JloGYWwLYvQELJNmBdQB6rrpuN8jni6LwzQ==", - "dev": true, - "requires": { - "cacache": "^15.0.5", - "pacote": "^11.1.11", - "semver": "^7.3.2" - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@npmcli/name-from-folder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", - "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", - "dev": true - }, - "@npmcli/node-gyp": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", - "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", - "dev": true - }, - "@npmcli/package-json": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-1.0.1.tgz", - "integrity": "sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.1" - } - }, - "@npmcli/promise-spawn": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", - "dev": true, - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/run-script": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.6.tgz", - "integrity": "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g==", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^7.1.0", - "read-package-json-fast": "^2.0.1" - } - }, - "@open-wc/building-utils": { - "version": "2.18.4", - "resolved": "https://registry.npmjs.org/@open-wc/building-utils/-/building-utils-2.18.4.tgz", - "integrity": "sha512-wjNp9oE1SFsiBEqaI67ff60KHDpDbGMNF+82pvCHe412SFY4q8DNy8A+hesj1nZsuZHH1/olDfzBDbYKAnmgMg==", - "dev": true, - "requires": { - "@babel/core": "^7.11.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@webcomponents/shadycss": "^1.10.2", - "@webcomponents/webcomponentsjs": "^2.5.0", - "arrify": "^2.0.1", - "browserslist": "^4.16.0", - "chokidar": "^3.4.3", - "clean-css": "^4.2.3", - "clone": "^2.1.2", - "core-js-bundle": "^3.8.1", - "deepmerge": "^4.2.2", - "es-module-shims": "^0.4.7", - "html-minifier-terser": "^5.1.1", - "lru-cache": "^5.1.1", - "minimatch": "^3.0.4", - "parse5": "^5.1.1", - "path-is-inside": "^1.0.2", - "regenerator-runtime": "^0.13.7", - "resolve": "^1.19.0", - "rimraf": "^3.0.2", - "shady-css-scoped-element": "^0.0.2", - "systemjs": "^6.8.3", - "terser": "^4.6.7", - "valid-url": "^1.0.9", - "whatwg-fetch": "^3.5.0", - "whatwg-url": "^7.1.0" - }, - "dependencies": { - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "@open-wc/chai-dom-equals": { - "version": "0.12.36", - "resolved": "https://registry.npmjs.org/@open-wc/chai-dom-equals/-/chai-dom-equals-0.12.36.tgz", - "integrity": "sha512-Gt1fa37h4rtWPQGETSU4n1L678NmMi9KwHM1sH+JCGcz45rs8DBPx7MUVeGZ+HxRlbEI5t9LU2RGGv6xT2OlyA==", - "dev": true, - "requires": { - "@open-wc/semantic-dom-diff": "^0.13.16", - "@types/chai": "^4.1.7" - }, - "dependencies": { - "@open-wc/semantic-dom-diff": { - "version": "0.13.21", - "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.13.21.tgz", - "integrity": "sha512-BONpjHcGX2zFa9mfnwBCLEmlDsOHzT+j6Qt1yfK3MzFXFtAykfzFjAgaxPetu0YbBlCfXuMlfxI4vlRGCGMvFg==", - "dev": true - } - } - }, - "@open-wc/dedupe-mixin": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@open-wc/dedupe-mixin/-/dedupe-mixin-1.3.0.tgz", - "integrity": "sha512-UfdK1MPnR6T7f3svzzYBfu3qBkkZ/KsPhcpc3JYhsUY4hbpwNF9wEQtD4Z+/mRqMTJrKg++YSxIxE0FBhY3RIw==", - "dev": true - }, - "@open-wc/eslint-config": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@open-wc/eslint-config/-/eslint-config-4.3.0.tgz", - "integrity": "sha512-kCxFWQ1AR4meTmWJGnK36LJYqDJeFGjlj6n4vLjAW3/c1VUyYQKL90vrNKy/OHS9kTjc9dcH5D64myAbNx6r1w==", - "dev": true, - "requires": { - "eslint": "^7.6.0", - "eslint-config-airbnb-base": "^14.0.0", - "eslint-plugin-html": "^6.0.0", - "eslint-plugin-import": "^2.18.2", - "eslint-plugin-lit": "^1.2.0", - "eslint-plugin-lit-a11y": "^1.0.1", - "eslint-plugin-no-only-tests": "^2.4.0", - "eslint-plugin-wc": "^1.2.0" - } - }, - "@open-wc/scoped-elements": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@open-wc/scoped-elements/-/scoped-elements-1.3.4.tgz", - "integrity": "sha512-WD+ObocdzcFCpBxnc8bQa7NoATeA+tJrK0/c/yV1Nx4leV+1PmJNNu+WCcuckBEGd0Op6FP8w1TidoqmVVba6g==", - "dev": true, - "requires": { - "@open-wc/dedupe-mixin": "^1.3.0", - "lit-html": "^1.0.0" - } - }, - "@open-wc/semantic-dom-diff": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.19.5.tgz", - "integrity": "sha512-Wi0Fuj3dzqlWClU0y+J4k/nqTcH0uwgOWxZXPyeyG3DdvuyyjgiT4L4I/s6iVShWQvvEsyXnj7yVvixAo3CZvg==", - "dev": true, - "requires": { - "@types/chai": "^4.2.11", - "@web/test-runner-commands": "^0.5.7" - } - }, - "@open-wc/testing": { - "version": "2.5.33", - "resolved": "https://registry.npmjs.org/@open-wc/testing/-/testing-2.5.33.tgz", - "integrity": "sha512-+EJNs0i+VV4nE+BrG70l2DNGXOZTSrluruaaU06HUSk57ZlKa+kIxWmkLxCOLlbgnQgrPrQWxbs3lgB1tIx/YA==", - "dev": true, - "requires": { - "@open-wc/chai-dom-equals": "^0.12.36", - "@open-wc/semantic-dom-diff": "^0.19.3", - "@open-wc/testing-helpers": "^1.8.12", - "@types/chai": "^4.2.11", - "@types/chai-dom": "^0.0.9", - "@types/mocha": "^5.2.7", - "@types/sinon-chai": "^3.2.3", - "chai": "^4.2.0", - "chai-a11y-axe": "^1.3.1", - "chai-dom": "^1.8.1", - "mocha": "^6.2.2", - "sinon-chai": "^3.5.0" - } - }, - "@open-wc/testing-helpers": { - "version": "1.8.12", - "resolved": "https://registry.npmjs.org/@open-wc/testing-helpers/-/testing-helpers-1.8.12.tgz", - "integrity": "sha512-+4exEHYvnFqI1RGDDIKFHPZ7Ws5NK1epvEku3zLaOYN3zc+huX19SndNc5+X++v8A+quN/iXbHlh80ROyNaYDA==", - "dev": true, - "requires": { - "@open-wc/scoped-elements": "^1.2.4", - "lit-element": "^2.2.1", - "lit-html": "^1.0.0" - } - }, - "@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - } - }, - "@rollup/plugin-commonjs": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-16.0.0.tgz", - "integrity": "sha512-LuNyypCP3msCGVQJ7ki8PqYdpjfEkE/xtFa5DqlF+7IBD0JsfMZ87C58heSwIMint58sAUZbt3ITqOmdQv/dXw==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - }, - "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-inject": { - "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.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": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", - "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.0.8" - } - }, - "@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - } - }, - "@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - } - }, - "@sindresorhus/is": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", - "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", - "dev": true - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", - "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@sinonjs/samsam": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.0.2.tgz", - "integrity": "sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.6.0", - "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" - } - }, - "@sinonjs/text-encoding": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", - "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", - "dev": true - }, - "@snowpack/plugin-typescript": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@snowpack/plugin-typescript/-/plugin-typescript-1.2.1.tgz", - "integrity": "sha512-wU+JNaMVkqGsqTaUY7TnEMhGt/3URTgA9dpMCtZX6wn/ceA7Gwlmue/sOLynf0OTNLygHPvjiQECQYkEi3LTtg==", - "dev": true, - "requires": { - "execa": "^5.0.0", - "npm-run-path": "^4.0.1" - } - }, - "@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", - "dev": true, - "requires": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" - }, - "dependencies": { - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - } - } - }, - "@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@types/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", - "dev": true, - "requires": { - "@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.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", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", - "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/browserslist": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@types/browserslist/-/browserslist-4.15.0.tgz", - "integrity": "sha512-h9LyKErRGZqMsHh9bd+FE8yCIal4S0DxKTOeui56VgVXqa66TKiuaIUxCAI7c1O0LjaUzOTcsMyOpO9GetozRA==", - "dev": true, - "requires": { - "browserslist": "*" - } - }, - "@types/browserslist-useragent": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/browserslist-useragent/-/browserslist-useragent-3.0.4.tgz", - "integrity": "sha512-S/AhrluMHi8EcuxxCtTDBGr8u+XvwUfLvZdARuIS2LFZ/lHoeaeJJYCozD68GKH6wm52FbIHq4WWPF/Ec6a9qA==", - "dev": true - }, - "@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", - "dev": true, - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "@types/caniuse-api": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/caniuse-api/-/caniuse-api-3.0.2.tgz", - "integrity": "sha512-YfCDMn7R59n7GFFfwjPAM0zLJQy4UvveC32rOJBmTqJJY8uSRqM4Dc7IJj8V9unA48Qy4nj5Bj3jD6Q8VZ1Seg==", - "dev": true - }, - "@types/chai": { - "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": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/@types/chai-dom/-/chai-dom-0.0.9.tgz", - "integrity": "sha512-jj4F2NJog2/GBYsyJ8+NvhnWUBbPY4MUAKLdPJE6+568rw12GGXvj0ycUuP5nndVrnJgozmJAoMTvxvjJATXWw==", - "dev": true, - "requires": { - "@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", - "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", - "dev": true - }, - "@types/command-line-usage": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.2.tgz", - "integrity": "sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg==", - "dev": true - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==", - "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", - "integrity": "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/express": "*", - "@types/keygrip": "*", - "@types/node": "*" - } - }, - "@types/debounce": { - "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": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "@types/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@types/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-bsKkeSqN7HYyYntFRAmzcwx/dKW4Wa+KVMTInANlI72PWLQmOpZu96j0OqHZGArW4VQwCmJPteQlXaUDeOB0WQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.26", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.26.tgz", - "integrity": "sha512-zeu3tpouA043RHxW0gzRxwCHchMgftE8GArRsvYT0ByDMbn19olQHx5jLue0LxWY6iYtXb7rXmuVtSkhy9YZvQ==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/http-assert": { - "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": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true - }, - "@types/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.1.tgz", - "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/keygrip": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", - "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==", - "dev": true - }, - "@types/keyv": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", - "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/koa": { - "version": "2.13.4", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.4.tgz", - "integrity": "sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw==", - "dev": true, - "requires": { - "@types/accepts": "*", - "@types/content-disposition": "*", - "@types/cookies": "*", - "@types/http-assert": "*", - "@types/http-errors": "*", - "@types/keygrip": "*", - "@types/koa-compose": "*", - "@types/node": "*" - } - }, - "@types/koa__cors": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/koa__cors/-/koa__cors-3.0.3.tgz", - "integrity": "sha512-74Xb4hJOPGKlrQ4PRBk1A/p0gfLpgbnpT0o67OMVbwyeMXvlBN+ZCRztAAmkKZs+8hKbgMutUlZVbA52Hr/0IA==", - "dev": true, - "requires": { - "@types/koa": "*" - } - }, - "@types/koa-compose": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", - "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==", - "dev": true, - "requires": { - "@types/koa": "*" - } - }, - "@types/koa-compress": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@types/koa-compress/-/koa-compress-2.0.9.tgz", - "integrity": "sha512-1Sa9OsbHd2N2N7gLpdIRHe8W99EZbfIR31D7Iisx16XgwZCnWUtGXzXQejhu74Y1pE/wILqBP6VL49ch/MVpZw==", - "dev": true, - "requires": { - "@types/koa": "*", - "@types/node": "*" - } - }, - "@types/koa-etag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/koa-etag/-/koa-etag-3.0.0.tgz", - "integrity": "sha512-gXQUtKGEnCy0sZLG+uE3wL4mvY1CBPcb6ECjpAoD8RGYy/8ACY1B084k8LTFPIdVcmy7GD6Y4n3up3jnupofcQ==", - "dev": true, - "requires": { - "@types/etag": "*", - "@types/koa": "*" - } - }, - "@types/koa-send": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@types/koa-send/-/koa-send-4.1.3.tgz", - "integrity": "sha512-daaTqPZlgjIJycSTNjKpHYuKhXYP30atFc1pBcy6HHqB9+vcymDgYTguPdx9tO4HMOqNyz6bz/zqpxt5eLR+VA==", - "dev": true, - "requires": { - "@types/koa": "*" - } - }, - "@types/koa-static": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/koa-static/-/koa-static-4.0.2.tgz", - "integrity": "sha512-ns/zHg+K6XVPMuohjpOlpkR1WLa4VJ9czgUP9bxkCDn0JZBtUWbD/wKDZzPGDclkQK1bpAEScufCHOy8cbfL0w==", - "dev": true, - "requires": { - "@types/koa": "*", - "@types/koa-send": "*" - } - }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true - }, - "@types/marked": { - "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": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "@types/mime-types": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.1.tgz", - "integrity": "sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "@types/mocha": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", - "dev": true - }, - "@types/node": { - "version": "16.11.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.11.tgz", - "integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/parse5": { - "version": "2.2.34", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz", - "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/path-is-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/path-is-inside/-/path-is-inside-1.0.0.tgz", - "integrity": "sha512-hfnXRGugz+McgX2jxyy5qz9sB21LRzlGn24zlwN2KEgoPtEvjzNRrLtUkOOebPDPZl3Rq7ywKxYvylVcEZDnEw==", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "dev": true, - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/sinon": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.6.tgz", - "integrity": "sha512-6EF+wzMWvBNeGrfP3Nx60hhx+FfwSg1JJBLAAP/IdIUq0EYkqCYf70VT3PhuhPX9eLD+Dp+lNdpb/ZeHG8Yezg==", - "dev": true, - "requires": { - "@sinonjs/fake-timers": "^7.1.0" - } - }, - "@types/sinon-chai": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.6.tgz", - "integrity": "sha512-Z57LprQ+yOQNu9d6mWdHNvnmncPXzDWGSeLj+8L075/QahToapC4Q13zAFRVKV4clyBmdJ5gz4xBfVkOso5lXw==", - "dev": true, - "requires": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "@types/trusted-types": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", - "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", - "dev": true - }, - "@types/whatwg-url": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-6.4.0.tgz", - "integrity": "sha512-tonhlcbQ2eho09am6RHnHOgvtDfDYINd5rgxD+2YSkKENooVCFsWizJz139MQW/PV8FfClyKrNe9ZbdHrSCxGg==", - "dev": true, - "requires": { - "@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": "*" - } - }, - "@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "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.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.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", - "dev": true - } - } - }, - "@typescript-eslint/experimental-utils": { - "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.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" - }, - "dependencies": { - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - } - } - }, - "@typescript-eslint/parser": { - "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.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.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.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - } - }, - "@typescript-eslint/types": { - "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.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.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "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.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/config-loader": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.1.3.tgz", - "integrity": "sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==", - "dev": true, - "requires": { - "semver": "^7.3.4" - } - }, - "@web/dev-server": { - "version": "0.1.28", - "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.28.tgz", - "integrity": "sha512-964NqgatvFWX7LM8QGlB1XpcJoUQRXZPiEn3XKgDIUSNS6JNCjGfQQ+TfxBlT5KBHYJakDYbTk+sdEeRi2gaLw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.11", - "@types/command-line-args": "^5.0.0", - "@web/config-loader": "^0.1.3", - "@web/dev-server-core": "^0.3.17", - "@web/dev-server-rollup": "^0.3.13", - "camelcase": "^6.2.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.1", - "debounce": "^1.2.0", - "deepmerge": "^4.2.2", - "ip": "^1.1.5", - "nanocolors": "^0.2.1", - "open": "^8.0.2", - "portfinder": "^1.0.28" - }, - "dependencies": { - "camelcase": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", - "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", - "dev": true - } - } - }, - "@web/dev-server-core": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.3.17.tgz", - "integrity": "sha512-vN1dwQ8yDHGiAvCeUo9xFfjo+pFl8TW+pON7k9kfhbegrrB8CKhJDUxmHbZsyQUmjf/iX57/LhuWj1xGhRL8AA==", - "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/dev-server-esbuild": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/@web/dev-server-esbuild/-/dev-server-esbuild-0.2.16.tgz", - "integrity": "sha512-a82uKy9vQ4HvfWtjd7hJ3GtaqkL2ofxpEu3a1wIZyXB2dFWPvhRSmLNe/4IPPHe4vj6PVdRpLSFPEA3lXUW5Pw==", - "dev": true, - "requires": { - "@mdn/browser-compat-data": "^4.0.0", - "@web/dev-server-core": "^0.3.17", - "esbuild": "^0.12.21", - "parse5": "^6.0.1", - "ua-parser-js": "^1.0.2" - }, - "dependencies": { - "esbuild": { - "version": "0.12.29", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.29.tgz", - "integrity": "sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g==", - "dev": true - } - } - }, - "@web/dev-server-rollup": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.13.tgz", - "integrity": "sha512-QaxEtsdL6+fktIa1ZL8VEtq4U7WB7ikKEnxkbhUpFknB+WSvwx6DUrvyBDuPckunpczCnljXBFPugu+2W6N8Fg==", - "dev": true, - "requires": { - "@rollup/plugin-node-resolve": "^11.0.1", - "@web/dev-server-core": "^0.3.16", - "nanocolors": "^0.2.1", - "parse5": "^6.0.1", - "rollup": "^2.58.0", - "whatwg-url": "^11.0.0" - } - }, - "@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.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", - "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", - "dev": true - } - } - }, - "@web/test-runner": { - "version": "0.13.22", - "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.13.22.tgz", - "integrity": "sha512-s4P3X4z8RlxqbQgO4K7aPVZTlum9juuQ9ZIxvZlua+KMTG5J5Utr7Drey/tGcx+BwVFUAtQLr20IEWA+38d+fA==", - "dev": true, - "requires": { - "@web/browser-logs": "^0.2.2", - "@web/config-loader": "^0.1.3", - "@web/dev-server": "^0.1.24", - "@web/test-runner-chrome": "^0.10.5", - "@web/test-runner-commands": "^0.5.10", - "@web/test-runner-core": "^0.10.22", - "@web/test-runner-mocha": "^0.7.5", - "camelcase": "^6.2.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.1", - "convert-source-map": "^1.7.0", - "diff": "^5.0.0", - "globby": "^11.0.1", - "nanocolors": "^0.2.1", - "portfinder": "^1.0.28", - "source-map": "^0.7.3" - }, - "dependencies": { - "camelcase": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", - "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - } - } - }, - "@web/test-runner-chrome": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.10.7.tgz", - "integrity": "sha512-DKJVHhHh3e/b6/erfKOy0a4kGfZ47qMoQRgROxi9T4F9lavEY3E5/MQ7hapHFM2lBF4vDrm+EWjtBdOL8o42tw==", - "dev": true, - "requires": { - "@web/test-runner-core": "^0.10.20", - "@web/test-runner-coverage-v8": "^0.4.8", - "chrome-launcher": "^0.15.0", - "puppeteer-core": "^13.1.3" - } - }, - "@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" - } - }, - "@web/test-runner-coverage-v8": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.4.8.tgz", - "integrity": "sha512-Ib0AscR8Xf9E/V7rf3XOVQTe4vKIbwSTupxV1xGgzj3x4RKUuMUg9FLz9EigZ5iN0mOzZKDllyRS523hbdhDtA==", - "dev": true, - "requires": { - "@web/test-runner-core": "^0.10.20", - "istanbul-lib-coverage": "^3.0.0", - "picomatch": "^2.2.2", - "v8-to-istanbul": "^8.0.0" - } - }, - "@web/test-runner-mocha": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.7.5.tgz", - "integrity": "sha512-12/OBq6efPCAvJpcz3XJs2OO5nHe7GtBibZ8Il1a0QtsGpRmuJ4/m1EF0Fj9f6KHg7JdpGo18A37oE+5hXjHwg==", - "dev": true, - "requires": { - "@types/mocha": "^8.2.0", - "@web/test-runner-core": "^0.10.20" - }, - "dependencies": { - "@types/mocha": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", - "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", - "dev": true - } - } - }, - "@webcomponents/shadycss": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.11.0.tgz", - "integrity": "sha512-L5O/+UPum8erOleNjKq6k58GVl3fNsEQdSOyh0EUhNmi7tHUyRuCJy1uqJiWydWcLARE5IPsMoPYMZmUGrz1JA==", - "dev": true - }, - "@webcomponents/webcomponentsjs": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.6.0.tgz", - "integrity": "sha512-Moog+Smx3ORTbWwuPqoclr+uvfLnciVd6wdCaVscHPrxbmQ/IJKm3wbB7hpzJtXWjAq2l/6QMlO85aZiOdtv5Q==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "abortcontroller-polyfill": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", - "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "ace-custom-element": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/ace-custom-element/-/ace-custom-element-1.6.5.tgz", - "integrity": "sha512-xU/9r94WKwjwEOjdfs6oVk2Dqc6X63eF2ECvKIMm/JCK1PDbXXdBYi5sQx110tR2sY4f96iXxyvscfT9qeI1RQ==" - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", - "dev": true - }, - "address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", - "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - } - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "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.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": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "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" - } - }, - "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" - } - } - } - }, - "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", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - } - }, - "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-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", - "dev": true - }, - "array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - } - }, - "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.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" - } - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "axe-core": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", - "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", - "dev": true - }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz", - "integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.0", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", - "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.0", - "core-js-compat": "^3.18.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz", - "integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "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.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "bin-links": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-2.3.0.tgz", - "integrity": "sha512-JzrOLHLwX2zMqKdyYZjkDgQGT+kHDkIhv2/IK2lJ00qLxV4TmFoHi8drDBb6H5Zrz1YfgHkai4e2MGPqnoUhqA==", - "dev": true, - "requires": { - "cmd-shim": "^4.0.1", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0", - "read-cmd-shim": "^2.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^3.0.3" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "blocking-elements": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/blocking-elements/-/blocking-elements-0.1.1.tgz", - "integrity": "sha512-/SLWbEzMoVIMZACCyhD/4Ya2M1PWP1qMKuiymowPcI+PdWDARqeARBjhj73kbUBCxEmTZCUu5TAqxtwUO9C1Ig==" - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" - }, - "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "bplist-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", - "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=", - "dev": true, - "requires": { - "big-integer": "^1.6.7" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserslist": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", - "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001280", - "electron-to-chromium": "^1.3.896", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - } - }, - "browserslist-useragent": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/browserslist-useragent/-/browserslist-useragent-3.0.3.tgz", - "integrity": "sha512-8KKO6kOXu/93IkMi8zVqzU72BgpoxcITIHtkM1qmlnxJtIMF9Y+2uWL9JS2uUbzj/PaS3kaA6LcICBThMojGjA==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "semver": "^7.3.2", - "useragent": "^2.3.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "bufferutil": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", - "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", - "dev": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true - }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true - }, - "bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", - "dev": true - }, - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - } - } - }, - "cache-content-type": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", - "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", - "dev": true, - "requires": { - "mime-types": "^2.1.18", - "ylru": "^1.2.0" - } - }, - "cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true - }, - "cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001284", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001284.tgz", - "integrity": "sha512-t28SKa7g6kiIQi6NHeOcKrOrGMzCRrXvlasPwWC26TH2QNdglgzQIRUuJ0cR3NeQPH+5jpuveeeSFDLm2zbkEw==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chai-a11y-axe": { - "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.3.3" - } - }, - "chai-dom": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/chai-dom/-/chai-dom-1.11.0.tgz", - "integrity": "sha512-ZzGlEfk1UhHH5+N0t9bDqstOxPEXmn3EyXvtsok5rfXVDOFDJbHVy12rED6ZwkJAUDs2w7/Da4Hlq2LB63kltg==", - "dev": true, - "requires": {} - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "cheerio": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", - "dev": true, - "requires": { - "cheerio-select": "^1.5.0", - "dom-serializer": "^1.3.2", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "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": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", - "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "css-what": "^5.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0", - "domutils": "^2.7.0" - } - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "chrome-launcher": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.0.tgz", - "integrity": "sha512-ZQqX5kb9H0+jy1OqLnWampfocrtSZaGl7Ny3F9GRha85o4odbL8x55paUzh51UC7cEmZ5obp3H2Mm70uC2PpRA==", - "dev": true, - "requires": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - } - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "clean-css": { - "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": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "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": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - } - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "cmd-shim": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", - "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", - "dev": true, - "requires": { - "mkdirp-infer-owner": "^2.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "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", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-line-args": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.0.tgz", - "integrity": "sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A==", - "dev": true, - "requires": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - } - }, - "command-line-usage": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", - "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", - "dev": true, - "requires": { - "array-back": "^4.0.1", - "chalk": "^2.4.2", - "table-layout": "^1.0.1", - "typical": "^5.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "common-ancestor-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true - }, - "common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "concurrently": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.4.0.tgz", - "integrity": "sha512-HZ3D0RTQMH3oS4gvtYj1P+NBc6PzE2McEra6yEFcQKrUQ9HvtTGU4Dbne083F034p+LRb7kWU0tPRNvSGs1UCQ==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "date-fns": "^2.16.1", - "lodash": "^4.17.21", - "rxjs": "^6.6.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", - "tree-kill": "^1.2.2", - "yargs": "^16.2.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - } - } - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, - "confusing-browser-globals": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", - "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "conventional-changelog": { - "version": "3.1.24", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.24.tgz", - "integrity": "sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg==", - "dev": true, - "requires": { - "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-atom": "^2.0.8", - "conventional-changelog-codemirror": "^2.0.8", - "conventional-changelog-conventionalcommits": "^4.5.0", - "conventional-changelog-core": "^4.2.1", - "conventional-changelog-ember": "^2.0.9", - "conventional-changelog-eslint": "^3.0.9", - "conventional-changelog-express": "^2.0.6", - "conventional-changelog-jquery": "^3.0.11", - "conventional-changelog-jshint": "^2.0.9", - "conventional-changelog-preset-loader": "^2.3.4" - } - }, - "conventional-changelog-angular": { - "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", - "q": "^1.5.1" - } - }, - "conventional-changelog-atom": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", - "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-codemirror": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", - "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-config-spec": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz", - "integrity": "sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==", - "dev": true - }, - "conventional-changelog-conventionalcommits": { - "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", - "lodash": "^4.17.15", - "q": "^1.5.1" - } - }, - "conventional-changelog-core": { - "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", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.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" - } - }, - "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", - "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 - }, - "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" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "dependencies": { - "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" - } - } - } - }, - "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=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "conventional-changelog-ember": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", - "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-eslint": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", - "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-express": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", - "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-jquery": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", - "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-jshint": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", - "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - } - }, - "conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", - "dev": true - }, - "conventional-changelog-writer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz", - "integrity": "sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g==", - "dev": true, - "requires": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.6", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", - "dev": true, - "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - } - }, - "conventional-commits-parser": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz", - "integrity": "sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw==", - "dev": true, - "requires": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - } - }, - "conventional-recommended-bump": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", - "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", - "dev": true, - "requires": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.3.4", - "conventional-commits-filter": "^2.0.7", - "conventional-commits-parser": "^3.2.0", - "git-raw-commits": "^2.0.8", - "git-semver-tags": "^4.1.1", - "meow": "^8.0.0", - "q": "^1.5.1" - } - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "cookies": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", - "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", - "dev": true, - "requires": { - "depd": "~2.0.0", - "keygrip": "~1.1.0" - } - }, - "core-js-bundle": { - "version": "3.19.2", - "resolved": "https://registry.npmjs.org/core-js-bundle/-/core-js-bundle-3.19.2.tgz", - "integrity": "sha512-LoFua00O2j1ffgGDViAUQMKuwDXBB/XFOmEGY/9QcyQfIrjlom8XZzj0YymB2aUmPZtHmk1fAjPrz9OEXifW4g==", - "dev": true - }, - "core-js-compat": { - "version": "3.19.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.2.tgz", - "integrity": "sha512-ObBY1W5vx/LFFMaL1P5Udo4Npib6fu+cMokeziWkA8Tns4FcDemKF5j9JvaI5JhdkW8EQJQGJN1EcrzmEwuAqQ==", - "dev": true, - "requires": { - "browserslist": "^4.18.1", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "core-js-pure": { - "version": "3.19.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.2.tgz", - "integrity": "sha512-5LkcgQEy8pFeVnd/zomkUBSwnmIxuF1C8E9KrMAbOc8f34IBT9RGvTYeNDdp1PnvMJrrVhvk1hg/yVV5h/znlg==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cosmiconfig": { - "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", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "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-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dev": true, - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, - "css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - } - }, - "css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "date-fns": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.27.0.tgz", - "integrity": "sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q==", - "dev": true - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true - }, - "debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", - "dev": true - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - } - } - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "requires": { - "mimic-response": "^3.1.0" - }, - "dependencies": { - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true - } - } - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "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": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "default-browser-id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-2.0.0.tgz", - "integrity": "sha1-AezONxpx6F8VoXF354YwR+c9vn0=", - "dev": true, - "requires": { - "bplist-parser": "^0.1.0", - "pify": "^2.3.0", - "untildify": "^2.0.0" - } - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - } - } - }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "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", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "detect-port": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", - "dev": true, - "requires": { - "address": "^1.0.1", - "debug": "^2.6.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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "devtools-protocol": { - "version": "0.0.981744", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", - "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==", - "dev": true - }, - "dezalgo": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", - "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", - "dev": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "requires": { - "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": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.1.tgz", - "integrity": "sha512-JPFiouQIr16VQ4dX6i0+Hpbg3H2bMKPmZ+WZgBOSSvOPx9QHwwY8sPzeM2baUtViESYto6wC2nuZOMC/6gulcA==", - "dev": true, - "requires": { - "@types/parse5": "^2.2.34", - "clone": "^2.1.0", - "parse5": "^4.0.0" - }, - "dependencies": { - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - } - } - }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true - }, - "domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "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", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotgitignore": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz", - "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "minimatch": "^3.0.4" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "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 - } - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "dynamic-import-polyfill": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dynamic-import-polyfill/-/dynamic-import-polyfill-0.1.1.tgz", - "integrity": "sha512-m953zv0w5oDagTItWm6Auhmk/pY7EiejaqiVbnzSS3HIjh1FCUeK7WzuaVtWPNs58A+/xpIE+/dVk6pKsrua8g==", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "ejs": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", - "dev": true, - "requires": { - "jake": "^10.8.5" - } - }, - "electron-to-chromium": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.11.tgz", - "integrity": "sha512-2OhsaYgsWGhWjx2et8kaUcdktPbBGjKM2X0BReUCKcSCPttEY+hz2zie820JLbttU8jwL92+JJysWwkut3wZgA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "dev": true - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "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.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - } - }, - "es-dev-server": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-dev-server/-/es-dev-server-2.1.0.tgz", - "integrity": "sha512-Vrq/4PyMzWz33QmOdSncvoWLTJVcv2e96z8FLHQwP9zK7DyLeDZCckII8VTW+btUGtM7aErvLH/d/R2pjjjs8w==", - "dev": true, - "requires": { - "@babel/core": "^7.11.1", - "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.11.0", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-transform-template-literals": "^7.8.3", - "@babel/preset-env": "^7.9.0", - "@koa/cors": "^3.1.0", - "@open-wc/building-utils": "^2.18.3", - "@rollup/plugin-node-resolve": "^11.0.0", - "@rollup/pluginutils": "^3.0.0", - "@types/babel__core": "^7.1.3", - "@types/browserslist": "^4.8.0", - "@types/browserslist-useragent": "^3.0.0", - "@types/caniuse-api": "^3.0.0", - "@types/command-line-args": "^5.0.0", - "@types/command-line-usage": "^5.0.1", - "@types/debounce": "^1.2.0", - "@types/koa": "^2.0.48", - "@types/koa__cors": "^3.0.1", - "@types/koa-compress": "^2.0.9", - "@types/koa-etag": "^3.0.0", - "@types/koa-static": "^4.0.1", - "@types/lru-cache": "^5.1.0", - "@types/mime-types": "^2.1.0", - "@types/minimatch": "^3.0.3", - "@types/path-is-inside": "^1.0.0", - "@types/whatwg-url": "^6.4.0", - "browserslist": "^4.9.1", - "browserslist-useragent": "^3.0.2", - "builtin-modules": "^3.1.0", - "camelcase": "^5.3.1", - "caniuse-api": "^3.0.0", - "caniuse-lite": "^1.0.30001033", - "chokidar": "^3.0.0", - "command-line-args": "^5.0.2", - "command-line-usage": "^6.1.0", - "debounce": "^1.2.0", - "deepmerge": "^4.2.2", - "es-module-lexer": "^0.3.13", - "get-stream": "^5.1.0", - "is-stream": "^2.0.0", - "isbinaryfile": "^4.0.2", - "koa": "^2.7.0", - "koa-compress": "^3.0.0", - "koa-etag": "^3.0.0", - "koa-static": "^5.0.0", - "lru-cache": "^5.1.1", - "mime-types": "^2.1.27", - "minimatch": "^3.0.4", - "open": "^7.0.3", - "parse5": "^5.1.1", - "path-is-inside": "^1.0.2", - "polyfills-loader": "^1.7.4", - "portfinder": "^1.0.21", - "rollup": "^2.7.2", - "strip-ansi": "^5.2.0", - "systemjs": "^6.3.1", - "tslib": "^1.11.1", - "useragent": "^2.3.0", - "whatwg-url": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true - }, - "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", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "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", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "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", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - }, - "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" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "es-module-lexer": { - "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": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/es-module-shims/-/es-module-shims-0.4.7.tgz", - "integrity": "sha512-0LTiSQoPWwdcaTVIQXhGlaDwTneD0g9/tnH1PNs3zHFFH+xoCeJclDM3rQeqF9nurXPfMKm3l9+kfPRa5VpbKg==", - "dev": true - }, - "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "esbuild": { - "version": "0.9.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.9.7.tgz", - "integrity": "sha512-VtUf6aQ89VTmMLKrWHYG50uByMF4JQlVysb8dmg6cOgW8JnFCipmz7p+HNBl+RR3LLCuBxFGVauAe2wfnF9bLg==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esinstall": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/esinstall/-/esinstall-1.1.7.tgz", - "integrity": "sha512-irDsrIF7fZ5BCQEAV5gmH+4nsK6JhnkI9C9VloXdmzJLbM1EcshPw8Ap95UUGc4ZJdzGeOrjV+jgKjQ/Z7Q3pg==", - "dev": true, - "requires": { - "@rollup/plugin-commonjs": "^16.0.0", - "@rollup/plugin-inject": "^4.0.2", - "@rollup/plugin-json": "^4.0.0", - "@rollup/plugin-node-resolve": "^10.0.0", - "@rollup/plugin-replace": "^2.4.2", - "builtin-modules": "^3.2.0", - "cjs-module-lexer": "^1.2.1", - "es-module-lexer": "^0.6.0", - "execa": "^5.1.1", - "is-valid-identifier": "^2.0.2", - "kleur": "^4.1.1", - "mkdirp": "^1.0.3", - "picomatch": "^2.3.0", - "resolve": "^1.20.0", - "rimraf": "^3.0.0", - "rollup": "~2.37.1", - "rollup-plugin-polyfill-node": "^0.6.2", - "slash": "~3.0.0", - "validate-npm-package-name": "^3.0.0", - "vm2": "^3.9.2" - }, - "dependencies": { - "@rollup/plugin-node-resolve": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-10.0.0.tgz", - "integrity": "sha512-sNijGta8fqzwA1VwUEtTvWCx2E7qC70NMsDh4ZG13byAXYigBNZMxALhKUSycBks5gupJdq0lFrKumFrRZ8H3A==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.17.0" - } - }, - "es-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.6.0.tgz", - "integrity": "sha512-f8kcHX1ArhllUtb/wVSyvygoKCznIjnxhLxy7TCvIiMdT7fL4ZDTIKaadMe6eLvOXg6Wk02UeoFgUoZ2EKZZUA==", - "dev": true - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "rollup": { - "version": "2.37.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.37.1.tgz", - "integrity": "sha512-V3ojEeyGeSdrMSuhP3diBb06P+qV4gKQeanbDv+Qh/BZbhdZ7kHV0xAt8Yjk4GFshq/WjO7R4c7DFM20AwTFVQ==", - "dev": true, - "requires": { - "fsevents": "~2.1.2" - } - } - } - }, - "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } - } - }, - "eslint-config-airbnb-base": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", - "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", - "dev": true, - "requires": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.2" - } - }, - "eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true, - "requires": {} - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-module-utils": { - "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": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "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 - } - } - }, - "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.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz", - "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", - "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.1", - "has": "^1.0.3", - "is-core-module": "^2.8.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": { - "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" - } - }, - "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.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", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "requireindex": "^1.2.0" - } - }, - "eslint-plugin-lit-a11y": { - "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.3.3", - "axobject-query": "^2.2.0", - "dom5": "^3.0.1", - "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.1", - "requireindex": "~1.2.0" - }, - "dependencies": { - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - } - } - }, - "eslint-plugin-no-only-tests": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-2.6.0.tgz", - "integrity": "sha512-T9SmE/g6UV1uZo1oHAqOvL86XWl7Pl2EpRpnLI8g/bkJu+h7XBCB+1LnubRZ2CUQXj805vh4/CYZdnqtVaEo2Q==", - "dev": true - }, - "eslint-plugin-tsdoc": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.14.tgz", - "integrity": "sha512-fJ3fnZRsdIoBZgzkQjv8vAj6NeeOoFkTfgosj6mKsFjX70QV256sA/wq+y/R2+OL4L8E79VVaVWrPeZnKNe8Ng==", - "dev": true, - "requires": { - "@microsoft/tsdoc": "0.13.2", - "@microsoft/tsdoc-config": "0.15.2" - } - }, - "eslint-plugin-wc": { - "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", - "js-levenshtein-esm": "^1.2.0" - } - }, - "eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", - "dev": true - }, - "eslint-rule-extender": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/eslint-rule-extender/-/eslint-rule-extender-0.0.1.tgz", - "integrity": "sha512-F0j1Twve3lamL3J0rRSVAynlp58sDPG39JFcQrM+u9Na7PmCgiPHNODh6YE9mduaGcsn3NBqbf6LZRj0cLr8Ng==", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-check": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.20.0.tgz", - "integrity": "sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog==", - "dev": true, - "requires": { - "pure-rand": "^5.0.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastq": { - "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" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "fdir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-5.1.0.tgz", - "integrity": "sha512-IgTtZwL52tx2wqWeuGDzXYTnNsEjNLahZpJw30hCQDyVnoHXwY5acNDnjGImTTL1R0z1PCyLw20VAbE5qLic3Q==", - "dev": true - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "dependencies": { - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } - } - }, - "find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "requires": { - "array-back": "^3.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, - "requires": { - "is-buffer": "~2.0.3" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dev": true, - "requires": { - "null-check": "^1.0.0" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "generic-names": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz", - "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0" - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true - }, - "get-pkg-repo": { - "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", - "through2": "^2.0.0", - "yargs": "^16.2.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "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" - } - }, - "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" - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - } - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "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", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "git-raw-commits": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", - "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", - "dev": true, - "requires": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - } - }, - "git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", - "dev": true, - "requires": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" - } - }, - "git-semver-tags": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", - "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", - "dev": true, - "requires": { - "meow": "^8.0.0", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "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", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - }, - "dependencies": { - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "dependencies": { - "ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", - "dev": true - } - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dev": true, - "requires": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - } - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "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": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } - } - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dev": true, - "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - } - }, - "htmlparser2": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", - "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.2", - "domutils": "^2.8.0", - "entities": "^3.0.1" - } - }, - "http-assert": { - "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.8.0" - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - } - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "dependencies": { - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true - } - } - }, - "httpie": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/httpie/-/httpie-1.1.2.tgz", - "integrity": "sha512-VQ82oXG95oY1fQw/XecHuvcFBA+lZQ9Vwj1RfLcO8a7HpDd4cc2ukwpJt+TUlFaLUAzZErylxWu6wclJ1rUhUQ==", - "dev": true - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "husky": { - "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": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} - }, - "idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", - "dev": true - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "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", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - } - }, - "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "intersection-observer": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/intersection-observer/-/intersection-observer-0.7.0.tgz", - "integrity": "sha512-Id0Fij0HsB/vKWGeBe9PxeY45ttRiBmhFyyt/geBdDHBYNctMRTE3dC1U3ujzz3lap+hVXlEcVaB56kZP/eEUg==", - "dev": true - }, - "intl-list-format": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/intl-list-format/-/intl-list-format-1.0.3.tgz", - "integrity": "sha512-VNF1Mh0K1xALXkz/5QsK1gfKRvEQO/jWaniTGAzQvbzGr5uyGDskQrRjnf6Qnbc9/JRbNE8BQtTg6iWuFrZorw==", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "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-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "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-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", - "dev": true, - "requires": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" - }, - "dependencies": { - "global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", - "dev": true, - "requires": { - "ini": "1.3.7" - } - }, - "ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", - "dev": true - } - } - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", - "dev": true - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", - "dev": true, - "requires": { - "text-extensions": "^1.0.0" - } - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-valid-element-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-element-name/-/is-valid-element-name-1.0.0.tgz", - "integrity": "sha1-Ju8/12zfHxItEFQG4y01sN4AWYE=", - "dev": true, - "requires": { - "is-potential-custom-element-name": "^1.0.0" - } - }, - "is-valid-identifier": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-valid-identifier/-/is-valid-identifier-2.0.2.tgz", - "integrity": "sha512-mpS5EGqXOwzXtKAg6I44jIAqeBfntFLxpAth1rrKbxtKyI6LPktyDYpHBI+tHlduhhX/SF26mFXmxQu995QVqg==", - "dev": true, - "requires": { - "assert": "^1.4.1" - } - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "isbinaryfile": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", - "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-reports": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.1.tgz", - "integrity": "sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jake": { - "version": "10.8.5", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", - "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", - "dev": true, - "requires": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - } - } - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "jju": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", - "dev": true - }, - "js-levenshtein-esm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/js-levenshtein-esm/-/js-levenshtein-esm-1.2.0.tgz", - "integrity": "sha512-fzreKVq1eD7eGcQr7MtRpQH94f8gIfhdrc7yeih38xh684TNMK9v5aAu2wxfIRMk/GpAJRrzcirMAPIaSDaByQ==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-nice": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", - "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "dev": true - }, - "jsonschema": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.11.tgz", - "integrity": "sha512-XNZHs3N1IOa3lPKm//npxMhOdaoPw+MvEV0NIgxcER83GTJcG13rehtWmpBCfEt8DrtYwIkMTs8bdXoYs4fvnQ==", - "dev": true - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "just-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-3.1.1.tgz", - "integrity": "sha512-sdMWKjRq8qWZEjDcVA6llnUT8RDEBIfOiGpYFPYa9u+2c39JCsejktSP7mj5eRid5EIvTzIpQ2kDOCw1Nq9BjQ==", - "dev": true - }, - "just-diff-apply": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-3.1.2.tgz", - "integrity": "sha512-TCa7ZdxCeq6q3Rgms2JCRHTCfWAETPZ8SzYUbkYF6KR3I03sN29DaOIC+xyWboIcMvjAsD5iG2u/RWzHD8XpgQ==", - "dev": true - }, - "just-extend": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", - "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", - "dev": true - }, - "keygrip": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", - "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", - "dev": true, - "requires": { - "tsscmp": "1.0.6" - } - }, - "keyv": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", - "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", - "dev": true, - "requires": { - "json-buffer": "3.0.1" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", - "dev": true - }, - "koa": { - "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", - "cache-content-type": "^1.0.0", - "content-disposition": "~0.5.2", - "content-type": "^1.0.4", - "cookies": "~0.8.0", - "debug": "^4.3.2", - "delegates": "^1.0.0", - "depd": "^2.0.0", - "destroy": "^1.0.4", - "encodeurl": "^1.0.2", - "escape-html": "^1.0.3", - "fresh": "~0.5.2", - "http-assert": "^1.3.0", - "http-errors": "^1.6.3", - "is-generator-function": "^1.0.7", - "koa-compose": "^4.1.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" - } - }, - "koa-compose": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", - "dev": true - }, - "koa-compress": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/koa-compress/-/koa-compress-3.1.0.tgz", - "integrity": "sha512-0m24/yS/GbhWI+g9FqtvStY+yJwTObwoxOvPok6itVjRen7PBWkjsJ8pre76m+99YybXLKhOJ62mJ268qyBFMQ==", - "dev": true, - "requires": { - "bytes": "^3.0.0", - "compressible": "^2.0.0", - "koa-is-json": "^1.0.0", - "statuses": "^1.0.0" - } - }, - "koa-convert": { - "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": "^4.1.0" - } - }, - "koa-etag": { - "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.8.1" - } - }, - "koa-is-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", - "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=", - "dev": true - }, - "koa-send": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", - "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "http-errors": "^1.7.3", - "resolve-path": "^1.4.0" - } - }, - "koa-static": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", - "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "koa-send": "^5.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "requires": { - "package-json": "^6.3.0" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lighthouse-logger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", - "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "marky": "^1.2.2" - }, - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "lint-staged": { - "version": "11.2.6", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.2.6.tgz", - "integrity": "sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg==", - "dev": true, - "requires": { - "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.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", - "supports-color": "8.1.1" - }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "listr2": { - "version": "3.13.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.13.5.tgz", - "integrity": "sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.4.0", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "rxjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", - "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", - "dev": true, - "requires": { - "tslib": "~2.1.0" - } - }, - "tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", - "dev": true - } - } - }, - "lit-element": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-2.5.1.tgz", - "integrity": "sha512-ogu7PiJTA33bEK0xGu1dmaX5vhcRjBXCFexPja0e7P7jqLhTpNKYRPmE+GmiCaRVAbiQKGkUgkh/i6+bh++dPQ==", - "requires": { - "lit-html": "^1.1.1" - } - }, - "lit-html": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-1.4.1.tgz", - "integrity": "sha512-B9btcSgPYb1q4oSOb/PrOT6Z/H+r6xuNzfH4lFli/AWhYwdtrgQkQWBbIc6mdnf6E2IL3gDXdkkqNktpU0OZQA==" - }, - "lit-translate": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/lit-translate/-/lit-translate-1.2.1.tgz", - "integrity": "sha512-jykKpkdRX0lx3JYq9jUMzVs02ISClOe2wxyPHat5wVKPyBRJQxgXxLxj1AbpuLNBCDZKEysMBpeJ1z0Y35Bk2Q==", - "requires": { - "lit-html": "^1.2.1" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", - "dev": true - }, - "lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.4" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "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", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "dev": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - } - }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true - }, - "marked": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.10.tgz", - "integrity": "sha512-+QvuFj0nGgO970fySghXGmuw+Fd0gD2x3+MqCWLIPf5oxdv1Ka6b2q+z9RP01P/IaKPMEramy+7cNy/Lw8c3hw==" - }, - "marky": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.2.tgz", - "integrity": "sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ==", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "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": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "meriyah": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/meriyah/-/meriyah-3.1.6.tgz", - "integrity": "sha512-JDOSi6DIItDc33U5N52UdV6P8v+gn+fqZKfbAfHzdWApRQyQWdcvxPvAr9t01bI2rBxGvSrKRQSCg3SkZC1qeg==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "requires": { - "mime-db": "1.51.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - } - }, - "minipass": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", - "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "dev": true, - "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "mkdirp-infer-owner": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", - "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - } - } - }, - "mocha": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", - "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", - "dev": true, - "requires": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "2.2.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.4", - "ms": "2.1.1", - "node-environment-flags": "1.0.5", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "dependencies": { - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true - }, - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "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", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "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" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "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 - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "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", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "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 - }, - "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" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "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.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "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", - "integrity": "sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0", - "@sinonjs/fake-timers": "^7.0.4", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "path-to-regexp": "^1.7.0" - } - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-environment-flags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", - "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "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", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.3", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", - "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", - "which": "^2.0.2" - } - }, - "node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "dev": true - }, - "node-releases": { - "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": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "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", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-install-checks": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-packlist": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", - "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", - "dev": true, - "requires": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-pick-manifest": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", - "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", - "dev": true, - "requires": { - "npm-install-checks": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" - } - }, - "npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", - "dev": true, - "requires": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "null-check": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "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.19.1" - } - }, - "object.getownpropertydescriptors": { - "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.19.1" - } - }, - "object.values": { - "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.19.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "only": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=", - "dev": true - }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - } - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - } - }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "pacote": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", - "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", - "dev": true, - "requires": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^1.8.2", - "cacache": "^15.0.5", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^2.1.4", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", - "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "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": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-conflict-json": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-1.1.1.tgz", - "integrity": "sha512-4gySviBiW5TRl7XHvp1agcS7SOe0KZOjC//71dzZVWJrY9hCrgtvl5v3SyIxCZ4fZF47TxD9nfzmxcx76xmbUw==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "just-diff": "^3.0.1", - "just-diff-apply": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dev": true, - "requires": { - "isarray": "0.0.1" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "periscopic": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-2.0.3.tgz", - "integrity": "sha512-FuCZe61mWxQOJAQFEfmt9FjzebRlcpFz8sFPbyaCKtdusPkMEbA9ey0eARnRav5zAhmXznhaQkKGFAPn7X9NUw==", - "dev": true, - "requires": { - "estree-walker": "^2.0.2", - "is-reference": "^1.1.4" - }, - "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 - } - } - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "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", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, - "polyfills-loader": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/polyfills-loader/-/polyfills-loader-1.7.6.tgz", - "integrity": "sha512-AiLIgmGFmzcvsqewyKsqWb7H8CnWNTSQBoM0u+Mauzmp0DsjObXmnZdeqvTn0HNwc1wYHHTOta82WjSjG341eQ==", - "dev": true, - "requires": { - "@babel/core": "^7.11.1", - "@open-wc/building-utils": "^2.18.3", - "@webcomponents/webcomponentsjs": "^2.4.0", - "abortcontroller-polyfill": "^1.4.0", - "core-js-bundle": "^3.6.0", - "deepmerge": "^4.2.2", - "dynamic-import-polyfill": "^0.1.1", - "es-module-shims": "^0.4.6", - "intersection-observer": "^0.7.0", - "parse5": "^5.1.1", - "regenerator-runtime": "^0.13.3", - "resize-observer-polyfill": "^1.5.1", - "systemjs": "^6.3.1", - "terser": "^4.6.7", - "whatwg-fetch": "^3.0.0" - }, - "dependencies": { - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - } - } - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "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" - } - } - } - }, - "postcss": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.4.tgz", - "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==", - "dev": true, - "requires": { - "nanoid": "^3.1.30", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.1" - } - }, - "postcss-modules": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.2.2.tgz", - "integrity": "sha512-/H08MGEmaalv/OU8j6bUKi/kZr2kqGF6huAW8m9UAgOLWtpFdhA14+gPBoymtqyv+D4MLsmqaF2zvIegdCxJXg==", - "dev": true, - "requires": { - "generic-names": "^2.0.1", - "icss-replace-symbols": "^1.1.0", - "lodash.camelcase": "^4.3.0", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "string-hash": "^1.1.1" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", - "dev": true - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true - }, - "proc-log": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz", - "integrity": "sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "promise-all-reject-late": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", - "dev": true - }, - "promise-call-limit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz", - "integrity": "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "requires": { - "escape-goat": "^2.0.0" - } - }, - "puppeteer-core": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-13.7.0.tgz", - "integrity": "sha512-rXja4vcnAzFAP1OVLq/5dWNfwBGuzcOARJ6qGV7oAZhnLmVRU8G5MsdeQEAOy332ZhkIOnn9jp15R89LKHyp2Q==", - "dev": true, - "requires": { - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.981744", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "pkg-dir": "4.2.0", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.5.0" - }, - "dependencies": { - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "dev": true, - "requires": {} - } - } - }, - "pure-rand": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.0.tgz", - "integrity": "sha512-lD2/y78q+7HqBx2SaT6OT4UcwtvXNRfEpzYEzl0EQ+9gZq2Qi3fa0HDnYPeqQwhlHJFBUhT7AO3mLU3+8bynHA==", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qs": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", - "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "raw-body": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", - "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", - "dev": true, - "requires": { - "bytes": "3.1.1", - "http-errors": "1.8.1", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - } - } - }, - "read-cmd-shim": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", - "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", - "dev": true - }, - "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "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 - }, - "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" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdir-scoped-modules": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", - "dev": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, - "reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "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.2" - } - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "regexpu-core": { - "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.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": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "regjsparser": { - "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" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", - "dev": true - }, - "resize-observer-polyfill": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve-global": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", - "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", - "dev": true, - "requires": { - "global-dirs": "^0.1.1" - } - }, - "resolve-path": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", - "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", - "dev": true, - "requires": { - "http-errors": "~1.6.2", - "path-is-absolute": "1.0.1" - }, - "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } - } - }, - "responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "dev": true, - "requires": { - "lowercase-keys": "^2.0.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "2.60.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.60.2.tgz", - "integrity": "sha512-1Bgjpq61sPjgoZzuiDSGvbI1tD91giZABgjCQBKM5aYLnzjq52GoDuWVwT/cm/MCxCMPU8gqQvkj8doQ5C8Oqw==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-polyfill-node": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.6.2.tgz", - "integrity": "sha512-gMCVuR0zsKq0jdBn8pSXN1Ejsc458k2QsFFvQdbHoM0Pot5hEnck+pBP/FDwFS6uAi77pD3rDTytsaUStsOMlA==", - "dev": true, - "requires": { - "@rollup/plugin-inject": "^4.0.0" - } - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "dependencies": { - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "terser": { - "version": "5.16.5", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.5.tgz", - "integrity": "sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } - } - } - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "setprototypeof": { - "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": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/shady-css-scoped-element/-/shady-css-scoped-element-0.0.2.tgz", - "integrity": "sha512-Dqfl70x6JiwYDujd33ZTbtCK0t52E7+H2swdWQNSTzfsolSa6LJHnTpN4T9OpJJEq4bxuzHRLFO9RBcy/UfrMQ==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shiki": { - "version": "0.9.14", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.14.tgz", - "integrity": "sha512-uLHjjyJdNsMzF9GOF8vlOuZ8BwigiYPraMN5yjC826k8K7Xu90JQcC5GUNrzRibLgT2EOk9597I1IX+jRdA8nw==", - "dev": true, - "requires": { - "jsonc-parser": "^3.0.0", - "vscode-oniguruma": "^1.6.1", - "vscode-textmate": "5.2.0" - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "sinon": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-11.1.2.tgz", - "integrity": "sha512-59237HChms4kg7/sXhiRcUzdSkKuydDeTiamT/jesUVHshBgL8XAmhgFo0GfK6RruMDM/iRSij1EybmMog9cJw==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.8.3", - "@sinonjs/fake-timers": "^7.1.2", - "@sinonjs/samsam": "^6.0.2", - "diff": "^5.0.0", - "nise": "^5.1.0", - "supports-color": "^7.2.0" - }, - "dependencies": { - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - } - } - }, - "sinon-chai": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.7.0.tgz", - "integrity": "sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==", - "dev": true, - "requires": {} - }, - "skypack": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/skypack/-/skypack-0.3.2.tgz", - "integrity": "sha512-je1pix0QYER6iHuUGbgcafRJT5TI+EGUIBfzBLMqo3Wi22I2SzB9TVHQqwKCw8pzJMuHqhVTFEHc3Ey+ra25Sw==", - "dev": true, - "requires": { - "cacache": "^15.0.0", - "cachedir": "^2.3.0", - "esinstall": "^1.0.0", - "etag": "^1.8.1", - "find-up": "^5.0.0", - "got": "^11.1.4", - "kleur": "^4.1.0", - "mkdirp": "^1.0.3", - "p-queue": "^6.2.1", - "rimraf": "^3.0.0", - "rollup": "^2.23.0", - "validate-npm-package-name": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - } - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true - }, - "snowpack": { - "version": "3.8.6", - "resolved": "https://registry.npmjs.org/snowpack/-/snowpack-3.8.6.tgz", - "integrity": "sha512-EZ3Y7RtTiPvxnVFTKPfkvi2PKBrprXCvOHKWQQLBkHonf+xdtG51RiNjtrRLJeCjislAlD6OoeGHUxz76ToGHw==", - "dev": true, - "requires": { - "@npmcli/arborist": "^2.6.4", - "bufferutil": "^4.0.2", - "cachedir": "^2.3.0", - "cheerio": "1.0.0-rc.10", - "chokidar": "^3.4.0", - "cli-spinners": "^2.5.0", - "compressible": "^2.0.18", - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "default-browser-id": "^2.0.0", - "detect-port": "^1.3.0", - "es-module-lexer": "^0.3.24", - "esbuild": "~0.9.0", - "esinstall": "^1.1.7", - "estree-walker": "^2.0.2", - "etag": "^1.8.1", - "execa": "^5.1.1", - "fdir": "^5.0.0", - "find-cache-dir": "^3.3.1", - "find-up": "^5.0.0", - "fsevents": "^2.3.2", - "glob": "^7.1.7", - "httpie": "^1.1.2", - "is-plain-object": "^5.0.0", - "is-reference": "^1.2.1", - "isbinaryfile": "^4.0.6", - "jsonschema": "~1.2.5", - "kleur": "^4.1.1", - "meriyah": "^3.1.6", - "mime-types": "^2.1.26", - "mkdirp": "^1.0.3", - "npm-run-path": "^4.0.1", - "open": "^8.2.1", - "pacote": "^11.3.4", - "periscopic": "^2.0.3", - "picomatch": "^2.3.0", - "postcss": "^8.3.5", - "postcss-modules": "^4.0.0", - "resolve": "^1.20.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "rollup": "~2.37.1", - "signal-exit": "^3.0.3", - "skypack": "^0.3.2", - "slash": "~3.0.0", - "source-map": "^0.7.3", - "strip-ansi": "^6.0.0", - "strip-comments": "^2.0.1", - "utf-8-validate": "^5.0.3", - "ws": "^7.3.0", - "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", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "rollup": { - "version": "2.37.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.37.1.tgz", - "integrity": "sha512-V3ojEeyGeSdrMSuhP3diBb06P+qV4gKQeanbDv+Qh/BZbhdZ7kHV0xAt8Yjk4GFshq/WjO7R4c7DFM20AwTFVQ==", - "dev": true, - "requires": { - "fsevents": "~2.1.2" - }, - "dependencies": { - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - } - } - } - } - }, - "socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", - "dev": true, - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", - "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" - } - }, - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - }, - "source-map-js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", - "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "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 - } - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "requires": { - "through": "2" - } - }, - "split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "requires": { - "readable-stream": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "standard-version": { - "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.6.1", - "conventional-recommended-bump": "6.1.0", - "detect-indent": "^6.0.0", - "detect-newline": "^3.1.0", - "dotgitignore": "^2.1.0", - "figures": "^3.1.0", - "find-up": "^5.0.0", - "fs-access": "^1.0.1", - "git-semver-tags": "^4.0.0", - "semver": "^7.1.1", - "stringify-package": "^1.0.1", - "yargs": "^16.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, - "string-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", - "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "dependencies": { - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - } - } - }, - "stringify-package": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", - "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "systemjs": { - "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.5", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.5.tgz", - "integrity": "sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - } - }, - "table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, - "requires": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "dependencies": { - "array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - } - } - }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "dev": true - }, - "tempy": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", - "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", - "dev": true, - "requires": { - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "dependencies": { - "type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "dev": true - } - } - }, - "term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "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 - } - } - }, - "text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "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-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true - }, - "treeverse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-1.0.4.tgz", - "integrity": "sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g==", - "dev": true - }, - "trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "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", - "integrity": "sha512-zKmsCQs4dZaeSKjEA7pLFDv7FHHqAFLPd0Mr//OIJvu8M+4p4bgSFJwZSEBEg3ec9W7RzRz1vi8giiX0+mheBQ==", - "dev": true - }, - "tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "tsscmp": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typedoc": { - "version": "0.21.10", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.21.10.tgz", - "integrity": "sha512-Y0wYIehkjkPfsp3pv86fp3WPHUcOf8pnQUDLwG1PqSccUSqdsv7Pz1Gd5WrTJvXQB2wO1mKlZ8qW8qMiopKyjA==", - "dev": true, - "requires": { - "glob": "^7.1.7", - "handlebars": "^4.7.7", - "lunr": "^2.3.9", - "marked": "^4.0.10", - "minimatch": "^3.0.0", - "progress": "^2.0.3", - "shiki": "^0.9.8", - "typedoc-default-themes": "^0.12.10" - } - }, - "typedoc-default-themes": { - "version": "0.12.10", - "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.12.10.tgz", - "integrity": "sha512-fIS001cAYHkyQPidWXmHuhs8usjP5XVJjWB8oZGqkTowZaz3v7g3KDZeeqE82FBrmkAnIBOY3jgy7lnPnqATbA==", - "dev": true - }, - "typedoc-plugin-markdown": { - "version": "3.10.4", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.10.4.tgz", - "integrity": "sha512-if9w7S9fXLg73AYi/EoRSEhTOZlg3I8mIP8YEmvzSE33VrNXC9/hA0nVcLEwFVJeQY7ay6z67I6kW0KIv7LjeA==", - "dev": true, - "requires": { - "handlebars": "^4.7.7" - } - }, - "typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", - "dev": true - }, - "typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true - }, - "ua-parser-js": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.34.tgz", - "integrity": "sha512-K9mwJm/DaB6mRLZfw6q8IMXipcrmuT6yfhYmwhAkuh+81sChuYstYA+znlgaflUPaYUa3odxKPKGw6Vw/lANew==", - "dev": true - }, - "uglify-js": { - "version": "3.14.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.4.tgz", - "integrity": "sha512-AbiSR44J0GoCeV81+oxcy/jDOElO2Bx3d0MfQCUShq7JRXaM4KtQopZsq2vFv8bCq2yMaGrw1FgygUd03RyRDA==", - "dev": true, - "optional": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "unicode-canonical-property-names-ecmascript": { - "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": "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": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "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": "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 - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "untildify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", - "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0" - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", - "dev": true, - "requires": { - "boxen": "^4.2.0", - "chalk": "^3.0.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", - "dev": true, - "requires": { - "lru-cache": "4.1.x", - "tmp": "0.0.x" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "utf-8-validate": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", - "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", - "dev": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-to-istanbul": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - } - }, - "valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", - "dev": true, - "requires": { - "builtins": "^1.0.3" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - } - } - }, - "vm2": { - "version": "3.9.14", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.14.tgz", - "integrity": "sha512-HgvPHYHeQy8+QhzlFryvSteA4uQLBCOub02mgqdR+0bN/akRZ48TGB1v0aCv7ksyc0HXx16AZtMHKS38alc6TA==", - "dev": true, - "requires": { - "acorn": "^8.7.0", - "acorn-walk": "^8.2.0" - }, - "dependencies": { - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true - } - } - }, - "vscode-oniguruma": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz", - "integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==", - "dev": true - }, - "vscode-textmate": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", - "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", - "dev": true - }, - "walk-up-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", - "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", - "dev": true - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "web-component-analyzer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/web-component-analyzer/-/web-component-analyzer-1.1.6.tgz", - "integrity": "sha512-1PyBkb/jijDEVE+Pnk3DTmVHD8takipdvAwvZv1V8jIidsSIJ5nhN87Gs+4dpEb1vw48yp8dnbZKkvMYJ+C0VQ==", - "dev": true, - "requires": { - "fast-glob": "^3.2.2", - "ts-simple-type": "~1.0.5", - "typescript": "^3.8.3", - "yargs": "^15.3.1" - }, - "dependencies": { - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true - }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "dev": true - }, - "whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dev": true, - "requires": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - } - }, - "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", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - } - }, - "wicg-inert": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/wicg-inert/-/wicg-inert-3.1.1.tgz", - "integrity": "sha512-PhBaNh8ur9Xm4Ggy4umelwNIP6pPP1bv3EaWaKqfb/QNme2rdLjm7wIInvV4WhxVHhzA4Spgw9qNSqWtB/ca2A==" - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "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": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "requires": { - "string-width": "^4.0.0" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "requires": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "dependencies": { - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, - "workbox-background-sync": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz", - "integrity": "sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==", - "dev": true, - "requires": { - "idb": "^7.0.1", - "workbox-core": "6.5.4" - } - }, - "workbox-broadcast-update": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz", - "integrity": "sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==", - "dev": true, - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-build": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.4.tgz", - "integrity": "sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==", - "dev": true, - "requires": { - "@apideck/better-ajv-errors": "^0.3.1", - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", - "@babel/runtime": "^7.11.2", - "@rollup/plugin-babel": "^5.2.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-replace": "^2.4.1", - "@surma/rollup-plugin-off-main-thread": "^2.2.3", - "ajv": "^8.6.0", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "lodash": "^4.17.20", - "pretty-bytes": "^5.3.0", - "rollup": "^2.43.1", - "rollup-plugin-terser": "^7.0.0", - "source-map": "^0.8.0-beta.0", - "stringify-object": "^3.3.0", - "strip-comments": "^2.0.1", - "tempy": "^0.6.0", - "upath": "^1.2.0", - "workbox-background-sync": "6.5.4", - "workbox-broadcast-update": "6.5.4", - "workbox-cacheable-response": "6.5.4", - "workbox-core": "6.5.4", - "workbox-expiration": "6.5.4", - "workbox-google-analytics": "6.5.4", - "workbox-navigation-preload": "6.5.4", - "workbox-precaching": "6.5.4", - "workbox-range-requests": "6.5.4", - "workbox-recipes": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4", - "workbox-streams": "6.5.4", - "workbox-sw": "6.5.4", - "workbox-window": "6.5.4" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dev": true, - "requires": { - "whatwg-url": "^7.0.0" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "workbox-cacheable-response": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz", - "integrity": "sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==", - "dev": true, - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-cli": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-cli/-/workbox-cli-6.5.4.tgz", - "integrity": "sha512-+Cc0jYh25MofhCROZqfQkpYSAGvykyrUVekuuPaLFbJ8qxX/zzX8hRRpglfwxDwokAjz8S20oEph4s+MyQc+Yw==", - "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", - "inquirer": "^7.3.3", - "meow": "^7.1.0", - "ora": "^5.0.0", - "pretty-bytes": "^5.3.0", - "stringify-object": "^3.3.0", - "upath": "^1.2.0", - "update-notifier": "^4.1.0", - "workbox-build": "6.5.4" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^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 - }, - "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" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "workbox-core": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.4.tgz", - "integrity": "sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==", - "dev": true - }, - "workbox-expiration": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.4.tgz", - "integrity": "sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==", - "dev": true, - "requires": { - "idb": "^7.0.1", - "workbox-core": "6.5.4" - } - }, - "workbox-google-analytics": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz", - "integrity": "sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==", - "dev": true, - "requires": { - "workbox-background-sync": "6.5.4", - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "workbox-navigation-preload": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz", - "integrity": "sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==", - "dev": true, - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-precaching": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.4.tgz", - "integrity": "sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==", - "dev": true, - "requires": { - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "workbox-range-requests": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz", - "integrity": "sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==", - "dev": true, - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-recipes": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.4.tgz", - "integrity": "sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==", - "dev": true, - "requires": { - "workbox-cacheable-response": "6.5.4", - "workbox-core": "6.5.4", - "workbox-expiration": "6.5.4", - "workbox-precaching": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "workbox-routing": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.4.tgz", - "integrity": "sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==", - "dev": true, - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-strategies": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.4.tgz", - "integrity": "sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==", - "dev": true, - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-streams": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.4.tgz", - "integrity": "sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==", - "dev": true, - "requires": { - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4" - } - }, - "workbox-sw": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.4.tgz", - "integrity": "sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==", - "dev": true - }, - "workbox-window": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.4.tgz", - "integrity": "sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==", - "dev": true, - "requires": { - "@types/trusted-types": "^2.0.2", - "workbox-core": "6.5.4" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", - "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", - "dev": true, - "requires": {} - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "17.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz", - "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "dependencies": { - "yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", - "dev": true - } - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "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 - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "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 - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "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 - }, - "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" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "ylru": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", - "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", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } } } diff --git a/package.json b/package.json index 47898c9989..d5bd69ac9b 100644 --- a/package.json +++ b/package.json @@ -1,169 +1,17 @@ { - "name": "open-scd", - "version": "0.33.0", - "repository": "https://github.com/openscd/open-scd.git", - "description": "A bottom-up substation configuration designer for projects described using SCL `IEC 61850-6` Edition 2 or greater.", - "keywords": [ - "SCL", - "substation configuration", - "IEC", - "61850-6", - "SCD", - "editor" + "name": "openscd-monorepo", + "version": "0.0.1", + "description": "OpenSCD base distribution and plugins", + "private": true, + "workspaces": [ + "packages/*" ], - "author": "OMICRON electronics GmbH", - "license": "Apache-2.0", - "main": "open-scd.js", - "module": "open-scd.js", - "type": "module", - "dependencies": { - "@material/mwc-dialog": "0.22.1", - "@material/mwc-drawer": "0.22.1", - "@material/mwc-fab": "0.22.1", - "@material/mwc-formfield": "0.22.1", - "@material/mwc-icon": "0.22.1", - "@material/mwc-icon-button": "0.22.1", - "@material/mwc-icon-button-toggle": "0.22.1", - "@material/mwc-linear-progress": "0.22.1", - "@material/mwc-list": "0.22.1", - "@material/mwc-menu": "0.22.1", - "@material/mwc-select": "0.22.1", - "@material/mwc-snackbar": "0.22.1", - "@material/mwc-switch": "0.22.1", - "@material/mwc-tab": "0.22.1", - "@material/mwc-tab-bar": "0.22.1", - "@material/mwc-textarea": "0.22.1", - "@material/mwc-textfield": "0.22.1", - "@material/mwc-top-app-bar-fixed": "0.22.1", - "ace-custom-element": "^1.6.5", - "lit-element": "2.5.1", - "lit-html": "1.4.1", - "lit-translate": "^1.2.1", - "marked": "^4.0.10", - "panzoom": "^9.4.2" - }, "scripts": { - "lint:eslint": "eslint --ext .ts,.html . --ignore-path .gitignore", - "format:eslint": "eslint --ext .ts,.html . --fix --ignore-path .gitignore", - "lint:prettier": "prettier \"**/*.js\" \"**/*.ts\" --check --ignore-path .gitignore", - "format:prettier": "prettier \"**/*.js\" \"**/*.ts\" --write --ignore-path .gitignore", - "lint": "npm run lint:eslint && npm run lint:prettier", - "format": "npm run format:eslint && npm run format:prettier", - "test": "web-test-runner --coverage", - "test:snapshot": "web-test-runner --update-snapshots --coverage", - "test:manual": "web-test-runner --manual", - "test:watch": "web-test-runner --watch", - "test:unit": "web-test-runner --watch --group unit", - "test:integration": "web-test-runner --watch --group integration", - "doc:clean": "npx rimraf doc", - "doc:typedoc": "typedoc --plugin none --out doc src", - "doc:wca": "wca src --outDir doc/components", - "doc": "npm run doc:clean && npm run doc:typedoc && npm run doc:wca", - "release": "standard-version", - "release:minor": "standard-version --release-as minor", - "release:patch": "standard-version --release-as patch", - "release:major": "standard-version --release-as major", - "build": "npm run test && npm run build:notest && cp .nojekyll build/", - "build:notest": "npm run doc && snowpack build && workbox generateSW workbox-config.cjs", - "start": "snowpack dev" - }, - "devDependencies": { - "@commitlint/cli": "^13.1.0", - "@commitlint/config-conventional": "^13.1.0", - "@open-wc/eslint-config": "^4.3.0", - "@open-wc/semantic-dom-diff": "^0.19.5", - "@open-wc/testing": "^2.5.33", - "@snowpack/plugin-typescript": "^1.2.1", - "@types/marked": "^2.0.4", - "@types/node": "^16.6.1", - "@typescript-eslint/eslint-plugin": "^4.29.2", - "@typescript-eslint/parser": "^4.29.2", - "@web/dev-server-esbuild": "^0.2.16", - "@web/test-runner": "^0.13.22", - "concurrently": "^6.2.1", - "deepmerge": "^4.2.2", - "es-dev-server": "^2.1.0", - "eslint": "^7.32.0", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-babel": "^5.3.1", - "eslint-plugin-tsdoc": "^0.2.14", - "fast-check": "^2.19.0", - "husky": "^7.0.1", - "lint-staged": "^11.1.2", - "prettier": "^2.3.2", - "sinon": "^11.1.2", - "snowpack": "3.8.6", - "source-map": "^0.7.4", - "standard-version": "^9.3.1", - "tslib": "^2.3.1", - "typedoc": "^0.21.10", - "typedoc-plugin-markdown": "3.10.4", - "typescript": "4.3.5", - "web-component-analyzer": "^1.1.6", - "workbox-cli": "^6.2.4" - }, - "eslintConfig": { - "extends": [ - "@open-wc/eslint-config", - "eslint-config-prettier" - ] - }, - "prettier": { - "singleQuote": true, - "arrowParens": "avoid" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged", - "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" - } - }, - "lint-staged": { - "*.ts": [ - "eslint --fix", - "prettier --write" - ] + "test": "echo \"Error: no test specified\" && exit 1" }, - "commitlint": { - "extends": [ - "@commitlint/config-conventional" - ] + "repository": { + "type": "git", + "url": "git+https://github.com/openscd/open-scd.git" }, - "standard-version": { - "types": [ - { - "type": "feat", - "section": "Features" - }, - { - "type": "fix", - "section": "Bug Fixes" - }, - { - "type": "chore", - "hidden": true - }, - { - "type": "docs", - "hidden": true - }, - { - "type": "style", - "hidden": true - }, - { - "type": "refactor", - "hidden": true - }, - { - "type": "perf", - "hidden": true - }, - { - "type": "test", - "hidden": true - } - ], - "commitUrlFormat": "https://github.com/openscd/open-scd/commits/{{hash}}" - } + "license": "Apache-2.0" } diff --git a/packages/open-scd/.gitignore b/packages/open-scd/.gitignore new file mode 100644 index 0000000000..6cf5566f78 --- /dev/null +++ b/packages/open-scd/.gitignore @@ -0,0 +1,22 @@ +## editors +/.idea +/.vscode + +## system files +.DS_Store + +## npm +node_modules/ +/npm-debug.log + +## testing +/coverage/ +/**/dist/*.snap.dev.js + +## docs +/doc/ + +# build +/_site/ +/build/ +/out-tsc/ diff --git a/.nojekyll b/packages/open-scd/.nojekyll similarity index 100% rename from .nojekyll rename to packages/open-scd/.nojekyll diff --git a/CC-EULA.pdf b/packages/open-scd/CC-EULA.pdf similarity index 100% rename from CC-EULA.pdf rename to packages/open-scd/CC-EULA.pdf diff --git a/CHANGELOG.md b/packages/open-scd/CHANGELOG.md similarity index 100% rename from CHANGELOG.md rename to packages/open-scd/CHANGELOG.md diff --git a/LICENSE.md b/packages/open-scd/LICENSE.md similarity index 100% rename from LICENSE.md rename to packages/open-scd/LICENSE.md diff --git a/packages/open-scd/README.md b/packages/open-scd/README.md new file mode 100644 index 0000000000..2262239932 --- /dev/null +++ b/packages/open-scd/README.md @@ -0,0 +1,65 @@ +# `OpenSCD` + +[![Build Status](https://travis-ci.org/openscd/open-scd.svg?branch=main)](https://travis-ci.org/openscd/open-scd) +[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fopenscd%2Fopen-scd.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fopenscd%2Fopen-scd?ref=badge_shield) +[![Built with open-wc recommendations](https://img.shields.io/badge/built%20with-open--wc-blue.svg)](https://github.com/open-wc) +[![Slack LF Energy](https://img.shields.io/badge/LF%20Energy%20Slack-%20%23OpenSCD%20chat-purple?logo=slack&color=2aa198&labelColor=6c71c4)](https://lfenergy.slack.com/archives/C03LH7EUP34) + +Open Substation Communication Designer is an editor for SCL files as described in `IEC 61850-6`. + +> Try it out at [openscd.github.io](https://openscd.github.io)! + +Make sure your web browser has enough free memory! If needed, disable plug-ins and close unused browser tabs. + +## Installation + +In order to install OpenSCD on your local device (only for you), simply visit [openscd.github.io](https://openscd.github.io), click the "Install OpenSCD" button in your address bar (Chrome or Edge on desktop) or click the "Add OpenSCD to home screen" notification in any mobile browser. + +In order to install your own instance of OpenSCD on your own webserver (e.g. on your company intranet), simply download [our latest release](https://github.com/openscd/open-scd/releases/latest) (`open-scd.zip` or `open-scd.tar.gz`) and extract the archive contents into the "webroot" directory of your web server. + +If you don't have your own webserver but still want your own version of OpenSCD hosted locally (e.g. on a system without an internet connection), you can [use a browser plugin that acts as a local webserver](https://github.com/openscd/open-scd/wiki/Install-OpenSCD#offline) (only for you) instead. + +### Building + +If you want to build OpenSCD yourself in order to make some changes to your local installation or to contribute to the project, you may first want to install [Node.js](https://nodejs.org/) in order to be able to use our local development setup. It is recommended to use Node.js 18.x. it is is the version used to build and test on GitHub Actions. + +Once Node.js is installed on your system, you may get started by entering the following lines in your command prompt: + +``` +git clone https://github.com/openscd/open-scd.git +cd open-scd +npm install +npm start +``` + +This will start a local development server and open a browser window which will automatically be reloaded as soon as you save any changes to your local source code files. + +### TypeDoc + +This project uses [TypeDoc](https://typedoc.org/) to transform documentation comments in the source code into a rendered HTML document that can be queried and navigated through. If you want to consult the generated documentation for the TypeScript components, mixins, modules and other relevant artifacts of this project, you can [do it here](https://openscd.github.io/doc/). + +### Linting & Formatting + +If you use VSCode to develop, we recommend you install and use the [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) and [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) extensions in order to automatically lint and format your code as you edit it. There are similar plugins available for using [ESLint](https://eslint.org/) and [Prettier](https://prettier.io/) from within other IDEs and text editors. + +### Scripts + +We provide the following `npm` scripts for your convenience: + +- `npm start` runs `OpenSCD` for development, reloading on file changes +- `npm test` runs the test suite with Karma +- `npm run lint` runs the linter (fixes problems in your code) +- `npm run format` runs the formatter (formats your code in a unified way) +- `npm run doc` builds HTML documentation into the `doc` directory +- `npm run build` builds a deployable version of the project into the `dist` directory + +## License + +The [IEC 61850](https://webstore.iec.ch/publication/63319) XSD and NSD code components used are +distributed under their [end user license agreement](CC-EULA.pdf). + +This project is licensed under the [Apache License 2.0](LICENSE.md). + +© 2020-2022 OMICRON electronics GmbH, TransnetBW GmbH, Alliander N.V., and others + +[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fopenscd%2Fopen-scd.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fopenscd%2Fopen-scd?ref=badge_large) diff --git a/ROADMAP.md b/packages/open-scd/ROADMAP.md similarity index 100% rename from ROADMAP.md rename to packages/open-scd/ROADMAP.md diff --git a/browserconfig.xml b/packages/open-scd/browserconfig.xml similarity index 100% rename from browserconfig.xml rename to packages/open-scd/browserconfig.xml diff --git a/favicon.ico b/packages/open-scd/favicon.ico similarity index 100% rename from favicon.ico rename to packages/open-scd/favicon.ico diff --git a/index.html b/packages/open-scd/index.html similarity index 100% rename from index.html rename to packages/open-scd/index.html diff --git a/manifest.json b/packages/open-scd/manifest.json similarity index 100% rename from manifest.json rename to packages/open-scd/manifest.json diff --git a/packages/open-scd/package-lock.json b/packages/open-scd/package-lock.json new file mode 100644 index 0000000000..06726ba9ae --- /dev/null +++ b/packages/open-scd/package-lock.json @@ -0,0 +1,32472 @@ +{ + "name": "open-scd", + "version": "0.33.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "open-scd", + "version": "0.33.0", + "license": "Apache-2.0", + "dependencies": { + "@material/mwc-dialog": "0.22.1", + "@material/mwc-drawer": "0.22.1", + "@material/mwc-fab": "0.22.1", + "@material/mwc-formfield": "0.22.1", + "@material/mwc-icon": "0.22.1", + "@material/mwc-icon-button": "0.22.1", + "@material/mwc-icon-button-toggle": "0.22.1", + "@material/mwc-linear-progress": "0.22.1", + "@material/mwc-list": "0.22.1", + "@material/mwc-menu": "0.22.1", + "@material/mwc-select": "0.22.1", + "@material/mwc-snackbar": "0.22.1", + "@material/mwc-switch": "0.22.1", + "@material/mwc-tab": "0.22.1", + "@material/mwc-tab-bar": "0.22.1", + "@material/mwc-textarea": "0.22.1", + "@material/mwc-textfield": "0.22.1", + "@material/mwc-top-app-bar-fixed": "0.22.1", + "ace-custom-element": "^1.6.5", + "lit-element": "2.5.1", + "lit-html": "1.4.1", + "lit-translate": "^1.2.1", + "marked": "^4.0.10", + "panzoom": "^9.4.2" + }, + "devDependencies": { + "@commitlint/cli": "^13.1.0", + "@commitlint/config-conventional": "^13.1.0", + "@open-wc/eslint-config": "^4.3.0", + "@open-wc/semantic-dom-diff": "^0.19.5", + "@open-wc/testing": "^2.5.33", + "@snowpack/plugin-typescript": "^1.2.1", + "@types/marked": "^2.0.4", + "@types/node": "^16.6.1", + "@typescript-eslint/eslint-plugin": "^4.29.2", + "@typescript-eslint/parser": "^4.29.2", + "@web/dev-server-esbuild": "^0.2.16", + "@web/test-runner": "^0.13.22", + "concurrently": "^6.2.1", + "deepmerge": "^4.2.2", + "es-dev-server": "^2.1.0", + "eslint": "^7.32.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-babel": "^5.3.1", + "eslint-plugin-tsdoc": "^0.2.14", + "fast-check": "^2.19.0", + "husky": "^7.0.1", + "lint-staged": "^11.1.2", + "prettier": "^2.3.2", + "sinon": "^11.1.2", + "snowpack": "3.8.6", + "source-map": "^0.7.4", + "standard-version": "^9.3.1", + "tslib": "^2.3.1", + "typedoc": "^0.21.10", + "typedoc-plugin-markdown": "3.10.4", + "typescript": "4.3.5", + "web-component-analyzer": "^1.1.6", + "workbox-cli": "^6.2.4" + } + }, + "node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dev": true, + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz", + "integrity": "sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ==", + "dev": true, + "peer": true, + "dependencies": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/eslint-plugin": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.18.10.tgz", + "integrity": "sha512-iV1OZj/7eg4wZIcsVEkXS3MUWdhmpLsu2h+9Zr2ppywKWdCRs6VfjxbRzmHHYeurTizrrnaJ9ZkbO8KOv4lauQ==", + "dev": true, + "peer": true, + "dependencies": { + "eslint-rule-composer": "^0.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/eslint-parser": ">=7.11.0", + "eslint": ">=7.5.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", + "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz", + "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", + "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz", + "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz", + "integrity": "sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "regexpu-core": "^4.7.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz", + "integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz", + "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz", + "integrity": "sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-wrap-function": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "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, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz", + "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", + "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.3", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.15.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", + "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz", + "integrity": "sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz", + "integrity": "sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz", + "integrity": "sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.16.4", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", + "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz", + "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz", + "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz", + "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz", + "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz", + "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz", + "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz", + "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz", + "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz", + "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz", + "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz", + "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz", + "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz", + "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz", + "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz", + "integrity": "sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz", + "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz", + "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz", + "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz", + "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz", + "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz", + "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz", + "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz", + "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz", + "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz", + "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz", + "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz", + "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz", + "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz", + "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.16.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz", + "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.15.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz", + "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz", + "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz", + "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz", + "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz", + "integrity": "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz", + "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz", + "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz", + "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz", + "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz", + "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz", + "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz", + "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz", + "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz", + "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz", + "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz", + "integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-compilation-targets": "^7.16.3", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.2", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-async-generator-functions": "^7.16.4", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-class-static-block": "^7.16.0", + "@babel/plugin-proposal-dynamic-import": "^7.16.0", + "@babel/plugin-proposal-export-namespace-from": "^7.16.0", + "@babel/plugin-proposal-json-strings": "^7.16.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-object-rest-spread": "^7.16.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-proposal-private-property-in-object": "^7.16.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.0", + "@babel/plugin-transform-async-to-generator": "^7.16.0", + "@babel/plugin-transform-block-scoped-functions": "^7.16.0", + "@babel/plugin-transform-block-scoping": "^7.16.0", + "@babel/plugin-transform-classes": "^7.16.0", + "@babel/plugin-transform-computed-properties": "^7.16.0", + "@babel/plugin-transform-destructuring": "^7.16.0", + "@babel/plugin-transform-dotall-regex": "^7.16.0", + "@babel/plugin-transform-duplicate-keys": "^7.16.0", + "@babel/plugin-transform-exponentiation-operator": "^7.16.0", + "@babel/plugin-transform-for-of": "^7.16.0", + "@babel/plugin-transform-function-name": "^7.16.0", + "@babel/plugin-transform-literals": "^7.16.0", + "@babel/plugin-transform-member-expression-literals": "^7.16.0", + "@babel/plugin-transform-modules-amd": "^7.16.0", + "@babel/plugin-transform-modules-commonjs": "^7.16.0", + "@babel/plugin-transform-modules-systemjs": "^7.16.0", + "@babel/plugin-transform-modules-umd": "^7.16.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.0", + "@babel/plugin-transform-new-target": "^7.16.0", + "@babel/plugin-transform-object-super": "^7.16.0", + "@babel/plugin-transform-parameters": "^7.16.3", + "@babel/plugin-transform-property-literals": "^7.16.0", + "@babel/plugin-transform-regenerator": "^7.16.0", + "@babel/plugin-transform-reserved-words": "^7.16.0", + "@babel/plugin-transform-shorthand-properties": "^7.16.0", + "@babel/plugin-transform-spread": "^7.16.0", + "@babel/plugin-transform-sticky-regex": "^7.16.0", + "@babel/plugin-transform-template-literals": "^7.16.0", + "@babel/plugin-transform-typeof-symbol": "^7.16.0", + "@babel/plugin-transform-unicode-escapes": "^7.16.0", + "@babel/plugin-transform-unicode-regex": "^7.16.0", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.0", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.4.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.19.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", + "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.3.tgz", + "integrity": "sha512-IAdDC7T0+wEB4y2gbIL0uOXEYpiZEeuFUTVbdGq+UwCcF35T/tS8KrmMomEwEc5wBbyfH3PJVpTSUqrhPDXFcQ==", + "dev": true, + "dependencies": { + "core-js-pure": "^3.19.0", + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", + "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.3", + "@babel/types": "^7.16.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.15.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@commitlint/cli": { + "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, + "dependencies": { + "@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", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/config-conventional": { + "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, + "dependencies": { + "conventional-changelog-conventionalcommits": "^4.3.1" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/ensure": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-13.2.0.tgz", + "integrity": "sha512-rqhT62RehdLTRBu8OrPHnRCCd/7RmHEE4TiTlT4BLlr5ls5jlZhecOQWJ8np872uCNirrJ5NFjnjYYdbkNoW9Q==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/execute-rule": { + "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, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/format": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-13.2.0.tgz", + "integrity": "sha512-yNBQJe6YFhM1pJAta4LvzQxccSKof6axJH7ALYjuhQqfT8AKlad7Y/2SuJ07ioyreNIqwOTuF2UfU8yJ7JzEIQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/is-ignored": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-13.2.0.tgz", + "integrity": "sha512-onnx4WctHFPPkHGFFAZBIWRSaNwuhixIIfbwPhcZ6IewwQX5n4jpjwM1GokA7vhlOnQ57W7AavbKUGjzIVtnRQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "semver": "7.3.5" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/lint": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-13.2.0.tgz", + "integrity": "sha512-5XYkh0e9ehHjA7BxAHFpjPgr1qqbFY8OFG1wpBiAhycbYBtJnQmculA2wcwqTM40YCUBqEvWFdq86jTG8fbkMw==", + "dev": true, + "dependencies": { + "@commitlint/is-ignored": "^13.2.0", + "@commitlint/parse": "^13.2.0", + "@commitlint/rules": "^13.2.0", + "@commitlint/types": "^13.2.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/load": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-13.2.1.tgz", + "integrity": "sha512-qlaJkj0hfa9gtWRfCfbgFBTK3GYQRmjZhba4l9mUu4wV9lEZ4ICFlrLtd/8kaLXf/8xbrPhkAPkVFOAqM0YwUQ==", + "dev": true, + "dependencies": { + "@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", + "typescript": "^4.4.3" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/load/node_modules/typescript": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", + "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/@commitlint/message": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-13.2.0.tgz", + "integrity": "sha512-+LlErJj2F2AC86xJb33VJIvSt25xqSF1I0b0GApSgoUtQBeJhx4SxIj1BLvGcLVmbRmbgTzAFq/QylwLId7EhA==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/parse": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-13.2.0.tgz", + "integrity": "sha512-AtfKSQJQADbDhW+kuC5PxOyBANsYCuuJlZRZ2PYslOz2rvWwZ93zt+nKjM4g7C9ETbz0uq4r7/EoOsTJ2nJqfQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "conventional-changelog-angular": "^5.0.11", + "conventional-commits-parser": "^3.2.2" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/read": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-13.2.0.tgz", + "integrity": "sha512-7db5e1Bn3re6hQN0SqygTMF/QX6/MQauoJn3wJiUHE93lvwO6aFQxT3qAlYeyBPwfWsmDz/uSH454jtrSsv3Uw==", + "dev": true, + "dependencies": { + "@commitlint/top-level": "^13.2.0", + "@commitlint/types": "^13.2.0", + "fs-extra": "^10.0.0", + "git-raw-commits": "^2.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/resolve-extends": { + "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, + "dependencies": { + "import-fresh": "^3.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/rules": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-13.2.0.tgz", + "integrity": "sha512-O3A9S7blOzvHfzrJrUQe9JxdtGy154ol/GXHwvd8WfMJ10y5ryBB4b6+0YZ1XhItWzrEASOfOKbD++EdLV90dQ==", + "dev": true, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/to-lines": { + "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, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/top-level": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-13.2.0.tgz", + "integrity": "sha512-knBvWYbIq6VV6VPHrVeDsxDiJq4Zq6cv5NIYU3iesKAsmK2KlLfsZPa+Ig96Y4AqAPU3zNJwjHxYkz9qxdBbfA==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/top-level/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/types": { + "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, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@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, + "dependencies": { + "lodash.get": "^4", + "make-error": "^1", + "ts-node": "^9", + "tslib": "^2" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "cosmiconfig": ">=6" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@gar/promisify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", + "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", + "dev": true + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@koa/cors": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-3.1.0.tgz", + "integrity": "sha512-7ulRC1da/rBa6kj6P4g2aJfnET3z8Uf3SWu60cjbtxTA5g8lxRdX/Bd2P92EagGwwAhANeNw8T8if99rJliR6Q==", + "dev": true, + "dependencies": { + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@material/animation": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/animation/-/animation-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-R1QbY4fC6RBOoi4Dq/3yuD5OK0ts02WxGt1JXaddsdnO6szZJcfXm2aiCweU1GUpchoah+YzDBJrsmSoqFCKIg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/base": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/base/-/base-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-bCxGPqFQPh3rfBdqG+UvlrnRPSP2CzHhn0f44NqELY/SkmujIfS30rJOX965IKoD6lGdKWIfi/sAm03I81pZ7g==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/button": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/button/-/button-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-FV44k7WH8d0Z7TjKldEILWXG+bgVz0CplqAYiPiRoxIaGljOq/D7+enuC8tJOUst+zyihVSKyYT69ghWuOKjjg==", + "dependencies": { + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/touch-target": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/density": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/density/-/density-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-uCOzDL3U8EAOU6A+3lwbys6lB5P24PwEsNoe5YoB7CmkNS+8LLFPdemp4dMdVY2xGlDX+McaUOKJKmFub4cPUA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dialog": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/dialog/-/dialog-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-WOK+HN7HQa3mHvNEsEnleDOHCLRAbpFOhGuGyqnSDOCyxTl2DcNCUqsWupDVDpAlLv2OfLdmceyJrejMF+8q7g==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/button": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/icon-button": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/touch-target": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dom": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/dom/-/dom-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-9XvFE2OuOZizYXF3ptyMcJuN/JHZA4vKq5lPLrIbcTXnd4DzJ7L4JrMcMb75xfjugxj8uaXjdfI62gwHfzP/aw==", + "dependencies": { + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/drawer": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/drawer/-/drawer-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-a5tGNXOXJglDpq/5blE3ZxbfTnuYU6pnkswWHliSUc71fC1A6XmK51vLz/PCGPGV3qL8JS2sakOVMdssRuLPxA==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/list": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/elevation": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-fuOG6w7Crz+9iibkBAXOQGYBWMCDZSvXA9PlZFW1JFCHUWyzzTMJeJIaHAVMHFzhbVF/rjqF6CliDZyAz4fULg==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/feature-targeting": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-e72VDSIMrwF5aX4rkQcO1AHewX/ydWOujFtMBk4QD/asyDPKBv+bKwO6f/msM+Wqen8I+DbHC0PH/2K15gQ3pQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/floating-label": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-MZIVki9uD6JMyfQ6v5FIgt2WEZQ3fOCpoOiE8c9cHuNiawVJc3pmoA5wT/38hJs3iMCx86D1jL1vK9UdyIdF7A==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/form-field": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/form-field/-/form-field-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-wYNyh1RMqEviuWcredWYx8ENEjR1GYdQu/NE9SKlfK7zKsFxF7szwHDd/3cZd7BSYVJUeylveDW+KgXQaW0YpQ==", + "dependencies": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/icon-button": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/icon-button/-/icon-button-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-2cKO9FIEYwQqd6qlvuC2IbZQ3m8xvw690sx+H/+1UFs17TY/STDfJRj1p5qf+MnIqaiz5jsoxQemuUkcej+uBw==", + "dependencies": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/touch-target": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/line-ripple": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-9LL/d3jWNesupmwvZtNbV2B1rc1i5BHatFgVt62B1xvfaViRL7EyS0K/+kv9SPWU6nqPLfdj33vOMukn2zIgAg==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/linear-progress": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/linear-progress/-/linear-progress-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-SuEJPdtMbY9hN7X8s9Y8MzVfnmQy32gi4cSIv3r3aL5wmfO29Dg5Gw8OkggEuVjy0QKTXSN9N74WdCdpQ5rUPw==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/progress-indicator": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/list": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/list/-/list-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-Vai+ggNyDBuWM0ihBs3ELGEKCdRmFoTFEhfcZ321VEI2YE8EY6eW1tvazzBfSzpLZkrqcn2QkqD6UpQBzkp4AA==", + "dependencies": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/menu/-/menu-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-8JMFM/QdIC+CRDf79uSe5b4/kCF+3Re90OYlCVaT8LyfYGzYNtBQ8LPKaWlmS2fRN0eIBd1faoUGO0bvslulhg==", + "dependencies": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/list": "12.0.0-canary.22d29cbb4.0", + "@material/menu-surface": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu-surface": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-kvfewRPo4sJtGzBK/T94jjRYnnIaQbC5xqQ+AmGZHGUBsV713cVE1IWVSm0d+7MbERsqKMG9/JZik2Um3YZetQ==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/mwc-base": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-base/-/mwc-base-0.22.1.tgz", + "integrity": "sha512-KtQf4lQUoTQuetfhfRbVJhsXVcpX74LP4JI/cLmx+SGbpG+pXXWf6VI2MvZY2UoHVEkldqPHndeuqctBoY7vgg==", + "dependencies": { + "@material/base": "=12.0.0-canary.22d29cbb4.0", + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-button": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-button/-/mwc-button-0.22.1.tgz", + "integrity": "sha512-Z+NOM+d7QkmIOGbVT7BA/rzLJMXGaxC4Bp+dXcm3ESu6ohPBtG878IyZGSGiMXXDtmAKgMAIp74z4gE/Y0j1pA==", + "dependencies": { + "@material/mwc-icon": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-checkbox": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-checkbox/-/mwc-checkbox-0.22.1.tgz", + "integrity": "sha512-JfUEVWAos/sscPH1k9oUKhjtCbTuU4rl7GgKcenCF6EnxTaXbzxGJKPz28BUS5I14JM7vHNUwfqTC+M/87tNxg==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-dialog": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-dialog/-/mwc-dialog-0.22.1.tgz", + "integrity": "sha512-NHHtsled57N2EjDLelEN5YeJSpW/PYxayA+d2B2zpQPbhqhl//VKxJ9fA6CPm1uc+Cvp2G7lbZ2oUUSQivu+Aw==", + "dependencies": { + "@material/dialog": "=12.0.0-canary.22d29cbb4.0", + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-button": "^0.22.1", + "blocking-elements": "^0.1.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1", + "wicg-inert": "^3.0.0" + } + }, + "node_modules/@material/mwc-drawer": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-drawer/-/mwc-drawer-0.22.1.tgz", + "integrity": "sha512-klwo4VMIIeV4UY+0t4HJ5/2Z8hUjsPHoleEFamRf97yVgPnmCHHaXhe7fjq8srxgkXK81PzwA7PFGBofS248ag==", + "dependencies": { + "@material/drawer": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "blocking-elements": "^0.1.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1", + "wicg-inert": "^3.0.0" + } + }, + "node_modules/@material/mwc-fab": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-fab/-/mwc-fab-0.22.1.tgz", + "integrity": "sha512-KFzZFFr/Nq3bJ0JJyEy7SHsvVLhoqMCTELEjcy2s4fZYT1mLUmHK+Iip1vuKP2I96Yvnym4wkFEcwz/zAMCWbA==", + "dependencies": { + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-floating-label": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-floating-label/-/mwc-floating-label-0.22.1.tgz", + "integrity": "sha512-BkFt9WL8RE05JESv73egh7XUsmXALL78u1ev98T579SER3kwfIepQhXTvAAnFRHFa7QjT8qa/U6RmsvHe1zYbg==", + "dependencies": { + "@material/floating-label": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-formfield": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-formfield/-/mwc-formfield-0.22.1.tgz", + "integrity": "sha512-jk8YyX1STjh+HCQOjlEmtr+kVG8Nlkemh9GoVNkJoIH6k7n+WgYcVXoJtfGWJFBkO8kfHziRVeLRPGP8Nt8ErA==", + "dependencies": { + "@material/form-field": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-icon": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-icon/-/mwc-icon-0.22.1.tgz", + "integrity": "sha512-LX4MUThlYEBfpTr1O53J27KbzFhPbe2dBGouY9piztCI3FObbRVQI+LXFlXJm6KU0BzemaQfz105ZAuLlPAN4g==", + "dependencies": { + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-icon-button": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-icon-button/-/mwc-icon-button-0.22.1.tgz", + "integrity": "sha512-UHwWwzn9LrAKFmQLuKSMQZe1m+X0Xi//xAhLiIBOHaXyEH3QxmKr7pR82e8HQPc42+jUAxKUFmohMrppG6Dmcg==", + "dependencies": { + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-icon-button-toggle": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-icon-button-toggle/-/mwc-icon-button-toggle-0.22.1.tgz", + "integrity": "sha512-4r2Hvmo8qhYfEmWNUPvXxmBY0PTdN3JIFvn7d8WPukPgVSCfhh8o4MbxySoHcuo81A+2K/eMRAiLNY7Y8O5Aew==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-icon-button": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-line-ripple": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-line-ripple/-/mwc-line-ripple-0.22.1.tgz", + "integrity": "sha512-Wx2BHD+/z4Fm8TXyiv59UVeNAirunTfR3uCEjGMU/R7mXUwjpjOhY5bNYGUcP9VyMGG5CkLovc8XX96/iKs1ag==", + "dependencies": { + "@material/line-ripple": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-linear-progress": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-linear-progress/-/mwc-linear-progress-0.22.1.tgz", + "integrity": "sha512-GqqUDomF1nZh6cN0Dgz41vphfvDR17+vdtYk1O5YU9ajW/yd+9SBqwbjfqo4g/jmCpJvMeKnBDZo3Hbc8KnK7g==", + "dependencies": { + "@material/linear-progress": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/theme": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-list": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-list/-/mwc-list-0.22.1.tgz", + "integrity": "sha512-NGfacR/vSHMte7BOrFM7Cafi+tRIeBH8vNFcpP7yjqPkYCXt/9cEw0j1KVtldCRi20V38vkewUKdh2v3DiP5dg==", + "dependencies": { + "@material/base": "=12.0.0-canary.22d29cbb4.0", + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/list": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-checkbox": "^0.22.1", + "@material/mwc-radio": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-menu": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-menu/-/mwc-menu-0.22.1.tgz", + "integrity": "sha512-fY7dyxv9aIccMqPp0+ihbXfB8g7Khvz7tYhtVMLqb6CgpdXf06a/lW50eN0Mk4GC+mFyN36HKHDP7LMLFfsvlA==", + "dependencies": { + "@material/menu": "=12.0.0-canary.22d29cbb4.0", + "@material/menu-surface": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-list": "^0.22.1", + "@material/shape": "=12.0.0-canary.22d29cbb4.0", + "@material/theme": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-notched-outline": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-notched-outline/-/mwc-notched-outline-0.22.1.tgz", + "integrity": "sha512-Bi+CKK24/ypgQZech+vUOWPR8hjPxXILf+mt5liVoNXddGITbdFAShFndNb4Ln4Rn3omzvC63enhpYSS4ByRNw==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/notched-outline": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-radio": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-radio/-/mwc-radio-0.22.1.tgz", + "integrity": "sha512-pFVuDl/bSCK7gVXC54Lsm6lMclt8MYk0u4yVsjaEUTeFk0xMK1ZvoXifIkW0IHhAJVmWgGpWX57wSzLrRZbUNw==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "@material/radio": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-ripple": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-ripple/-/mwc-ripple-0.22.1.tgz", + "integrity": "sha512-QQyWWPBZ6veWNbBMWo8WQw0iY9QUjLLANorug8mPHv13ETdhwVUUozeKOY0ZCXWupNlqtap1Gd0IQjv6HVRMjA==", + "dependencies": { + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/ripple": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-select": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-select/-/mwc-select-0.22.1.tgz", + "integrity": "sha512-P5o2DD48AtEpr+ZqbFlQ04GgSmcbhOTdQEeDBkDAxSsuErXQZgzY1aPCXlaDI0QzQ/gNP/13b4ejLqstVp9SQg==", + "dependencies": { + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/floating-label": "=12.0.0-canary.22d29cbb4.0", + "@material/line-ripple": "=12.0.0-canary.22d29cbb4.0", + "@material/list": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-floating-label": "^0.22.1", + "@material/mwc-icon": "^0.22.1", + "@material/mwc-line-ripple": "^0.22.1", + "@material/mwc-list": "^0.22.1", + "@material/mwc-menu": "^0.22.1", + "@material/mwc-notched-outline": "^0.22.1", + "@material/select": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-snackbar": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-snackbar/-/mwc-snackbar-0.22.1.tgz", + "integrity": "sha512-4ZTb4Gk/zKJWvvqqKuOFo1NO68DnCgyQlktPdNNTGhCERdxkEQnZz+mkAw+Mfr5tCBizomgaFzd6tuAZCUutyQ==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/snackbar": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-switch": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-switch/-/mwc-switch-0.22.1.tgz", + "integrity": "sha512-KDY3uqT2qTEw6Z9TS91Ucs0LViUcMsP1XHu6ZNhbv9Ai1uK/i8pwVWAIGIX9Cm1iCdjiYGfKm4DZLORDb/rfEQ==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "@material/switch": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-tab": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-tab/-/mwc-tab-0.22.1.tgz", + "integrity": "sha512-sNPE8kRQEH04vEStxiidTjpyuHc+5Wm8+OVU8wrf6ChJa8KUV5bi2blWm6PW4rfQRo2Bs8AarDXv15t4wv3XWg==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "@material/mwc-tab-indicator": "^0.22.1", + "@material/tab": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-tab-bar": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-tab-bar/-/mwc-tab-bar-0.22.1.tgz", + "integrity": "sha512-USn9pIMNfz2vPh7w2U55j0EVr82x3odq9VdcDGG5d4jWwzMPjJ9CKMjqgFrlIiPmxieD5zeSW0LauGhwv6ujOg==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-tab": "^0.22.1", + "@material/mwc-tab-scroller": "^0.22.1", + "@material/tab": "=12.0.0-canary.22d29cbb4.0", + "@material/tab-bar": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-tab-indicator": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-tab-indicator/-/mwc-tab-indicator-0.22.1.tgz", + "integrity": "sha512-/Q8vju7DAysqz3Fo+IINaGSeU9BinZbdaSUyRFjfrUWlzJCE6IYYB7zMyc2W+EjaxhjftpL/N3Sw50Xw+pAL+A==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/tab-indicator": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-tab-scroller": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-tab-scroller/-/mwc-tab-scroller-0.22.1.tgz", + "integrity": "sha512-dqAsXS7Nyw61vVb6d11zDg0xuvAYfOyPmz6wLwcXxzSlHOCfkuFu2fcjhssZIlW3DzzzrCw7aZ+T6mHOZcr0dg==", + "dependencies": { + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/tab-scroller": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-textarea": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-textarea/-/mwc-textarea-0.22.1.tgz", + "integrity": "sha512-ta5ARYpxaCRvseXTKkp8tFBfJ0oP8FWsE4FymrjV5b+UEAEzAzjcWWolIDyS7DdixSj1ROI5dJHsU/on5lWPjw==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-textfield": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-textfield": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-textfield/-/mwc-textfield-0.22.1.tgz", + "integrity": "sha512-7xLlW2B1wMnCi2JSlOELELPEUda0w6bWpjn4LB4UPi1hAWG8VR+Rn5rR6q4NDav9pad+qA7+PGjNlE32xVUm7g==", + "dependencies": { + "@material/floating-label": "=12.0.0-canary.22d29cbb4.0", + "@material/line-ripple": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-floating-label": "^0.22.1", + "@material/mwc-line-ripple": "^0.22.1", + "@material/mwc-notched-outline": "^0.22.1", + "@material/textfield": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-top-app-bar": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-top-app-bar/-/mwc-top-app-bar-0.22.1.tgz", + "integrity": "sha512-SHQLjMrHRYsJaT0+8rNjkYW9LDi93AsGX+USuCYhVPeMhBUcqVmr09lTCqj3xyJ3JAy43XONPhtXjxlMT1jCNg==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/top-app-bar": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-top-app-bar-fixed": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-top-app-bar-fixed/-/mwc-top-app-bar-fixed-0.22.1.tgz", + "integrity": "sha512-ZpQGKmqmSHp1izqX1U0S+3E8s5xLSB81cjFlQPFKG6arU6TO8Xqyzd05JPfFHfau5aZeHQuJB0MOGN2QT31UCw==", + "dependencies": { + "@material/mwc-top-app-bar": "^0.22.1", + "@material/top-app-bar": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/notched-outline": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-LgVwQri2sI/EnAbSjyyzhifjcBKpYO48oy6HyRg6Cq/ZxOgNv3u/VG4fE3ToyNLe8pMPkfQsn2g8czuZoRYwxg==", + "dependencies": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/floating-label": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/progress-indicator": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-XnG61vDDUPQWK3obQcPHaTPxEKFfPKo8qtiKxkFnGdzIeezDGj7n9m8gdvzcqed8rGZWCNKYOzodkRfplStpMw==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/radio": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/radio/-/radio-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-piGy+6YEtW3odicIImRGnc3uY0iD42IAe4+pnVo36KsfHLm5peYuEc0jrLI4zdmOPYlRxSskIbAAzfMKdwKG1A==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/touch-target": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/ripple": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-IzBtXi4EWx27Hkfd5Zkx/MrZAXJZe0AAQCo37Etl/af0/aJPIOyCOdHQiwoK2FqRH71pmNfUGrUWOeUxFyaSdw==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/rtl": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-R7u7w5U+mvRwsj15tpf/CbALs3FrGVidsTkv8C1uZDK1ae490De8HSe839lcFcXmM8c/PFSx5B3rKyQG2AyraQ==", + "dependencies": { + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/select": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/select/-/select-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-ROpNqkHkv/ZUWNf4tWxDo/L6P2QwWaNKADSqYpg/XXecAm7NdBX5aDo63VCBPCm57JkAdBWJQB5MRrbkaWLTfA==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/floating-label": "12.0.0-canary.22d29cbb4.0", + "@material/line-ripple": "12.0.0-canary.22d29cbb4.0", + "@material/list": "12.0.0-canary.22d29cbb4.0", + "@material/menu": "12.0.0-canary.22d29cbb4.0", + "@material/menu-surface": "12.0.0-canary.22d29cbb4.0", + "@material/notched-outline": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/shape": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/shape/-/shape-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-yKC+cqdjGYg3sseZ4baNe9OLhBENHwX2SpJGZORZ7ix4/8pxzFG3wO80eZ8LsldzYem9MmtcbRilBZ4rvvxh0A==", + "dependencies": { + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/snackbar": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/snackbar/-/snackbar-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-NDYR2rYyF2kbQYCec/I0NmAPtnXMBpGYEQ4/m10rAzTP2hsyySZs0cKk54/V3czT+gFz9C9W3zCm1CwgJwL5fA==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/button": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/icon-button": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/switch": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/switch/-/switch-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-kubSphtXl74TC/PAjp67lYi7Ngk0MEKTLzp1ZHiMHElew2Z9/IYHP0pPaQRTkBY0ddIx6hVdHMiMf8qB4zuz2w==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/tab/-/tab-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-Tmb+8Dsx7wItbqOW4JHUVIq3I/inM3l/gk6EV/ctNeyz8coPIJL39yN4CcTX+VHsYykF+tK3jz4QSQX0ASfimQ==", + "dependencies": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/tab-indicator": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-bar": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/tab-bar/-/tab-bar-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-cxGyfONh9tFK2tISHDSAWFfH/uxH/HfTTjuDQIiPkOLmr6oVgGPXP2AdsZ0Z60HJCAedbR9mdWCesEk8w4f8+Q==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/tab": "12.0.0-canary.22d29cbb4.0", + "@material/tab-indicator": "12.0.0-canary.22d29cbb4.0", + "@material/tab-scroller": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-indicator": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/tab-indicator/-/tab-indicator-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-7MeJG5bN7WCyNsjT+7iGci2XuIkwUXA3QRz3La2zKPBxnPkRiz7GUwkpr1b5h6wPpYfCWKyCbixQD9Ufgq3kKA==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-scroller": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/tab-scroller/-/tab-scroller-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-IaFQiwJ/MKhbFvKcGmlAFNHCxXf5THyjefgzav/k0Fu49vzQFA1ZiSTvPU7/d0vV/G2amaba+l5w9TP9/n4KFw==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/tab": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/textfield": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-OJMgS0iniOvnRJa5DWyFqg1VIC77KEdoXern9OQiQphUE1LJ2Kbbwwj0GgyULuxhcUlUSnnisw+J5IfWK7kMUg==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/floating-label": "12.0.0-canary.22d29cbb4.0", + "@material/line-ripple": "12.0.0-canary.22d29cbb4.0", + "@material/notched-outline": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/theme": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/theme/-/theme-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-r4xYCgc+CrbvDxCINVqXwAFWQ1WgV3s2+bUse/2iw53YqyemhhtzFjfp+DXLdC4zJSOuObWC45eaDKeseLMGMw==", + "dependencies": { + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/top-app-bar": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/top-app-bar/-/top-app-bar-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-fTS0kOHyUAKBhtz8olDvsCtZ6VxJEJ5QNUAZdHbJsTjig87poLLUP2CKJ18t5DjzW/KFMFjNYMSbah6NOREvqg==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/touch-target": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-aPEMmR+xRI5ywD9JM+njTgU14CCsgRSS7CLZwd+wsfJkMYPCi8rBM3t23bu/jILa4IT6TIe32Ew1xIBVxJNpgQ==", + "dependencies": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/typography": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/typography/-/typography-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-lIzU4IFjaSfVRbhsabTiri8CD+fEe9/DaGpoDm89sHm7b8RbN1+m+7OrePICcWgWFo2swRndph8qhzh7gTYdew==", + "dependencies": { + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@mdn/browser-compat-data": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.1.0.tgz", + "integrity": "sha512-58eB5/ovJ5CfArzZwmZdenF/WlAGGS+1PG8RUb3oJ4st9exETBjClmFC0E1uVrZG1BwPaT205RKS8RhnUh5x3Q==", + "dev": true + }, + "node_modules/@microsoft/tsdoc": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.13.2.tgz", + "integrity": "sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg==", + "dev": true + }, + "node_modules/@microsoft/tsdoc-config": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.15.2.tgz", + "integrity": "sha512-mK19b2wJHSdNf8znXSMYVShAHktVr/ib0Ck2FA3lsVBSEhSI/TfXT7DJQkAYgcztTuwazGcg58ZjYdk0hTCVrA==", + "dev": true, + "dependencies": { + "@microsoft/tsdoc": "0.13.2", + "ajv": "~6.12.6", + "jju": "~1.4.0", + "resolve": "~1.19.0" + } + }, + "node_modules/@microsoft/tsdoc-config/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@microsoft/tsdoc-config/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@microsoft/tsdoc-config/node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/arborist": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-2.10.0.tgz", + "integrity": "sha512-CLnD+zXG9oijEEzViimz8fbOoFVb7hoypiaf7p6giJhvYtrxLAyY3cZAMPIFQvsG731+02eMDp3LqVBNo7BaZA==", + "dev": true, + "dependencies": { + "@isaacs/string-locale-compare": "^1.0.1", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^1.0.2", + "@npmcli/metavuln-calculator": "^1.1.0", + "@npmcli/move-file": "^1.1.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^1.0.1", + "@npmcli/package-json": "^1.0.1", + "@npmcli/run-script": "^1.8.2", + "bin-links": "^2.2.1", + "cacache": "^15.0.3", + "common-ancestor-path": "^1.0.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "npm-install-checks": "^4.0.0", + "npm-package-arg": "^8.1.5", + "npm-pick-manifest": "^6.1.0", + "npm-registry-fetch": "^11.0.0", + "pacote": "^11.3.5", + "parse-conflict-json": "^1.1.1", + "proc-log": "^1.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "ssri": "^8.0.1", + "treeverse": "^1.0.4", + "walk-up-path": "^1.0.0" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@npmcli/fs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz", + "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/git": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", + "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "dependencies": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@npmcli/map-workspaces": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-1.0.4.tgz", + "integrity": "sha512-wVR8QxhyXsFcD/cORtJwGQodeeaDf0OxcHie8ema4VgFeqwYkFsDPnSrIRSytX8xR6nKPAH89WnwTcaU608b/Q==", + "dev": true, + "dependencies": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^7.1.6", + "minimatch": "^3.0.4", + "read-package-json-fast": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/metavuln-calculator": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-1.1.1.tgz", + "integrity": "sha512-9xe+ZZ1iGVaUovBVFI9h3qW+UuECUzhvZPxK9RaEA2mjU26o5D0JloGYWwLYvQELJNmBdQB6rrpuN8jni6LwzQ==", + "dev": true, + "dependencies": { + "cacache": "^15.0.5", + "pacote": "^11.1.11", + "semver": "^7.3.2" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/name-from-folder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", + "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", + "dev": true + }, + "node_modules/@npmcli/node-gyp": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", + "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", + "dev": true + }, + "node_modules/@npmcli/package-json": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-1.0.1.tgz", + "integrity": "sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.1" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "dev": true, + "dependencies": { + "infer-owner": "^1.0.4" + } + }, + "node_modules/@npmcli/run-script": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.6.tgz", + "integrity": "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + } + }, + "node_modules/@open-wc/building-utils": { + "version": "2.18.4", + "resolved": "https://registry.npmjs.org/@open-wc/building-utils/-/building-utils-2.18.4.tgz", + "integrity": "sha512-wjNp9oE1SFsiBEqaI67ff60KHDpDbGMNF+82pvCHe412SFY4q8DNy8A+hesj1nZsuZHH1/olDfzBDbYKAnmgMg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@webcomponents/shadycss": "^1.10.2", + "@webcomponents/webcomponentsjs": "^2.5.0", + "arrify": "^2.0.1", + "browserslist": "^4.16.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3", + "clone": "^2.1.2", + "core-js-bundle": "^3.8.1", + "deepmerge": "^4.2.2", + "es-module-shims": "^0.4.7", + "html-minifier-terser": "^5.1.1", + "lru-cache": "^5.1.1", + "minimatch": "^3.0.4", + "parse5": "^5.1.1", + "path-is-inside": "^1.0.2", + "regenerator-runtime": "^0.13.7", + "resolve": "^1.19.0", + "rimraf": "^3.0.2", + "shady-css-scoped-element": "^0.0.2", + "systemjs": "^6.8.3", + "terser": "^4.6.7", + "valid-url": "^1.0.9", + "whatwg-fetch": "^3.5.0", + "whatwg-url": "^7.1.0" + } + }, + "node_modules/@open-wc/building-utils/node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@open-wc/building-utils/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@open-wc/building-utils/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "node_modules/@open-wc/building-utils/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/@open-wc/building-utils/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/@open-wc/building-utils/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/@open-wc/building-utils/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@open-wc/chai-dom-equals": { + "version": "0.12.36", + "resolved": "https://registry.npmjs.org/@open-wc/chai-dom-equals/-/chai-dom-equals-0.12.36.tgz", + "integrity": "sha512-Gt1fa37h4rtWPQGETSU4n1L678NmMi9KwHM1sH+JCGcz45rs8DBPx7MUVeGZ+HxRlbEI5t9LU2RGGv6xT2OlyA==", + "dev": true, + "dependencies": { + "@open-wc/semantic-dom-diff": "^0.13.16", + "@types/chai": "^4.1.7" + } + }, + "node_modules/@open-wc/chai-dom-equals/node_modules/@open-wc/semantic-dom-diff": { + "version": "0.13.21", + "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.13.21.tgz", + "integrity": "sha512-BONpjHcGX2zFa9mfnwBCLEmlDsOHzT+j6Qt1yfK3MzFXFtAykfzFjAgaxPetu0YbBlCfXuMlfxI4vlRGCGMvFg==", + "dev": true + }, + "node_modules/@open-wc/dedupe-mixin": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@open-wc/dedupe-mixin/-/dedupe-mixin-1.3.0.tgz", + "integrity": "sha512-UfdK1MPnR6T7f3svzzYBfu3qBkkZ/KsPhcpc3JYhsUY4hbpwNF9wEQtD4Z+/mRqMTJrKg++YSxIxE0FBhY3RIw==", + "dev": true + }, + "node_modules/@open-wc/eslint-config": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@open-wc/eslint-config/-/eslint-config-4.3.0.tgz", + "integrity": "sha512-kCxFWQ1AR4meTmWJGnK36LJYqDJeFGjlj6n4vLjAW3/c1VUyYQKL90vrNKy/OHS9kTjc9dcH5D64myAbNx6r1w==", + "dev": true, + "dependencies": { + "eslint": "^7.6.0", + "eslint-config-airbnb-base": "^14.0.0", + "eslint-plugin-html": "^6.0.0", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-lit": "^1.2.0", + "eslint-plugin-lit-a11y": "^1.0.1", + "eslint-plugin-no-only-tests": "^2.4.0", + "eslint-plugin-wc": "^1.2.0" + }, + "peerDependencies": { + "@babel/eslint-plugin": "^7.6.0", + "eslint-plugin-html": "^6.0.0", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-lit": "^1.3.0", + "eslint-plugin-lit-a11y": "^1.0.1", + "eslint-plugin-no-only-tests": "^2.4.0", + "eslint-plugin-wc": "^1.2.0" + } + }, + "node_modules/@open-wc/scoped-elements": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@open-wc/scoped-elements/-/scoped-elements-1.3.4.tgz", + "integrity": "sha512-WD+ObocdzcFCpBxnc8bQa7NoATeA+tJrK0/c/yV1Nx4leV+1PmJNNu+WCcuckBEGd0Op6FP8w1TidoqmVVba6g==", + "dev": true, + "dependencies": { + "@open-wc/dedupe-mixin": "^1.3.0", + "lit-html": "^1.0.0" + } + }, + "node_modules/@open-wc/semantic-dom-diff": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.19.5.tgz", + "integrity": "sha512-Wi0Fuj3dzqlWClU0y+J4k/nqTcH0uwgOWxZXPyeyG3DdvuyyjgiT4L4I/s6iVShWQvvEsyXnj7yVvixAo3CZvg==", + "dev": true, + "dependencies": { + "@types/chai": "^4.2.11", + "@web/test-runner-commands": "^0.5.7" + } + }, + "node_modules/@open-wc/testing": { + "version": "2.5.33", + "resolved": "https://registry.npmjs.org/@open-wc/testing/-/testing-2.5.33.tgz", + "integrity": "sha512-+EJNs0i+VV4nE+BrG70l2DNGXOZTSrluruaaU06HUSk57ZlKa+kIxWmkLxCOLlbgnQgrPrQWxbs3lgB1tIx/YA==", + "dev": true, + "dependencies": { + "@open-wc/chai-dom-equals": "^0.12.36", + "@open-wc/semantic-dom-diff": "^0.19.3", + "@open-wc/testing-helpers": "^1.8.12", + "@types/chai": "^4.2.11", + "@types/chai-dom": "^0.0.9", + "@types/mocha": "^5.2.7", + "@types/sinon-chai": "^3.2.3", + "chai": "^4.2.0", + "chai-a11y-axe": "^1.3.1", + "chai-dom": "^1.8.1", + "mocha": "^6.2.2", + "sinon-chai": "^3.5.0" + } + }, + "node_modules/@open-wc/testing-helpers": { + "version": "1.8.12", + "resolved": "https://registry.npmjs.org/@open-wc/testing-helpers/-/testing-helpers-1.8.12.tgz", + "integrity": "sha512-+4exEHYvnFqI1RGDDIKFHPZ7Ws5NK1epvEku3zLaOYN3zc+huX19SndNc5+X++v8A+quN/iXbHlh80ROyNaYDA==", + "dev": true, + "dependencies": { + "@open-wc/scoped-elements": "^1.2.4", + "lit-element": "^2.2.1", + "lit-html": "^1.0.0" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-16.0.0.tgz", + "integrity": "sha512-LuNyypCP3msCGVQJ7ki8PqYdpjfEkE/xtFa5DqlF+7IBD0JsfMZ87C58heSwIMint58sAUZbt3ITqOmdQv/dXw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^2.30.0" + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/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 + }, + "node_modules/@rollup/plugin-inject": { + "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, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "estree-walker": "^2.0.1", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/plugin-inject/node_modules/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 + }, + "node_modules/@rollup/plugin-json": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", + "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.0.8" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", + "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@sinonjs/samsam": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.0.2.tgz", + "integrity": "sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + } + }, + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "dev": true + }, + "node_modules/@snowpack/plugin-typescript": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@snowpack/plugin-typescript/-/plugin-typescript-1.2.1.tgz", + "integrity": "sha512-wU+JNaMVkqGsqTaUY7TnEMhGt/3URTgA9dpMCtZX6wn/ceA7Gwlmue/sOLynf0OTNLygHPvjiQECQYkEi3LTtg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "npm-run-path": "^4.0.1" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@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 + }, + "node_modules/@types/babel__core": { + "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, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/browserslist": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@types/browserslist/-/browserslist-4.15.0.tgz", + "integrity": "sha512-h9LyKErRGZqMsHh9bd+FE8yCIal4S0DxKTOeui56VgVXqa66TKiuaIUxCAI7c1O0LjaUzOTcsMyOpO9GetozRA==", + "deprecated": "This is a stub types definition. browserslist provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "browserslist": "*" + } + }, + "node_modules/@types/browserslist-useragent": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/browserslist-useragent/-/browserslist-useragent-3.0.4.tgz", + "integrity": "sha512-S/AhrluMHi8EcuxxCtTDBGr8u+XvwUfLvZdARuIS2LFZ/lHoeaeJJYCozD68GKH6wm52FbIHq4WWPF/Ec6a9qA==", + "dev": true + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, + "node_modules/@types/caniuse-api": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/caniuse-api/-/caniuse-api-3.0.2.tgz", + "integrity": "sha512-YfCDMn7R59n7GFFfwjPAM0zLJQy4UvveC32rOJBmTqJJY8uSRqM4Dc7IJj8V9unA48Qy4nj5Bj3jD6Q8VZ1Seg==", + "dev": true + }, + "node_modules/@types/chai": { + "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 + }, + "node_modules/@types/chai-dom": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@types/chai-dom/-/chai-dom-0.0.9.tgz", + "integrity": "sha512-jj4F2NJog2/GBYsyJ8+NvhnWUBbPY4MUAKLdPJE6+568rw12GGXvj0ycUuP5nndVrnJgozmJAoMTvxvjJATXWw==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@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, + "dependencies": { + "@types/node": "*", + "@types/qs": "*" + } + }, + "node_modules/@types/command-line-args": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", + "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", + "dev": true + }, + "node_modules/@types/command-line-usage": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.2.tgz", + "integrity": "sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg==", + "dev": true + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==", + "dev": true + }, + "node_modules/@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 + }, + "node_modules/@types/cookies": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.7.tgz", + "integrity": "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/express": "*", + "@types/keygrip": "*", + "@types/node": "*" + } + }, + "node_modules/@types/debounce": { + "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 + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@types/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@types/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-bsKkeSqN7HYyYntFRAmzcwx/dKW4Wa+KVMTInANlI72PWLQmOpZu96j0OqHZGArW4VQwCmJPteQlXaUDeOB0WQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.26", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.26.tgz", + "integrity": "sha512-zeu3tpouA043RHxW0gzRxwCHchMgftE8GArRsvYT0ByDMbn19olQHx5jLue0LxWY6iYtXb7rXmuVtSkhy9YZvQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/http-assert": { + "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 + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, + "node_modules/@types/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-e+2rjEwK6KDaNOm5Aa9wNGgyS9oSZU/4pfSMMPYNOfjvFI0WVXm29+ITRFr6aKDvvKo7uU1jV68MW4ScsfDi7Q==", + "dev": true + }, + "node_modules/@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 + }, + "node_modules/@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, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@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, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@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 + }, + "node_modules/@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 + }, + "node_modules/@types/keygrip": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", + "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==", + "dev": true + }, + "node_modules/@types/keyv": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", + "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/koa": { + "version": "2.13.4", + "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.4.tgz", + "integrity": "sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw==", + "dev": true, + "dependencies": { + "@types/accepts": "*", + "@types/content-disposition": "*", + "@types/cookies": "*", + "@types/http-assert": "*", + "@types/http-errors": "*", + "@types/keygrip": "*", + "@types/koa-compose": "*", + "@types/node": "*" + } + }, + "node_modules/@types/koa__cors": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/koa__cors/-/koa__cors-3.0.3.tgz", + "integrity": "sha512-74Xb4hJOPGKlrQ4PRBk1A/p0gfLpgbnpT0o67OMVbwyeMXvlBN+ZCRztAAmkKZs+8hKbgMutUlZVbA52Hr/0IA==", + "dev": true, + "dependencies": { + "@types/koa": "*" + } + }, + "node_modules/@types/koa-compose": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", + "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==", + "dev": true, + "dependencies": { + "@types/koa": "*" + } + }, + "node_modules/@types/koa-compress": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@types/koa-compress/-/koa-compress-2.0.9.tgz", + "integrity": "sha512-1Sa9OsbHd2N2N7gLpdIRHe8W99EZbfIR31D7Iisx16XgwZCnWUtGXzXQejhu74Y1pE/wILqBP6VL49ch/MVpZw==", + "dev": true, + "dependencies": { + "@types/koa": "*", + "@types/node": "*" + } + }, + "node_modules/@types/koa-etag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/koa-etag/-/koa-etag-3.0.0.tgz", + "integrity": "sha512-gXQUtKGEnCy0sZLG+uE3wL4mvY1CBPcb6ECjpAoD8RGYy/8ACY1B084k8LTFPIdVcmy7GD6Y4n3up3jnupofcQ==", + "dev": true, + "dependencies": { + "@types/etag": "*", + "@types/koa": "*" + } + }, + "node_modules/@types/koa-send": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@types/koa-send/-/koa-send-4.1.3.tgz", + "integrity": "sha512-daaTqPZlgjIJycSTNjKpHYuKhXYP30atFc1pBcy6HHqB9+vcymDgYTguPdx9tO4HMOqNyz6bz/zqpxt5eLR+VA==", + "dev": true, + "dependencies": { + "@types/koa": "*" + } + }, + "node_modules/@types/koa-static": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/koa-static/-/koa-static-4.0.2.tgz", + "integrity": "sha512-ns/zHg+K6XVPMuohjpOlpkR1WLa4VJ9czgUP9bxkCDn0JZBtUWbD/wKDZzPGDclkQK1bpAEScufCHOy8cbfL0w==", + "dev": true, + "dependencies": { + "@types/koa": "*", + "@types/koa-send": "*" + } + }, + "node_modules/@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true + }, + "node_modules/@types/marked": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-2.0.5.tgz", + "integrity": "sha512-shRZ7XnYFD/8n8zSjKvFdto1QNSf4tONZIlNEZGrJe8GsOE8DL/hG1Hbl8gZlfLnjS7+f5tZGIaTgfpyW38h4w==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "node_modules/@types/mime-types": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.1.tgz", + "integrity": "sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.11.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.11.tgz", + "integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/parse5": { + "version": "2.2.34", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz", + "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/path-is-inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/path-is-inside/-/path-is-inside-1.0.0.tgz", + "integrity": "sha512-hfnXRGugz+McgX2jxyy5qz9sB21LRzlGn24zlwN2KEgoPtEvjzNRrLtUkOOebPDPZl3Rq7ywKxYvylVcEZDnEw==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/sinon": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.6.tgz", + "integrity": "sha512-6EF+wzMWvBNeGrfP3Nx60hhx+FfwSg1JJBLAAP/IdIUq0EYkqCYf70VT3PhuhPX9eLD+Dp+lNdpb/ZeHG8Yezg==", + "dev": true, + "dependencies": { + "@sinonjs/fake-timers": "^7.1.0" + } + }, + "node_modules/@types/sinon-chai": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.6.tgz", + "integrity": "sha512-Z57LprQ+yOQNu9d6mWdHNvnmncPXzDWGSeLj+8L075/QahToapC4Q13zAFRVKV4clyBmdJ5gz4xBfVkOso5lXw==", + "dev": true, + "dependencies": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", + "dev": true + }, + "node_modules/@types/whatwg-url": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-6.4.0.tgz", + "integrity": "sha512-tonhlcbQ2eho09am6RHnHOgvtDfDYINd5rgxD+2YSkKENooVCFsWizJz139MQW/PV8FfClyKrNe9ZbdHrSCxGg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "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, + "dependencies": { + "@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" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "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, + "dependencies": { + "@types/json-schema": "^7.0.7", + "@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" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/@typescript-eslint/parser": { + "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, + "dependencies": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "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, + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "dev": true, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "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, + "dependencies": { + "@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", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "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, + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@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, + "dependencies": { + "errorstacks": "^2.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/config-loader": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.1.3.tgz", + "integrity": "sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==", + "dev": true, + "dependencies": { + "semver": "^7.3.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/dev-server": { + "version": "0.1.28", + "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.28.tgz", + "integrity": "sha512-964NqgatvFWX7LM8QGlB1XpcJoUQRXZPiEn3XKgDIUSNS6JNCjGfQQ+TfxBlT5KBHYJakDYbTk+sdEeRi2gaLw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.11", + "@types/command-line-args": "^5.0.0", + "@web/config-loader": "^0.1.3", + "@web/dev-server-core": "^0.3.17", + "@web/dev-server-rollup": "^0.3.13", + "camelcase": "^6.2.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.1", + "debounce": "^1.2.0", + "deepmerge": "^4.2.2", + "ip": "^1.1.5", + "nanocolors": "^0.2.1", + "open": "^8.0.2", + "portfinder": "^1.0.28" + }, + "bin": { + "wds": "dist/bin.js", + "web-dev-server": "dist/bin.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/dev-server-core": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.3.17.tgz", + "integrity": "sha512-vN1dwQ8yDHGiAvCeUo9xFfjo+pFl8TW+pON7k9kfhbegrrB8CKhJDUxmHbZsyQUmjf/iX57/LhuWj1xGhRL8AA==", + "dev": true, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/dev-server-esbuild": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/@web/dev-server-esbuild/-/dev-server-esbuild-0.2.16.tgz", + "integrity": "sha512-a82uKy9vQ4HvfWtjd7hJ3GtaqkL2ofxpEu3a1wIZyXB2dFWPvhRSmLNe/4IPPHe4vj6PVdRpLSFPEA3lXUW5Pw==", + "dev": true, + "dependencies": { + "@mdn/browser-compat-data": "^4.0.0", + "@web/dev-server-core": "^0.3.17", + "esbuild": "^0.12.21", + "parse5": "^6.0.1", + "ua-parser-js": "^1.0.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/dev-server-esbuild/node_modules/esbuild": { + "version": "0.12.29", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.29.tgz", + "integrity": "sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + } + }, + "node_modules/@web/dev-server-rollup": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.13.tgz", + "integrity": "sha512-QaxEtsdL6+fktIa1ZL8VEtq4U7WB7ikKEnxkbhUpFknB+WSvwx6DUrvyBDuPckunpczCnljXBFPugu+2W6N8Fg==", + "dev": true, + "dependencies": { + "@rollup/plugin-node-resolve": "^11.0.1", + "@web/dev-server-core": "^0.3.16", + "nanocolors": "^0.2.1", + "parse5": "^6.0.1", + "rollup": "^2.58.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/dev-server/node_modules/camelcase": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@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, + "dependencies": { + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/parse5-utils/node_modules/@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true + }, + "node_modules/@web/test-runner": { + "version": "0.13.22", + "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.13.22.tgz", + "integrity": "sha512-s4P3X4z8RlxqbQgO4K7aPVZTlum9juuQ9ZIxvZlua+KMTG5J5Utr7Drey/tGcx+BwVFUAtQLr20IEWA+38d+fA==", + "dev": true, + "dependencies": { + "@web/browser-logs": "^0.2.2", + "@web/config-loader": "^0.1.3", + "@web/dev-server": "^0.1.24", + "@web/test-runner-chrome": "^0.10.5", + "@web/test-runner-commands": "^0.5.10", + "@web/test-runner-core": "^0.10.22", + "@web/test-runner-mocha": "^0.7.5", + "camelcase": "^6.2.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.1", + "convert-source-map": "^1.7.0", + "diff": "^5.0.0", + "globby": "^11.0.1", + "nanocolors": "^0.2.1", + "portfinder": "^1.0.28", + "source-map": "^0.7.3" + }, + "bin": { + "web-test-runner": "dist/bin.js", + "wtr": "dist/bin.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@web/test-runner-chrome": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.10.7.tgz", + "integrity": "sha512-DKJVHhHh3e/b6/erfKOy0a4kGfZ47qMoQRgROxi9T4F9lavEY3E5/MQ7hapHFM2lBF4vDrm+EWjtBdOL8o42tw==", + "dev": true, + "dependencies": { + "@web/test-runner-core": "^0.10.20", + "@web/test-runner-coverage-v8": "^0.4.8", + "chrome-launcher": "^0.15.0", + "puppeteer-core": "^13.1.3" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@web/test-runner-commands": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.5.13.tgz", + "integrity": "sha512-FXnpUU89ALbRlh9mgBd7CbSn5uzNtr8gvnQZPOvGLDAJ7twGvZdUJEAisPygYx2BLPSFl3/Mre8pH8zshJb8UQ==", + "dev": true, + "dependencies": { + "@web/test-runner-core": "^0.10.20", + "mkdirp": "^1.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@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, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@web/test-runner-coverage-v8": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.4.8.tgz", + "integrity": "sha512-Ib0AscR8Xf9E/V7rf3XOVQTe4vKIbwSTupxV1xGgzj3x4RKUuMUg9FLz9EigZ5iN0mOzZKDllyRS523hbdhDtA==", + "dev": true, + "dependencies": { + "@web/test-runner-core": "^0.10.20", + "istanbul-lib-coverage": "^3.0.0", + "picomatch": "^2.2.2", + "v8-to-istanbul": "^8.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@web/test-runner-mocha": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.7.5.tgz", + "integrity": "sha512-12/OBq6efPCAvJpcz3XJs2OO5nHe7GtBibZ8Il1a0QtsGpRmuJ4/m1EF0Fj9f6KHg7JdpGo18A37oE+5hXjHwg==", + "dev": true, + "dependencies": { + "@types/mocha": "^8.2.0", + "@web/test-runner-core": "^0.10.20" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@web/test-runner-mocha/node_modules/@types/mocha": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", + "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", + "dev": true + }, + "node_modules/@web/test-runner/node_modules/camelcase": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@web/test-runner/node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/@webcomponents/shadycss": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.11.0.tgz", + "integrity": "sha512-L5O/+UPum8erOleNjKq6k58GVl3fNsEQdSOyh0EUhNmi7tHUyRuCJy1uqJiWydWcLARE5IPsMoPYMZmUGrz1JA==", + "dev": true + }, + "node_modules/@webcomponents/webcomponentsjs": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.6.0.tgz", + "integrity": "sha512-Moog+Smx3ORTbWwuPqoclr+uvfLnciVd6wdCaVscHPrxbmQ/IJKm3wbB7hpzJtXWjAq2l/6QMlO85aZiOdtv5Q==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/abortcontroller-polyfill": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", + "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ace-custom-element": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/ace-custom-element/-/ace-custom-element-1.6.5.tgz", + "integrity": "sha512-xU/9r94WKwjwEOjdfs6oVk2Dqc6X63eF2ECvKIMm/JCK1PDbXXdBYi5sQx110tR2sY4f96iXxyvscfT9qeI1RQ==" + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", + "dev": true + }, + "node_modules/address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", + "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/agentkeepalive/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/amator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/amator/-/amator-1.1.0.tgz", + "integrity": "sha1-CMa2C8k67Cthu/wMTWd9MDI8wPE=", + "dependencies": { + "bezier-easing": "^2.0.3" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/are-we-there-yet/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/are-we-there-yet/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/are-we-there-yet/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "node_modules/axe-core": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", + "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz", + "integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.0", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", + "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.0", + "core-js-compat": "^3.18.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz", + "integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bezier-easing": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bezier-easing/-/bezier-easing-2.1.0.tgz", + "integrity": "sha1-wE3+i5JtbsrKGBPWn/F5t8ICXYY=" + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/bin-links": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-2.3.0.tgz", + "integrity": "sha512-JzrOLHLwX2zMqKdyYZjkDgQGT+kHDkIhv2/IK2lJ00qLxV4TmFoHi8drDBb6H5Zrz1YfgHkai4e2MGPqnoUhqA==", + "dev": true, + "dependencies": { + "cmd-shim": "^4.0.1", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0", + "read-cmd-shim": "^2.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^3.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/blocking-elements": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/blocking-elements/-/blocking-elements-0.1.1.tgz", + "integrity": "sha512-/SLWbEzMoVIMZACCyhD/4Ya2M1PWP1qMKuiymowPcI+PdWDARqeARBjhj73kbUBCxEmTZCUu5TAqxtwUO9C1Ig==" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "node_modules/boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bplist-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", + "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=", + "dev": true, + "dependencies": { + "big-integer": "^1.6.7" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", + "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001280", + "electron-to-chromium": "^1.3.896", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/browserslist-useragent": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/browserslist-useragent/-/browserslist-useragent-3.0.3.tgz", + "integrity": "sha512-8KKO6kOXu/93IkMi8zVqzU72BgpoxcITIHtkM1qmlnxJtIMF9Y+2uWL9JS2uUbzj/PaS3kaA6LcICBThMojGjA==", + "dev": true, + "dependencies": { + "browserslist": "^4.12.0", + "semver": "^7.3.2", + "useragent": "^2.3.0" + }, + "engines": { + "node": ">= 6.x.x" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bufferutil": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", + "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "node_modules/bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cacache/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/cache-content-type": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", + "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", + "dev": true, + "dependencies": { + "mime-types": "^2.1.18", + "ylru": "^1.2.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001284", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001284.tgz", + "integrity": "sha512-t28SKa7g6kiIQi6NHeOcKrOrGMzCRrXvlasPwWC26TH2QNdglgzQIRUuJ0cR3NeQPH+5jpuveeeSFDLm2zbkEw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "node_modules/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-a11y-axe": { + "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, + "dependencies": { + "axe-core": "^4.3.3" + } + }, + "node_modules/chai-dom": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/chai-dom/-/chai-dom-1.11.0.tgz", + "integrity": "sha512-ZzGlEfk1UhHH5+N0t9bDqstOxPEXmn3EyXvtsok5rfXVDOFDJbHVy12rED6ZwkJAUDs2w7/Da4Hlq2LB63kltg==", + "dev": true, + "engines": { + "node": ">= 0.12.0" + }, + "peerDependencies": { + "chai": ">= 3", + "mocha": ">= 2" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "dev": true, + "dependencies": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/chrome-launcher": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.0.tgz", + "integrity": "sha512-ZQqX5kb9H0+jy1OqLnWampfocrtSZaGl7Ny3F9GRha85o4odbL8x55paUzh51UC7cEmZ5obp3H2Mm70uC2PpRA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/chrome-launcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "node_modules/clean-css": { + "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, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/clean-css/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "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, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/cmd-shim": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", + "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", + "dev": true, + "dependencies": { + "mkdirp-infer-owner": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/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, + "dependencies": { + "inflation": "^2.0.0", + "qs": "^6.5.2", + "raw-body": "^2.3.3", + "type-is": "^1.6.16" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-line-args": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.0.tgz", + "integrity": "sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A==", + "dev": true, + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", + "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", + "dev": true, + "dependencies": { + "array-back": "^4.0.1", + "chalk": "^2.4.2", + "table-layout": "^1.0.1", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/command-line-usage/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concurrently": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.4.0.tgz", + "integrity": "sha512-HZ3D0RTQMH3oS4gvtYj1P+NBc6PzE2McEra6yEFcQKrUQ9HvtTGU4Dbne083F034p+LRb7kWU0tPRNvSGs1UCQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" + }, + "bin": { + "concurrently": "bin/concurrently.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", + "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", + "dev": true + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/conventional-changelog": { + "version": "3.1.24", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.24.tgz", + "integrity": "sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg==", + "dev": true, + "dependencies": { + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-atom": "^2.0.8", + "conventional-changelog-codemirror": "^2.0.8", + "conventional-changelog-conventionalcommits": "^4.5.0", + "conventional-changelog-core": "^4.2.1", + "conventional-changelog-ember": "^2.0.9", + "conventional-changelog-eslint": "^3.0.9", + "conventional-changelog-express": "^2.0.6", + "conventional-changelog-jquery": "^3.0.11", + "conventional-changelog-jshint": "^2.0.9", + "conventional-changelog-preset-loader": "^2.3.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-angular": { + "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, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-atom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", + "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", + "dev": true, + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-codemirror": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", + "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", + "dev": true, + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-config-spec": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz", + "integrity": "sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==", + "dev": true + }, + "node_modules/conventional-changelog-conventionalcommits": { + "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, + "dependencies": { + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core": { + "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, + "dependencies": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/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 + }, + "node_modules/conventional-changelog-core/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/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, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/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, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/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=", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/read-pkg/node_modules/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, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/conventional-changelog-core/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/conventional-changelog-ember": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", + "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", + "dev": true, + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-eslint": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", + "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", + "dev": true, + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-express": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", + "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", + "dev": true, + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-jquery": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", + "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", + "dev": true, + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-jshint": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", + "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz", + "integrity": "sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g==", + "dev": true, + "dependencies": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.6", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commits-parser": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz", + "integrity": "sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw==", + "dev": true, + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-recommended-bump": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", + "dev": true, + "dependencies": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" + }, + "bin": { + "conventional-recommended-bump": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/cookies": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", + "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", + "dev": true, + "dependencies": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/core-js-bundle": { + "version": "3.19.2", + "resolved": "https://registry.npmjs.org/core-js-bundle/-/core-js-bundle-3.19.2.tgz", + "integrity": "sha512-LoFua00O2j1ffgGDViAUQMKuwDXBB/XFOmEGY/9QcyQfIrjlom8XZzj0YymB2aUmPZtHmk1fAjPrz9OEXifW4g==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.19.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.2.tgz", + "integrity": "sha512-ObBY1W5vx/LFFMaL1P5Udo4Npib6fu+cMokeziWkA8Tns4FcDemKF5j9JvaI5JhdkW8EQJQGJN1EcrzmEwuAqQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.18.1", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-js-pure": { + "version": "3.19.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.2.tgz", + "integrity": "sha512-5LkcgQEy8pFeVnd/zomkUBSwnmIxuF1C8E9KrMAbOc8f34IBT9RGvTYeNDdp1PnvMJrrVhvk1hg/yVV5h/znlg==", + "deprecated": "core-js-pure@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/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 + }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dev": true, + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/date-fns": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.27.0.tgz", + "integrity": "sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q==", + "dev": true, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser-id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-2.0.0.tgz", + "integrity": "sha1-AezONxpx6F8VoXF354YwR+c9vn0=", + "dev": true, + "dependencies": { + "bplist-parser": "^0.1.0", + "pify": "^2.3.0", + "untildify": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "dev": true, + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/devtools-protocol": { + "version": "0.0.981744", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", + "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==", + "dev": true + }, + "node_modules/dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/dom5": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.1.tgz", + "integrity": "sha512-JPFiouQIr16VQ4dX6i0+Hpbg3H2bMKPmZ+WZgBOSSvOPx9QHwwY8sPzeM2baUtViESYto6wC2nuZOMC/6gulcA==", + "dev": true, + "dependencies": { + "@types/parse5": "^2.2.34", + "clone": "^2.1.0", + "parse5": "^4.0.0" + } + }, + "node_modules/dom5/node_modules/parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotgitignore": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz", + "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotgitignore/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotgitignore/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotgitignore/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotgitignore/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "node_modules/dynamic-import-polyfill": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dynamic-import-polyfill/-/dynamic-import-polyfill-0.1.1.tgz", + "integrity": "sha512-m953zv0w5oDagTItWm6Auhmk/pY7EiejaqiVbnzSS3HIjh1FCUeK7WzuaVtWPNs58A+/xpIE+/dVk6pKsrua8g==", + "dev": true + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.11.tgz", + "integrity": "sha512-2OhsaYgsWGhWjx2et8kaUcdktPbBGjKM2X0BReUCKcSCPttEY+hz2zie820JLbttU8jwL92+JJysWwkut3wZgA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/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 + }, + "node_modules/es-abstract": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-dev-server": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-dev-server/-/es-dev-server-2.1.0.tgz", + "integrity": "sha512-Vrq/4PyMzWz33QmOdSncvoWLTJVcv2e96z8FLHQwP9zK7DyLeDZCckII8VTW+btUGtM7aErvLH/d/R2pjjjs8w==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.1", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.11.0", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-transform-template-literals": "^7.8.3", + "@babel/preset-env": "^7.9.0", + "@koa/cors": "^3.1.0", + "@open-wc/building-utils": "^2.18.3", + "@rollup/plugin-node-resolve": "^11.0.0", + "@rollup/pluginutils": "^3.0.0", + "@types/babel__core": "^7.1.3", + "@types/browserslist": "^4.8.0", + "@types/browserslist-useragent": "^3.0.0", + "@types/caniuse-api": "^3.0.0", + "@types/command-line-args": "^5.0.0", + "@types/command-line-usage": "^5.0.1", + "@types/debounce": "^1.2.0", + "@types/koa": "^2.0.48", + "@types/koa__cors": "^3.0.1", + "@types/koa-compress": "^2.0.9", + "@types/koa-etag": "^3.0.0", + "@types/koa-static": "^4.0.1", + "@types/lru-cache": "^5.1.0", + "@types/mime-types": "^2.1.0", + "@types/minimatch": "^3.0.3", + "@types/path-is-inside": "^1.0.0", + "@types/whatwg-url": "^6.4.0", + "browserslist": "^4.9.1", + "browserslist-useragent": "^3.0.2", + "builtin-modules": "^3.1.0", + "camelcase": "^5.3.1", + "caniuse-api": "^3.0.0", + "caniuse-lite": "^1.0.30001033", + "chokidar": "^3.0.0", + "command-line-args": "^5.0.2", + "command-line-usage": "^6.1.0", + "debounce": "^1.2.0", + "deepmerge": "^4.2.2", + "es-module-lexer": "^0.3.13", + "get-stream": "^5.1.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^4.0.2", + "koa": "^2.7.0", + "koa-compress": "^3.0.0", + "koa-etag": "^3.0.0", + "koa-static": "^5.0.0", + "lru-cache": "^5.1.1", + "mime-types": "^2.1.27", + "minimatch": "^3.0.4", + "open": "^7.0.3", + "parse5": "^5.1.1", + "path-is-inside": "^1.0.2", + "polyfills-loader": "^1.7.4", + "portfinder": "^1.0.21", + "rollup": "^2.7.2", + "strip-ansi": "^5.2.0", + "systemjs": "^6.3.1", + "tslib": "^1.11.1", + "useragent": "^2.3.0", + "whatwg-url": "^7.0.0" + }, + "bin": { + "es-dev-server": "dist/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/es-dev-server/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/es-dev-server/node_modules/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 + }, + "node_modules/es-dev-server/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/es-dev-server/node_modules/koa-etag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-3.0.0.tgz", + "integrity": "sha1-nvc4Ld1agqsN6xU0FckVg293HT8=", + "dev": true, + "dependencies": { + "etag": "^1.3.0", + "mz": "^2.1.0" + } + }, + "node_modules/es-dev-server/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/es-dev-server/node_modules/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, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/es-dev-server/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "node_modules/es-dev-server/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/es-dev-server/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/es-dev-server/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/es-dev-server/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/es-dev-server/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/es-dev-server/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/es-module-lexer": { + "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 + }, + "node_modules/es-module-shims": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/es-module-shims/-/es-module-shims-0.4.7.tgz", + "integrity": "sha512-0LTiSQoPWwdcaTVIQXhGlaDwTneD0g9/tnH1PNs3zHFFH+xoCeJclDM3rQeqF9nurXPfMKm3l9+kfPRa5VpbKg==", + "dev": true + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.9.7.tgz", + "integrity": "sha512-VtUf6aQ89VTmMLKrWHYG50uByMF4JQlVysb8dmg6cOgW8JnFCipmz7p+HNBl+RR3LLCuBxFGVauAe2wfnF9bLg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esinstall": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/esinstall/-/esinstall-1.1.7.tgz", + "integrity": "sha512-irDsrIF7fZ5BCQEAV5gmH+4nsK6JhnkI9C9VloXdmzJLbM1EcshPw8Ap95UUGc4ZJdzGeOrjV+jgKjQ/Z7Q3pg==", + "dev": true, + "dependencies": { + "@rollup/plugin-commonjs": "^16.0.0", + "@rollup/plugin-inject": "^4.0.2", + "@rollup/plugin-json": "^4.0.0", + "@rollup/plugin-node-resolve": "^10.0.0", + "@rollup/plugin-replace": "^2.4.2", + "builtin-modules": "^3.2.0", + "cjs-module-lexer": "^1.2.1", + "es-module-lexer": "^0.6.0", + "execa": "^5.1.1", + "is-valid-identifier": "^2.0.2", + "kleur": "^4.1.1", + "mkdirp": "^1.0.3", + "picomatch": "^2.3.0", + "resolve": "^1.20.0", + "rimraf": "^3.0.0", + "rollup": "~2.37.1", + "rollup-plugin-polyfill-node": "^0.6.2", + "slash": "~3.0.0", + "validate-npm-package-name": "^3.0.0", + "vm2": "^3.9.2" + } + }, + "node_modules/esinstall/node_modules/@rollup/plugin-node-resolve": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-10.0.0.tgz", + "integrity": "sha512-sNijGta8fqzwA1VwUEtTvWCx2E7qC70NMsDh4ZG13byAXYigBNZMxALhKUSycBks5gupJdq0lFrKumFrRZ8H3A==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/esinstall/node_modules/es-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.6.0.tgz", + "integrity": "sha512-f8kcHX1ArhllUtb/wVSyvygoKCznIjnxhLxy7TCvIiMdT7fL4ZDTIKaadMe6eLvOXg6Wk02UeoFgUoZ2EKZZUA==", + "dev": true + }, + "node_modules/esinstall/node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/esinstall/node_modules/rollup": { + "version": "2.37.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.37.1.tgz", + "integrity": "sha512-V3ojEeyGeSdrMSuhP3diBb06P+qV4gKQeanbDv+Qh/BZbhdZ7kHV0xAt8Yjk4GFshq/WjO7R4c7DFM20AwTFVQ==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-airbnb-base": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", + "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "dev": true, + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.2" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", + "eslint-plugin-import": "^2.22.1" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "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, + "dependencies": { + "debug": "^3.2.7", + "find-up": "^2.1.0", + "pkg-dir": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/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, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "dependencies": { + "eslint-rule-composer": "^0.3.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": ">=4.0.0" + } + }, + "node_modules/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, + "dependencies": { + "htmlparser2": "^7.1.2" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.25.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz", + "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", + "dev": true, + "dependencies": { + "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.1", + "has": "^1.0.3", + "is-core-module": "^2.8.0", + "is-glob": "^4.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.5", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.11.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/eslint-plugin-lit": { + "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, + "dependencies": { + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "requireindex": "^1.2.0" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "eslint": ">= 5" + } + }, + "node_modules/eslint-plugin-lit-a11y": { + "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, + "dependencies": { + "aria-query": "^4.2.2", + "axe-core": "^4.3.3", + "axobject-query": "^2.2.0", + "dom5": "^3.0.1", + "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.1", + "requireindex": "~1.2.0" + }, + "peerDependencies": { + "eslint": ">= 5" + } + }, + "node_modules/eslint-plugin-lit-a11y/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/eslint-plugin-lit-a11y/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "node_modules/eslint-plugin-no-only-tests": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-2.6.0.tgz", + "integrity": "sha512-T9SmE/g6UV1uZo1oHAqOvL86XWl7Pl2EpRpnLI8g/bkJu+h7XBCB+1LnubRZ2CUQXj805vh4/CYZdnqtVaEo2Q==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint-plugin-tsdoc": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.14.tgz", + "integrity": "sha512-fJ3fnZRsdIoBZgzkQjv8vAj6NeeOoFkTfgosj6mKsFjX70QV256sA/wq+y/R2+OL4L8E79VVaVWrPeZnKNe8Ng==", + "dev": true, + "dependencies": { + "@microsoft/tsdoc": "0.13.2", + "@microsoft/tsdoc-config": "0.15.2" + } + }, + "node_modules/eslint-plugin-wc": { + "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, + "dependencies": { + "is-valid-element-name": "^1.0.0", + "js-levenshtein-esm": "^1.2.0" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint-rule-extender": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/eslint-rule-extender/-/eslint-rule-extender-0.0.1.tgz", + "integrity": "sha512-F0j1Twve3lamL3J0rRSVAynlp58sDPG39JFcQrM+u9Na7PmCgiPHNODh6YE9mduaGcsn3NBqbf6LZRj0cLr8Ng==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kaicataldo" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-check": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.20.0.tgz", + "integrity": "sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog==", + "dev": true, + "dependencies": { + "pure-rand": "^5.0.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fdir": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-5.1.0.tgz", + "integrity": "sha512-IgTtZwL52tx2wqWeuGDzXYTnNsEjNLahZpJw30hCQDyVnoHXwY5acNDnjGImTTL1R0z1PCyLw20VAbE5qLic3Q==", + "dev": true + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-cache-dir/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "dependencies": { + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "dependencies": { + "null-check": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/gauge/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/generic-names": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz", + "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==", + "dev": true, + "dependencies": { + "loader-utils": "^1.1.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "node_modules/get-pkg-repo": { + "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, + "dependencies": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "get-pkg-repo": "src/cli.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-pkg-repo/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/get-pkg-repo/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/get-pkg-repo/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/get-pkg-repo/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/get-pkg-repo/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/get-pkg-repo/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/git-raw-commits": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", + "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", + "dev": true, + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", + "dev": true, + "dependencies": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/git-semver-tags": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", + "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", + "dev": true, + "dependencies": { + "meow": "^8.0.0", + "semver": "^6.0.0" + }, + "bin": { + "git-semver-tags": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/git-semver-tags/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", + "dev": true, + "dependencies": { + "ini": "^1.3.2" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "dependencies": { + "ini": "^1.3.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/har-validator/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/har-validator/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/http-assert": { + "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, + "dependencies": { + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/http2-wrapper/node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/httpie": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/httpie/-/httpie-1.1.2.tgz", + "integrity": "sha512-VQ82oXG95oY1fQw/XecHuvcFBA+lZQ9Vwj1RfLcO8a7HpDd4cc2ukwpJt+TUlFaLUAzZErylxWu6wclJ1rUhUQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/husky": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflation": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", + "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/intersection-observer": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/intersection-observer/-/intersection-observer-0.7.0.tgz", + "integrity": "sha512-Id0Fij0HsB/vKWGeBe9PxeY45ttRiBmhFyyt/geBdDHBYNctMRTE3dC1U3ujzz3lap+hVXlEcVaB56kZP/eEUg==", + "dev": true + }, + "node_modules/intl-list-format": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/intl-list-format/-/intl-list-format-1.0.3.tgz", + "integrity": "sha512-VNF1Mh0K1xALXkz/5QsK1gfKRvEQO/jWaniTGAzQvbzGr5uyGDskQrRjnf6Qnbc9/JRbNE8BQtTg6iWuFrZorw==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "dependencies": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-installed-globally/node_modules/global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "dev": true, + "dependencies": { + "ini": "1.3.7" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-installed-globally/node_modules/ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-valid-element-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-element-name/-/is-valid-element-name-1.0.0.tgz", + "integrity": "sha1-Ju8/12zfHxItEFQG4y01sN4AWYE=", + "dev": true, + "dependencies": { + "is-potential-custom-element-name": "^1.0.0" + } + }, + "node_modules/is-valid-identifier": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-valid-identifier/-/is-valid-identifier-2.0.2.tgz", + "integrity": "sha512-mpS5EGqXOwzXtKAg6I44jIAqeBfntFLxpAth1rrKbxtKyI6LPktyDYpHBI+tHlduhhX/SF26mFXmxQu995QVqg==", + "dev": true, + "dependencies": { + "assert": "^1.4.1" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", + "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.1.tgz", + "integrity": "sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", + "dev": true + }, + "node_modules/js-levenshtein-esm": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/js-levenshtein-esm/-/js-levenshtein-esm-1.2.0.tgz", + "integrity": "sha512-fzreKVq1eD7eGcQr7MtRpQH94f8gIfhdrc7yeih38xh684TNMK9v5aAu2wxfIRMk/GpAJRrzcirMAPIaSDaByQ==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json-stringify-nice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsonschema": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.11.tgz", + "integrity": "sha512-XNZHs3N1IOa3lPKm//npxMhOdaoPw+MvEV0NIgxcER83GTJcG13rehtWmpBCfEt8DrtYwIkMTs8bdXoYs4fvnQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/just-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-3.1.1.tgz", + "integrity": "sha512-sdMWKjRq8qWZEjDcVA6llnUT8RDEBIfOiGpYFPYa9u+2c39JCsejktSP7mj5eRid5EIvTzIpQ2kDOCw1Nq9BjQ==", + "dev": true + }, + "node_modules/just-diff-apply": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-3.1.2.tgz", + "integrity": "sha512-TCa7ZdxCeq6q3Rgms2JCRHTCfWAETPZ8SzYUbkYF6KR3I03sN29DaOIC+xyWboIcMvjAsD5iG2u/RWzHD8XpgQ==", + "dev": true + }, + "node_modules/just-extend": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "dev": true + }, + "node_modules/keygrip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "dev": true, + "dependencies": { + "tsscmp": "1.0.6" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/keyv": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", + "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", + "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/koa": { + "version": "2.13.4", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.4.tgz", + "integrity": "sha512-43zkIKubNbnrULWlHdN5h1g3SEKXOEzoAlRsHOTFpnlDu8JlAOZSMJBLULusuXRequboiwJcj5vtYXKB3k7+2g==", + "dev": true, + "dependencies": { + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.8.0", + "debug": "^4.3.2", + "delegates": "^1.0.0", + "depd": "^2.0.0", + "destroy": "^1.0.4", + "encodeurl": "^1.0.2", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.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" + }, + "engines": { + "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" + } + }, + "node_modules/koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", + "dev": true + }, + "node_modules/koa-compress": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/koa-compress/-/koa-compress-3.1.0.tgz", + "integrity": "sha512-0m24/yS/GbhWI+g9FqtvStY+yJwTObwoxOvPok6itVjRen7PBWkjsJ8pre76m+99YybXLKhOJ62mJ268qyBFMQ==", + "dev": true, + "dependencies": { + "bytes": "^3.0.0", + "compressible": "^2.0.0", + "koa-is-json": "^1.0.0", + "statuses": "^1.0.0" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/koa-convert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", + "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", + "dev": true, + "dependencies": { + "co": "^4.6.0", + "koa-compose": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/koa-etag": { + "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, + "dependencies": { + "etag": "^1.8.1" + } + }, + "node_modules/koa-is-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", + "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=", + "dev": true + }, + "node_modules/koa-send": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", + "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "http-errors": "^1.7.3", + "resolve-path": "^1.4.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/koa-static": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", + "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", + "dev": true, + "dependencies": { + "debug": "^3.1.0", + "koa-send": "^5.0.0" + }, + "engines": { + "node": ">= 7.6.0" + } + }, + "node_modules/koa-static/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lighthouse-logger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", + "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", + "dev": true, + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lint-staged": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.2.6.tgz", + "integrity": "sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg==", + "dev": true, + "dependencies": { + "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.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", + "supports-color": "8.1.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/lint-staged/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/listr2": { + "version": "3.13.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.13.5.tgz", + "integrity": "sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.4.0", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "node_modules/listr2/node_modules/rxjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", + "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", + "dev": true, + "dependencies": { + "tslib": "~2.1.0" + } + }, + "node_modules/listr2/node_modules/tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + }, + "node_modules/lit-element": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-2.5.1.tgz", + "integrity": "sha512-ogu7PiJTA33bEK0xGu1dmaX5vhcRjBXCFexPja0e7P7jqLhTpNKYRPmE+GmiCaRVAbiQKGkUgkh/i6+bh++dPQ==", + "dependencies": { + "lit-html": "^1.1.1" + } + }, + "node_modules/lit-html": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-1.4.1.tgz", + "integrity": "sha512-B9btcSgPYb1q4oSOb/PrOT6Z/H+r6xuNzfH4lFli/AWhYwdtrgQkQWBbIc6mdnf6E2IL3gDXdkkqNktpU0OZQA==" + }, + "node_modules/lit-translate": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/lit-translate/-/lit-translate-1.2.1.tgz", + "integrity": "sha512-jykKpkdRX0lx3JYq9jUMzVs02ISClOe2wxyPHat5wVKPyBRJQxgXxLxj1AbpuLNBCDZKEysMBpeJ1z0Y35Bk2Q==", + "dependencies": { + "lit-html": "^1.2.1" + } + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "node_modules/lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/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 + }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/marked": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.10.tgz", + "integrity": "sha512-+QvuFj0nGgO970fySghXGmuw+Fd0gD2x3+MqCWLIPf5oxdv1Ka6b2q+z9RP01P/IaKPMEramy+7cNy/Lw8c3hw==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/marky": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.2.tgz", + "integrity": "sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "dependencies": { + "@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": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/meriyah": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/meriyah/-/meriyah-3.1.6.tgz", + "integrity": "sha512-JDOSi6DIItDc33U5N52UdV6P8v+gn+fqZKfbAfHzdWApRQyQWdcvxPvAr9t01bI2rBxGvSrKRQSCg3SkZC1qeg==", + "dev": true, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minipass": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", + "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "node_modules/mkdirp-infer-owner": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", + "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-infer-owner/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", + "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", + "dev": true, + "dependencies": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "2.2.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.4", + "ms": "2.1.1", + "node-environment-flags": "1.0.5", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/mocha/node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/mocha/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/mocha/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/mocha/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/mocha/node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/mocha/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/mocha/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/mkdirp": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/mocha/node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/mocha/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/mocha/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/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 + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/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==" + }, + "node_modules/nise": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.0.tgz", + "integrity": "sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0", + "@sinonjs/fake-timers": "^7.0.4", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" + } + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-environment-flags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", + "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node_modules/node-environment-flags/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-gyp": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "dev": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "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, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "node_modules/npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-packlist": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", + "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", + "dev": true, + "dependencies": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "node_modules/npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/only": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=", + "dev": true + }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json/node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json/node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json/node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/package-json/node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "node_modules/package-json/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json/node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/package-json/node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "node_modules/package-json/node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/package-json/node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/package-json/node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json/node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/pacote": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", + "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", + "dev": true, + "dependencies": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/panzoom": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/panzoom/-/panzoom-9.4.2.tgz", + "integrity": "sha512-sQLr0t6EmNFXpZHag0HQVtOKqF9xjF7iZdgWg3Ss1o7uh2QZLvcrz7S0Cl8M0d2TkPZ69JfPJdknXN3I0e/2aQ==", + "dependencies": { + "amator": "^1.1.0", + "ngraph.events": "^1.2.1", + "wheel": "^1.0.0" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-conflict-json": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-1.1.1.tgz", + "integrity": "sha512-4gySviBiW5TRl7XHvp1agcS7SOe0KZOjC//71dzZVWJrY9hCrgtvl5v3SyIxCZ4fZF47TxD9nfzmxcx76xmbUw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "just-diff": "^3.0.1", + "just-diff-apply": "^3.0.0" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dev": true, + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/periscopic": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-2.0.3.tgz", + "integrity": "sha512-FuCZe61mWxQOJAQFEfmt9FjzebRlcpFz8sFPbyaCKtdusPkMEbA9ey0eARnRav5zAhmXznhaQkKGFAPn7X9NUw==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.2", + "is-reference": "^1.1.4" + } + }, + "node_modules/periscopic/node_modules/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 + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/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, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "node_modules/polyfills-loader": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/polyfills-loader/-/polyfills-loader-1.7.6.tgz", + "integrity": "sha512-AiLIgmGFmzcvsqewyKsqWb7H8CnWNTSQBoM0u+Mauzmp0DsjObXmnZdeqvTn0HNwc1wYHHTOta82WjSjG341eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.1", + "@open-wc/building-utils": "^2.18.3", + "@webcomponents/webcomponentsjs": "^2.4.0", + "abortcontroller-polyfill": "^1.4.0", + "core-js-bundle": "^3.6.0", + "deepmerge": "^4.2.2", + "dynamic-import-polyfill": "^0.1.1", + "es-module-shims": "^0.4.6", + "intersection-observer": "^0.7.0", + "parse5": "^5.1.1", + "regenerator-runtime": "^0.13.3", + "resize-observer-polyfill": "^1.5.1", + "systemjs": "^6.3.1", + "terser": "^4.6.7", + "whatwg-fetch": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/polyfills-loader/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/portfinder/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/postcss": { + "version": "8.4.4", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.4.tgz", + "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==", + "dev": true, + "dependencies": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-modules": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.2.2.tgz", + "integrity": "sha512-/H08MGEmaalv/OU8j6bUKi/kZr2kqGF6huAW8m9UAgOLWtpFdhA14+gPBoymtqyv+D4MLsmqaF2zvIegdCxJXg==", + "dev": true, + "dependencies": { + "generic-names": "^2.0.1", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proc-log": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz", + "integrity": "sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg==", + "dev": true + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-all-reject-late": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", + "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/promise-call-limit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz", + "integrity": "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/puppeteer-core": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-13.7.0.tgz", + "integrity": "sha512-rXja4vcnAzFAP1OVLq/5dWNfwBGuzcOARJ6qGV7oAZhnLmVRU8G5MsdeQEAOy332ZhkIOnn9jp15R89LKHyp2Q==", + "dev": true, + "dependencies": { + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.981744", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "pkg-dir": "4.2.0", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.5.0" + }, + "engines": { + "node": ">=10.18.1" + } + }, + "node_modules/puppeteer-core/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/puppeteer-core/node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/pure-rand": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.0.tgz", + "integrity": "sha512-lD2/y78q+7HqBx2SaT6OT4UcwtvXNRfEpzYEzl0EQ+9gZq2Qi3fa0HDnYPeqQwhlHJFBUhT7AO3mLU3+8bynHA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", + "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/raw-body": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "dev": true, + "dependencies": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-cmd-shim": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", + "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", + "dev": true + }, + "node_modules/read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/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 + }, + "node_modules/read-pkg/node_modules/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, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "dev": true, + "dependencies": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "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, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", + "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", + "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requireindex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", + "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", + "dev": true, + "engines": { + "node": ">=0.10.5" + } + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "dev": true, + "dependencies": { + "global-dirs": "^0.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-path": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", + "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", + "dev": true, + "dependencies": { + "http-errors": "~1.6.2", + "path-is-absolute": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/resolve-path/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/resolve-path/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/resolve-path/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/resolve-path/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "dev": true, + "dependencies": { + "lowercase-keys": "^2.0.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.60.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.60.2.tgz", + "integrity": "sha512-1Bgjpq61sPjgoZzuiDSGvbI1tD91giZABgjCQBKM5aYLnzjq52GoDuWVwT/cm/MCxCMPU8gqQvkj8doQ5C8Oqw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-polyfill-node": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.6.2.tgz", + "integrity": "sha512-gMCVuR0zsKq0jdBn8pSXN1Ejsc458k2QsFFvQdbHoM0Pot5hEnck+pBP/FDwFS6uAi77pD3rDTytsaUStsOMlA==", + "dev": true, + "dependencies": { + "@rollup/plugin-inject": "^4.0.0" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/rollup-plugin-terser/node_modules/terser": { + "version": "5.16.5", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.5.tgz", + "integrity": "sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shady-css-scoped-element": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/shady-css-scoped-element/-/shady-css-scoped-element-0.0.2.tgz", + "integrity": "sha512-Dqfl70x6JiwYDujd33ZTbtCK0t52E7+H2swdWQNSTzfsolSa6LJHnTpN4T9OpJJEq4bxuzHRLFO9RBcy/UfrMQ==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shiki": { + "version": "0.9.14", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.14.tgz", + "integrity": "sha512-uLHjjyJdNsMzF9GOF8vlOuZ8BwigiYPraMN5yjC826k8K7Xu90JQcC5GUNrzRibLgT2EOk9597I1IX+jRdA8nw==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "node_modules/sinon": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-11.1.2.tgz", + "integrity": "sha512-59237HChms4kg7/sXhiRcUzdSkKuydDeTiamT/jesUVHshBgL8XAmhgFo0GfK6RruMDM/iRSij1EybmMog9cJw==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": "^7.1.2", + "@sinonjs/samsam": "^6.0.2", + "diff": "^5.0.0", + "nise": "^5.1.0", + "supports-color": "^7.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "node_modules/sinon-chai": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.7.0.tgz", + "integrity": "sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==", + "dev": true, + "peerDependencies": { + "chai": "^4.0.0", + "sinon": ">=4.0.0" + } + }, + "node_modules/sinon/node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/skypack": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/skypack/-/skypack-0.3.2.tgz", + "integrity": "sha512-je1pix0QYER6iHuUGbgcafRJT5TI+EGUIBfzBLMqo3Wi22I2SzB9TVHQqwKCw8pzJMuHqhVTFEHc3Ey+ra25Sw==", + "dev": true, + "dependencies": { + "cacache": "^15.0.0", + "cachedir": "^2.3.0", + "esinstall": "^1.0.0", + "etag": "^1.8.1", + "find-up": "^5.0.0", + "got": "^11.1.4", + "kleur": "^4.1.0", + "mkdirp": "^1.0.3", + "p-queue": "^6.2.1", + "rimraf": "^3.0.0", + "rollup": "^2.23.0", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/skypack/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/skypack/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/skypack/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/skypack/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/snowpack": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/snowpack/-/snowpack-3.8.6.tgz", + "integrity": "sha512-EZ3Y7RtTiPvxnVFTKPfkvi2PKBrprXCvOHKWQQLBkHonf+xdtG51RiNjtrRLJeCjislAlD6OoeGHUxz76ToGHw==", + "dev": true, + "dependencies": { + "@npmcli/arborist": "^2.6.4", + "bufferutil": "^4.0.2", + "cachedir": "^2.3.0", + "cheerio": "1.0.0-rc.10", + "chokidar": "^3.4.0", + "cli-spinners": "^2.5.0", + "compressible": "^2.0.18", + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "default-browser-id": "^2.0.0", + "detect-port": "^1.3.0", + "es-module-lexer": "^0.3.24", + "esbuild": "~0.9.0", + "esinstall": "^1.1.7", + "estree-walker": "^2.0.2", + "etag": "^1.8.1", + "execa": "^5.1.1", + "fdir": "^5.0.0", + "find-cache-dir": "^3.3.1", + "find-up": "^5.0.0", + "glob": "^7.1.7", + "httpie": "^1.1.2", + "is-plain-object": "^5.0.0", + "is-reference": "^1.2.1", + "isbinaryfile": "^4.0.6", + "jsonschema": "~1.2.5", + "kleur": "^4.1.1", + "meriyah": "^3.1.6", + "mime-types": "^2.1.26", + "mkdirp": "^1.0.3", + "npm-run-path": "^4.0.1", + "open": "^8.2.1", + "pacote": "^11.3.4", + "periscopic": "^2.0.3", + "picomatch": "^2.3.0", + "postcss": "^8.3.5", + "postcss-modules": "^4.0.0", + "resolve": "^1.20.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "rollup": "~2.37.1", + "signal-exit": "^3.0.3", + "skypack": "^0.3.2", + "slash": "~3.0.0", + "source-map": "^0.7.3", + "strip-ansi": "^6.0.0", + "strip-comments": "^2.0.1", + "utf-8-validate": "^5.0.3", + "ws": "^7.3.0", + "yargs-parser": "^20.0.0" + }, + "bin": { + "snowpack": "index.bin.js", + "sp": "index.bin.js" + }, + "engines": { + "node": ">=10.19.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/snowpack/node_modules/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 + }, + "node_modules/snowpack/node_modules/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 + }, + "node_modules/snowpack/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/snowpack/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/snowpack/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/snowpack/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/snowpack/node_modules/rollup": { + "version": "2.37.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.37.1.tgz", + "integrity": "sha512-V3ojEeyGeSdrMSuhP3diBb06P+qV4gKQeanbDv+Qh/BZbhdZ7kHV0xAt8Yjk4GFshq/WjO7R4c7DFM20AwTFVQ==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" + } + }, + "node_modules/snowpack/node_modules/rollup/node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/socks": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", + "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "dev": true, + "dependencies": { + "ip": "^1.1.5", + "smart-buffer": "^4.1.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", + "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", + "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/standard-version": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.3.2.tgz", + "integrity": "sha512-u1rfKP4o4ew7Yjbfycv80aNMN2feTiqseAhUhrrx2XtdQGmu7gucpziXe68Z4YfHVqlxVEzo4aUA0Iu3VQOTgQ==", + "deprecated": "standard-version is deprecated. If you're a GitHub user, I recommend https://github.com/googleapis/release-please as an alternative.", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "conventional-changelog": "3.1.24", + "conventional-changelog-config-spec": "2.1.0", + "conventional-changelog-conventionalcommits": "4.6.1", + "conventional-recommended-bump": "6.1.0", + "detect-indent": "^6.0.0", + "detect-newline": "^3.1.0", + "dotgitignore": "^2.1.0", + "figures": "^3.1.0", + "find-up": "^5.0.0", + "fs-access": "^1.0.1", + "git-semver-tags": "^4.0.0", + "semver": "^7.1.1", + "stringify-package": "^1.0.1", + "yargs": "^16.0.0" + }, + "bin": { + "standard-version": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/standard-version/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard-version/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard-version/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/standard-version/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/standard-version/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard-version/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard-version/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard-version/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard-version/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard-version/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard-version/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stringify-object/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stringify-package": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", + "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", + "dev": true + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/systemjs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-6.11.0.tgz", + "integrity": "sha512-7YPIY44j+BoY+E6cGBSw0oCU8SNTTIHKZgftcBdwWkDzs/M86Fdlr21FrzAyph7Zo8r3CFGscyFe4rrBtixrBg==", + "dev": true + }, + "node_modules/table": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.5.tgz", + "integrity": "sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/terser/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/treeverse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-1.0.4.tgz", + "integrity": "sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g==", + "dev": true + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "dependencies": { + "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" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "node_modules/ts-simple-type": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/ts-simple-type/-/ts-simple-type-1.0.7.tgz", + "integrity": "sha512-zKmsCQs4dZaeSKjEA7pLFDv7FHHqAFLPd0Mr//OIJvu8M+4p4bgSFJwZSEBEg3ec9W7RzRz1vi8giiX0+mheBQ==", + "dev": true + }, + "node_modules/tsconfig-paths": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "node_modules/tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "dev": true, + "engines": { + "node": ">=0.6.x" + } + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typedoc": { + "version": "0.21.10", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.21.10.tgz", + "integrity": "sha512-Y0wYIehkjkPfsp3pv86fp3WPHUcOf8pnQUDLwG1PqSccUSqdsv7Pz1Gd5WrTJvXQB2wO1mKlZ8qW8qMiopKyjA==", + "dev": true, + "dependencies": { + "glob": "^7.1.7", + "handlebars": "^4.7.7", + "lunr": "^2.3.9", + "marked": "^4.0.10", + "minimatch": "^3.0.0", + "progress": "^2.0.3", + "shiki": "^0.9.8", + "typedoc-default-themes": "^0.12.10" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 12.10.0" + }, + "peerDependencies": { + "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x" + } + }, + "node_modules/typedoc-default-themes": { + "version": "0.12.10", + "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.12.10.tgz", + "integrity": "sha512-fIS001cAYHkyQPidWXmHuhs8usjP5XVJjWB8oZGqkTowZaz3v7g3KDZeeqE82FBrmkAnIBOY3jgy7lnPnqATbA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/typedoc-plugin-markdown": { + "version": "3.10.4", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.10.4.tgz", + "integrity": "sha512-if9w7S9fXLg73AYi/EoRSEhTOZlg3I8mIP8YEmvzSE33VrNXC9/hA0nVcLEwFVJeQY7ay6z67I6kW0KIv7LjeA==", + "dev": true, + "dependencies": { + "handlebars": "^4.7.7" + }, + "peerDependencies": { + "typedoc": ">=0.21.2" + } + }, + "node_modules/typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.34.tgz", + "integrity": "sha512-K9mwJm/DaB6mRLZfw6q8IMXipcrmuT6yfhYmwhAkuh+81sChuYstYA+znlgaflUPaYUa3odxKPKGw6Vw/lANew==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/uglify-js": { + "version": "3.14.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.4.tgz", + "integrity": "sha512-AbiSR44J0GoCeV81+oxcy/jDOElO2Bx3d0MfQCUShq7JRXaM4KtQopZsq2vFv8bCq2yMaGrw1FgygUd03RyRDA==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "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, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/untildify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", + "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", + "dev": true, + "dependencies": { + "os-homedir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dev": true, + "dependencies": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/useragent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "dev": true, + "dependencies": { + "lru-cache": "4.1.x", + "tmp": "0.0.x" + } + }, + "node_modules/useragent/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/useragent/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "node_modules/utf-8-validate": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", + "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", + "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/vm2": { + "version": "3.9.14", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.14.tgz", + "integrity": "sha512-HgvPHYHeQy8+QhzlFryvSteA4uQLBCOub02mgqdR+0bN/akRZ48TGB1v0aCv7ksyc0HXx16AZtMHKS38alc6TA==", + "dev": true, + "dependencies": { + "acorn": "^8.7.0", + "acorn-walk": "^8.2.0" + }, + "bin": { + "vm2": "bin/vm2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/vm2/node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/vscode-oniguruma": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz", + "integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "dev": true + }, + "node_modules/walk-up-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", + "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", + "dev": true + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-component-analyzer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/web-component-analyzer/-/web-component-analyzer-1.1.6.tgz", + "integrity": "sha512-1PyBkb/jijDEVE+Pnk3DTmVHD8takipdvAwvZv1V8jIidsSIJ5nhN87Gs+4dpEb1vw48yp8dnbZKkvMYJ+C0VQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.2", + "ts-simple-type": "~1.0.5", + "typescript": "^3.8.3", + "yargs": "^15.3.1" + }, + "bin": { + "wca": "cli.js", + "web-component-analyzer": "cli.js" + } + }, + "node_modules/web-component-analyzer/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/web-component-analyzer/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/web-component-analyzer/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/web-component-analyzer/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/web-component-analyzer/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/web-component-analyzer/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/wheel": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wheel/-/wheel-1.0.0.tgz", + "integrity": "sha512-XiCMHibOiqalCQ+BaNSwRoZ9FDTAvOsXxGHXChBugewDj7HC8VBIER71dEOiRH1fSdLbRCQzngKTSiZ06ZQzeA==" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wicg-inert": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/wicg-inert/-/wicg-inert-3.1.1.tgz", + "integrity": "sha512-PhBaNh8ur9Xm4Ggy4umelwNIP6pPP1bv3EaWaKqfb/QNme2rdLjm7wIInvV4WhxVHhzA4Spgw9qNSqWtB/ca2A==" + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/workbox-background-sync": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz", + "integrity": "sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz", + "integrity": "sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-build": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.4.tgz", + "integrity": "sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==", + "dev": true, + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.5.4", + "workbox-broadcast-update": "6.5.4", + "workbox-cacheable-response": "6.5.4", + "workbox-core": "6.5.4", + "workbox-expiration": "6.5.4", + "workbox-google-analytics": "6.5.4", + "workbox-navigation-preload": "6.5.4", + "workbox-precaching": "6.5.4", + "workbox-range-requests": "6.5.4", + "workbox-recipes": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4", + "workbox-streams": "6.5.4", + "workbox-sw": "6.5.4", + "workbox-window": "6.5.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz", + "integrity": "sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-cli": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-cli/-/workbox-cli-6.5.4.tgz", + "integrity": "sha512-+Cc0jYh25MofhCROZqfQkpYSAGvykyrUVekuuPaLFbJ8qxX/zzX8hRRpglfwxDwokAjz8S20oEph4s+MyQc+Yw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "chokidar": "^3.5.2", + "common-tags": "^1.8.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "inquirer": "^7.3.3", + "meow": "^7.1.0", + "ora": "^5.0.0", + "pretty-bytes": "^5.3.0", + "stringify-object": "^3.3.0", + "upath": "^1.2.0", + "update-notifier": "^4.1.0", + "workbox-build": "6.5.4" + }, + "bin": { + "workbox": "build/bin.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-cli/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-cli/node_modules/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 + }, + "node_modules/workbox-cli/node_modules/meow": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz", + "integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==", + "dev": true, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/workbox-cli/node_modules/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, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/workbox-cli/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/workbox-cli/node_modules/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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/workbox-cli/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/workbox-core": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.4.tgz", + "integrity": "sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==", + "dev": true + }, + "node_modules/workbox-expiration": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.4.tgz", + "integrity": "sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz", + "integrity": "sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==", + "dev": true, + "dependencies": { + "workbox-background-sync": "6.5.4", + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz", + "integrity": "sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-precaching": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.4.tgz", + "integrity": "sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz", + "integrity": "sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-recipes": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.4.tgz", + "integrity": "sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==", + "dev": true, + "dependencies": { + "workbox-cacheable-response": "6.5.4", + "workbox-core": "6.5.4", + "workbox-expiration": "6.5.4", + "workbox-precaching": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "node_modules/workbox-routing": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.4.tgz", + "integrity": "sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-strategies": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.4.tgz", + "integrity": "sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-streams": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.4.tgz", + "integrity": "sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4" + } + }, + "node_modules/workbox-sw": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.4.tgz", + "integrity": "sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==", + "dev": true + }, + "node_modules/workbox-window": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.4.tgz", + "integrity": "sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==", + "dev": true, + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.5.4" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", + "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz", + "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "dependencies": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs-unparser/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/yargs-unparser/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/yargs-unparser/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/yargs-unparser/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/yargs-unparser/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs-unparser/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs-unparser/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yargs-unparser/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-unparser/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/ylru": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", + "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dev": true, + "requires": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + } + }, + "@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.0" + } + }, + "@babel/compat-data": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "dev": true + }, + "@babel/core": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "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/eslint-parser": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz", + "integrity": "sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ==", + "dev": true, + "peer": true, + "requires": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true + } + } + }, + "@babel/eslint-plugin": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.18.10.tgz", + "integrity": "sha512-iV1OZj/7eg4wZIcsVEkXS3MUWdhmpLsu2h+9Zr2ppywKWdCRs6VfjxbRzmHHYeurTizrrnaJ9ZkbO8KOv4lauQ==", + "dev": true, + "peer": true, + "requires": { + "eslint-rule-composer": "^0.3.0" + } + }, + "@babel/generator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0", + "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.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", + "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz", + "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", + "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz", + "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz", + "integrity": "sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz", + "integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz", + "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-function-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz", + "integrity": "sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-wrap-function": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-validator-identifier": { + "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": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz", + "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helpers": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", + "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", + "dev": true, + "requires": { + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.3", + "@babel/types": "^7.16.0" + } + }, + "@babel/highlight": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", + "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz", + "integrity": "sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz", + "integrity": "sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz", + "integrity": "sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.16.4", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", + "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz", + "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz", + "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz", + "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz", + "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz", + "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz", + "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz", + "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz", + "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz", + "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz", + "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz", + "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz", + "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz", + "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz", + "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz", + "integrity": "sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.16.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz", + "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz", + "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz", + "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz", + "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz", + "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz", + "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz", + "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz", + "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz", + "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz", + "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz", + "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz", + "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz", + "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz", + "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.16.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz", + "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.15.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz", + "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz", + "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz", + "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz", + "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.16.0" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz", + "integrity": "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz", + "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz", + "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz", + "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz", + "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz", + "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz", + "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz", + "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz", + "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz", + "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz", + "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/preset-env": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz", + "integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-compilation-targets": "^7.16.3", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.2", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-async-generator-functions": "^7.16.4", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-class-static-block": "^7.16.0", + "@babel/plugin-proposal-dynamic-import": "^7.16.0", + "@babel/plugin-proposal-export-namespace-from": "^7.16.0", + "@babel/plugin-proposal-json-strings": "^7.16.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-object-rest-spread": "^7.16.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-proposal-private-property-in-object": "^7.16.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.0", + "@babel/plugin-transform-async-to-generator": "^7.16.0", + "@babel/plugin-transform-block-scoped-functions": "^7.16.0", + "@babel/plugin-transform-block-scoping": "^7.16.0", + "@babel/plugin-transform-classes": "^7.16.0", + "@babel/plugin-transform-computed-properties": "^7.16.0", + "@babel/plugin-transform-destructuring": "^7.16.0", + "@babel/plugin-transform-dotall-regex": "^7.16.0", + "@babel/plugin-transform-duplicate-keys": "^7.16.0", + "@babel/plugin-transform-exponentiation-operator": "^7.16.0", + "@babel/plugin-transform-for-of": "^7.16.0", + "@babel/plugin-transform-function-name": "^7.16.0", + "@babel/plugin-transform-literals": "^7.16.0", + "@babel/plugin-transform-member-expression-literals": "^7.16.0", + "@babel/plugin-transform-modules-amd": "^7.16.0", + "@babel/plugin-transform-modules-commonjs": "^7.16.0", + "@babel/plugin-transform-modules-systemjs": "^7.16.0", + "@babel/plugin-transform-modules-umd": "^7.16.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.0", + "@babel/plugin-transform-new-target": "^7.16.0", + "@babel/plugin-transform-object-super": "^7.16.0", + "@babel/plugin-transform-parameters": "^7.16.3", + "@babel/plugin-transform-property-literals": "^7.16.0", + "@babel/plugin-transform-regenerator": "^7.16.0", + "@babel/plugin-transform-reserved-words": "^7.16.0", + "@babel/plugin-transform-shorthand-properties": "^7.16.0", + "@babel/plugin-transform-spread": "^7.16.0", + "@babel/plugin-transform-sticky-regex": "^7.16.0", + "@babel/plugin-transform-template-literals": "^7.16.0", + "@babel/plugin-transform-typeof-symbol": "^7.16.0", + "@babel/plugin-transform-unicode-escapes": "^7.16.0", + "@babel/plugin-transform-unicode-regex": "^7.16.0", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.0", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.4.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.19.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", + "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.3.tgz", + "integrity": "sha512-IAdDC7T0+wEB4y2gbIL0uOXEYpiZEeuFUTVbdGq+UwCcF35T/tS8KrmMomEwEc5wBbyfH3PJVpTSUqrhPDXFcQ==", + "dev": true, + "requires": { + "core-js-pure": "^3.19.0", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/traverse": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", + "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.3", + "@babel/types": "^7.16.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "to-fast-properties": "^2.0.0" + } + }, + "@commitlint/cli": { + "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.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", + "yargs": "^17.0.0" + } + }, + "@commitlint/config-conventional": { + "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.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-13.2.0.tgz", + "integrity": "sha512-rqhT62RehdLTRBu8OrPHnRCCd/7RmHEE4TiTlT4BLlr5ls5jlZhecOQWJ8np872uCNirrJ5NFjnjYYdbkNoW9Q==", + "dev": true, + "requires": { + "@commitlint/types": "^13.2.0", + "lodash": "^4.17.19" + } + }, + "@commitlint/execute-rule": { + "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.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-13.2.0.tgz", + "integrity": "sha512-yNBQJe6YFhM1pJAta4LvzQxccSKof6axJH7ALYjuhQqfT8AKlad7Y/2SuJ07ioyreNIqwOTuF2UfU8yJ7JzEIQ==", + "dev": true, + "requires": { + "@commitlint/types": "^13.2.0", + "chalk": "^4.0.0" + } + }, + "@commitlint/is-ignored": { + "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.2.0", + "semver": "7.3.5" + } + }, + "@commitlint/lint": { + "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.2.0", + "@commitlint/parse": "^13.2.0", + "@commitlint/rules": "^13.2.0", + "@commitlint/types": "^13.2.0" + } + }, + "@commitlint/load": { + "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.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", + "typescript": "^4.4.3" + }, + "dependencies": { + "typescript": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", + "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", + "dev": true + } + } + }, + "@commitlint/message": { + "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.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.2.0", + "conventional-changelog-angular": "^5.0.11", + "conventional-commits-parser": "^3.2.2" + } + }, + "@commitlint/read": { + "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.2.0", + "@commitlint/types": "^13.2.0", + "fs-extra": "^10.0.0", + "git-raw-commits": "^2.0.0" + } + }, + "@commitlint/resolve-extends": { + "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", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + } + }, + "@commitlint/rules": { + "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.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.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.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" + }, + "dependencies": { + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + } + } + }, + "@commitlint/types": { + "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", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } + } + }, + "@gar/promisify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", + "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true + }, + "@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@koa/cors": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-3.1.0.tgz", + "integrity": "sha512-7ulRC1da/rBa6kj6P4g2aJfnET3z8Uf3SWu60cjbtxTA5g8lxRdX/Bd2P92EagGwwAhANeNw8T8if99rJliR6Q==", + "dev": true, + "requires": { + "vary": "^1.1.2" + } + }, + "@material/animation": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/animation/-/animation-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-R1QbY4fC6RBOoi4Dq/3yuD5OK0ts02WxGt1JXaddsdnO6szZJcfXm2aiCweU1GUpchoah+YzDBJrsmSoqFCKIg==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/base": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/base/-/base-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-bCxGPqFQPh3rfBdqG+UvlrnRPSP2CzHhn0f44NqELY/SkmujIfS30rJOX965IKoD6lGdKWIfi/sAm03I81pZ7g==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/button": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/button/-/button-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-FV44k7WH8d0Z7TjKldEILWXG+bgVz0CplqAYiPiRoxIaGljOq/D7+enuC8tJOUst+zyihVSKyYT69ghWuOKjjg==", + "requires": { + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/touch-target": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/density": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/density/-/density-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-uCOzDL3U8EAOU6A+3lwbys6lB5P24PwEsNoe5YoB7CmkNS+8LLFPdemp4dMdVY2xGlDX+McaUOKJKmFub4cPUA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/dialog": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/dialog/-/dialog-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-WOK+HN7HQa3mHvNEsEnleDOHCLRAbpFOhGuGyqnSDOCyxTl2DcNCUqsWupDVDpAlLv2OfLdmceyJrejMF+8q7g==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/button": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/icon-button": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/touch-target": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/dom": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/dom/-/dom-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-9XvFE2OuOZizYXF3ptyMcJuN/JHZA4vKq5lPLrIbcTXnd4DzJ7L4JrMcMb75xfjugxj8uaXjdfI62gwHfzP/aw==", + "requires": { + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/drawer": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/drawer/-/drawer-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-a5tGNXOXJglDpq/5blE3ZxbfTnuYU6pnkswWHliSUc71fC1A6XmK51vLz/PCGPGV3qL8JS2sakOVMdssRuLPxA==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/list": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/elevation": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-fuOG6w7Crz+9iibkBAXOQGYBWMCDZSvXA9PlZFW1JFCHUWyzzTMJeJIaHAVMHFzhbVF/rjqF6CliDZyAz4fULg==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/feature-targeting": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-e72VDSIMrwF5aX4rkQcO1AHewX/ydWOujFtMBk4QD/asyDPKBv+bKwO6f/msM+Wqen8I+DbHC0PH/2K15gQ3pQ==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/floating-label": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-MZIVki9uD6JMyfQ6v5FIgt2WEZQ3fOCpoOiE8c9cHuNiawVJc3pmoA5wT/38hJs3iMCx86D1jL1vK9UdyIdF7A==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/form-field": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/form-field/-/form-field-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-wYNyh1RMqEviuWcredWYx8ENEjR1GYdQu/NE9SKlfK7zKsFxF7szwHDd/3cZd7BSYVJUeylveDW+KgXQaW0YpQ==", + "requires": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/icon-button": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/icon-button/-/icon-button-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-2cKO9FIEYwQqd6qlvuC2IbZQ3m8xvw690sx+H/+1UFs17TY/STDfJRj1p5qf+MnIqaiz5jsoxQemuUkcej+uBw==", + "requires": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/touch-target": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/line-ripple": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-9LL/d3jWNesupmwvZtNbV2B1rc1i5BHatFgVt62B1xvfaViRL7EyS0K/+kv9SPWU6nqPLfdj33vOMukn2zIgAg==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/linear-progress": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/linear-progress/-/linear-progress-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-SuEJPdtMbY9hN7X8s9Y8MzVfnmQy32gi4cSIv3r3aL5wmfO29Dg5Gw8OkggEuVjy0QKTXSN9N74WdCdpQ5rUPw==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/progress-indicator": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/list": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/list/-/list-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-Vai+ggNyDBuWM0ihBs3ELGEKCdRmFoTFEhfcZ321VEI2YE8EY6eW1tvazzBfSzpLZkrqcn2QkqD6UpQBzkp4AA==", + "requires": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/menu": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/menu/-/menu-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-8JMFM/QdIC+CRDf79uSe5b4/kCF+3Re90OYlCVaT8LyfYGzYNtBQ8LPKaWlmS2fRN0eIBd1faoUGO0bvslulhg==", + "requires": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/list": "12.0.0-canary.22d29cbb4.0", + "@material/menu-surface": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/menu-surface": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-kvfewRPo4sJtGzBK/T94jjRYnnIaQbC5xqQ+AmGZHGUBsV713cVE1IWVSm0d+7MbERsqKMG9/JZik2Um3YZetQ==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/mwc-base": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-base/-/mwc-base-0.22.1.tgz", + "integrity": "sha512-KtQf4lQUoTQuetfhfRbVJhsXVcpX74LP4JI/cLmx+SGbpG+pXXWf6VI2MvZY2UoHVEkldqPHndeuqctBoY7vgg==", + "requires": { + "@material/base": "=12.0.0-canary.22d29cbb4.0", + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-button": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-button/-/mwc-button-0.22.1.tgz", + "integrity": "sha512-Z+NOM+d7QkmIOGbVT7BA/rzLJMXGaxC4Bp+dXcm3ESu6ohPBtG878IyZGSGiMXXDtmAKgMAIp74z4gE/Y0j1pA==", + "requires": { + "@material/mwc-icon": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-checkbox": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-checkbox/-/mwc-checkbox-0.22.1.tgz", + "integrity": "sha512-JfUEVWAos/sscPH1k9oUKhjtCbTuU4rl7GgKcenCF6EnxTaXbzxGJKPz28BUS5I14JM7vHNUwfqTC+M/87tNxg==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-dialog": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-dialog/-/mwc-dialog-0.22.1.tgz", + "integrity": "sha512-NHHtsled57N2EjDLelEN5YeJSpW/PYxayA+d2B2zpQPbhqhl//VKxJ9fA6CPm1uc+Cvp2G7lbZ2oUUSQivu+Aw==", + "requires": { + "@material/dialog": "=12.0.0-canary.22d29cbb4.0", + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-button": "^0.22.1", + "blocking-elements": "^0.1.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1", + "wicg-inert": "^3.0.0" + } + }, + "@material/mwc-drawer": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-drawer/-/mwc-drawer-0.22.1.tgz", + "integrity": "sha512-klwo4VMIIeV4UY+0t4HJ5/2Z8hUjsPHoleEFamRf97yVgPnmCHHaXhe7fjq8srxgkXK81PzwA7PFGBofS248ag==", + "requires": { + "@material/drawer": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "blocking-elements": "^0.1.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1", + "wicg-inert": "^3.0.0" + } + }, + "@material/mwc-fab": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-fab/-/mwc-fab-0.22.1.tgz", + "integrity": "sha512-KFzZFFr/Nq3bJ0JJyEy7SHsvVLhoqMCTELEjcy2s4fZYT1mLUmHK+Iip1vuKP2I96Yvnym4wkFEcwz/zAMCWbA==", + "requires": { + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-floating-label": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-floating-label/-/mwc-floating-label-0.22.1.tgz", + "integrity": "sha512-BkFt9WL8RE05JESv73egh7XUsmXALL78u1ev98T579SER3kwfIepQhXTvAAnFRHFa7QjT8qa/U6RmsvHe1zYbg==", + "requires": { + "@material/floating-label": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-formfield": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-formfield/-/mwc-formfield-0.22.1.tgz", + "integrity": "sha512-jk8YyX1STjh+HCQOjlEmtr+kVG8Nlkemh9GoVNkJoIH6k7n+WgYcVXoJtfGWJFBkO8kfHziRVeLRPGP8Nt8ErA==", + "requires": { + "@material/form-field": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-icon": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-icon/-/mwc-icon-0.22.1.tgz", + "integrity": "sha512-LX4MUThlYEBfpTr1O53J27KbzFhPbe2dBGouY9piztCI3FObbRVQI+LXFlXJm6KU0BzemaQfz105ZAuLlPAN4g==", + "requires": { + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-icon-button": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-icon-button/-/mwc-icon-button-0.22.1.tgz", + "integrity": "sha512-UHwWwzn9LrAKFmQLuKSMQZe1m+X0Xi//xAhLiIBOHaXyEH3QxmKr7pR82e8HQPc42+jUAxKUFmohMrppG6Dmcg==", + "requires": { + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-icon-button-toggle": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-icon-button-toggle/-/mwc-icon-button-toggle-0.22.1.tgz", + "integrity": "sha512-4r2Hvmo8qhYfEmWNUPvXxmBY0PTdN3JIFvn7d8WPukPgVSCfhh8o4MbxySoHcuo81A+2K/eMRAiLNY7Y8O5Aew==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-icon-button": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-line-ripple": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-line-ripple/-/mwc-line-ripple-0.22.1.tgz", + "integrity": "sha512-Wx2BHD+/z4Fm8TXyiv59UVeNAirunTfR3uCEjGMU/R7mXUwjpjOhY5bNYGUcP9VyMGG5CkLovc8XX96/iKs1ag==", + "requires": { + "@material/line-ripple": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-linear-progress": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-linear-progress/-/mwc-linear-progress-0.22.1.tgz", + "integrity": "sha512-GqqUDomF1nZh6cN0Dgz41vphfvDR17+vdtYk1O5YU9ajW/yd+9SBqwbjfqo4g/jmCpJvMeKnBDZo3Hbc8KnK7g==", + "requires": { + "@material/linear-progress": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/theme": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-list": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-list/-/mwc-list-0.22.1.tgz", + "integrity": "sha512-NGfacR/vSHMte7BOrFM7Cafi+tRIeBH8vNFcpP7yjqPkYCXt/9cEw0j1KVtldCRi20V38vkewUKdh2v3DiP5dg==", + "requires": { + "@material/base": "=12.0.0-canary.22d29cbb4.0", + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/list": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-checkbox": "^0.22.1", + "@material/mwc-radio": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-menu": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-menu/-/mwc-menu-0.22.1.tgz", + "integrity": "sha512-fY7dyxv9aIccMqPp0+ihbXfB8g7Khvz7tYhtVMLqb6CgpdXf06a/lW50eN0Mk4GC+mFyN36HKHDP7LMLFfsvlA==", + "requires": { + "@material/menu": "=12.0.0-canary.22d29cbb4.0", + "@material/menu-surface": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-list": "^0.22.1", + "@material/shape": "=12.0.0-canary.22d29cbb4.0", + "@material/theme": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-notched-outline": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-notched-outline/-/mwc-notched-outline-0.22.1.tgz", + "integrity": "sha512-Bi+CKK24/ypgQZech+vUOWPR8hjPxXILf+mt5liVoNXddGITbdFAShFndNb4Ln4Rn3omzvC63enhpYSS4ByRNw==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/notched-outline": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-radio": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-radio/-/mwc-radio-0.22.1.tgz", + "integrity": "sha512-pFVuDl/bSCK7gVXC54Lsm6lMclt8MYk0u4yVsjaEUTeFk0xMK1ZvoXifIkW0IHhAJVmWgGpWX57wSzLrRZbUNw==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "@material/radio": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-ripple": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-ripple/-/mwc-ripple-0.22.1.tgz", + "integrity": "sha512-QQyWWPBZ6veWNbBMWo8WQw0iY9QUjLLANorug8mPHv13ETdhwVUUozeKOY0ZCXWupNlqtap1Gd0IQjv6HVRMjA==", + "requires": { + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/ripple": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-select": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-select/-/mwc-select-0.22.1.tgz", + "integrity": "sha512-P5o2DD48AtEpr+ZqbFlQ04GgSmcbhOTdQEeDBkDAxSsuErXQZgzY1aPCXlaDI0QzQ/gNP/13b4ejLqstVp9SQg==", + "requires": { + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/floating-label": "=12.0.0-canary.22d29cbb4.0", + "@material/line-ripple": "=12.0.0-canary.22d29cbb4.0", + "@material/list": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-floating-label": "^0.22.1", + "@material/mwc-icon": "^0.22.1", + "@material/mwc-line-ripple": "^0.22.1", + "@material/mwc-list": "^0.22.1", + "@material/mwc-menu": "^0.22.1", + "@material/mwc-notched-outline": "^0.22.1", + "@material/select": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-snackbar": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-snackbar/-/mwc-snackbar-0.22.1.tgz", + "integrity": "sha512-4ZTb4Gk/zKJWvvqqKuOFo1NO68DnCgyQlktPdNNTGhCERdxkEQnZz+mkAw+Mfr5tCBizomgaFzd6tuAZCUutyQ==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/snackbar": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-switch": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-switch/-/mwc-switch-0.22.1.tgz", + "integrity": "sha512-KDY3uqT2qTEw6Z9TS91Ucs0LViUcMsP1XHu6ZNhbv9Ai1uK/i8pwVWAIGIX9Cm1iCdjiYGfKm4DZLORDb/rfEQ==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "@material/switch": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-tab": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-tab/-/mwc-tab-0.22.1.tgz", + "integrity": "sha512-sNPE8kRQEH04vEStxiidTjpyuHc+5Wm8+OVU8wrf6ChJa8KUV5bi2blWm6PW4rfQRo2Bs8AarDXv15t4wv3XWg==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "@material/mwc-tab-indicator": "^0.22.1", + "@material/tab": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-tab-bar": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-tab-bar/-/mwc-tab-bar-0.22.1.tgz", + "integrity": "sha512-USn9pIMNfz2vPh7w2U55j0EVr82x3odq9VdcDGG5d4jWwzMPjJ9CKMjqgFrlIiPmxieD5zeSW0LauGhwv6ujOg==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-tab": "^0.22.1", + "@material/mwc-tab-scroller": "^0.22.1", + "@material/tab": "=12.0.0-canary.22d29cbb4.0", + "@material/tab-bar": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-tab-indicator": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-tab-indicator/-/mwc-tab-indicator-0.22.1.tgz", + "integrity": "sha512-/Q8vju7DAysqz3Fo+IINaGSeU9BinZbdaSUyRFjfrUWlzJCE6IYYB7zMyc2W+EjaxhjftpL/N3Sw50Xw+pAL+A==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/tab-indicator": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-tab-scroller": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-tab-scroller/-/mwc-tab-scroller-0.22.1.tgz", + "integrity": "sha512-dqAsXS7Nyw61vVb6d11zDg0xuvAYfOyPmz6wLwcXxzSlHOCfkuFu2fcjhssZIlW3DzzzrCw7aZ+T6mHOZcr0dg==", + "requires": { + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/tab-scroller": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-textarea": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-textarea/-/mwc-textarea-0.22.1.tgz", + "integrity": "sha512-ta5ARYpxaCRvseXTKkp8tFBfJ0oP8FWsE4FymrjV5b+UEAEzAzjcWWolIDyS7DdixSj1ROI5dJHsU/on5lWPjw==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-textfield": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-textfield": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-textfield/-/mwc-textfield-0.22.1.tgz", + "integrity": "sha512-7xLlW2B1wMnCi2JSlOELELPEUda0w6bWpjn4LB4UPi1hAWG8VR+Rn5rR6q4NDav9pad+qA7+PGjNlE32xVUm7g==", + "requires": { + "@material/floating-label": "=12.0.0-canary.22d29cbb4.0", + "@material/line-ripple": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-floating-label": "^0.22.1", + "@material/mwc-line-ripple": "^0.22.1", + "@material/mwc-notched-outline": "^0.22.1", + "@material/textfield": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-top-app-bar": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-top-app-bar/-/mwc-top-app-bar-0.22.1.tgz", + "integrity": "sha512-SHQLjMrHRYsJaT0+8rNjkYW9LDi93AsGX+USuCYhVPeMhBUcqVmr09lTCqj3xyJ3JAy43XONPhtXjxlMT1jCNg==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/top-app-bar": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-top-app-bar-fixed": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-top-app-bar-fixed/-/mwc-top-app-bar-fixed-0.22.1.tgz", + "integrity": "sha512-ZpQGKmqmSHp1izqX1U0S+3E8s5xLSB81cjFlQPFKG6arU6TO8Xqyzd05JPfFHfau5aZeHQuJB0MOGN2QT31UCw==", + "requires": { + "@material/mwc-top-app-bar": "^0.22.1", + "@material/top-app-bar": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "@material/notched-outline": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-LgVwQri2sI/EnAbSjyyzhifjcBKpYO48oy6HyRg6Cq/ZxOgNv3u/VG4fE3ToyNLe8pMPkfQsn2g8czuZoRYwxg==", + "requires": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/floating-label": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/progress-indicator": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-XnG61vDDUPQWK3obQcPHaTPxEKFfPKo8qtiKxkFnGdzIeezDGj7n9m8gdvzcqed8rGZWCNKYOzodkRfplStpMw==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/radio": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/radio/-/radio-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-piGy+6YEtW3odicIImRGnc3uY0iD42IAe4+pnVo36KsfHLm5peYuEc0jrLI4zdmOPYlRxSskIbAAzfMKdwKG1A==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/touch-target": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/ripple": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-IzBtXi4EWx27Hkfd5Zkx/MrZAXJZe0AAQCo37Etl/af0/aJPIOyCOdHQiwoK2FqRH71pmNfUGrUWOeUxFyaSdw==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/rtl": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-R7u7w5U+mvRwsj15tpf/CbALs3FrGVidsTkv8C1uZDK1ae490De8HSe839lcFcXmM8c/PFSx5B3rKyQG2AyraQ==", + "requires": { + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/select": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/select/-/select-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-ROpNqkHkv/ZUWNf4tWxDo/L6P2QwWaNKADSqYpg/XXecAm7NdBX5aDo63VCBPCm57JkAdBWJQB5MRrbkaWLTfA==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/floating-label": "12.0.0-canary.22d29cbb4.0", + "@material/line-ripple": "12.0.0-canary.22d29cbb4.0", + "@material/list": "12.0.0-canary.22d29cbb4.0", + "@material/menu": "12.0.0-canary.22d29cbb4.0", + "@material/menu-surface": "12.0.0-canary.22d29cbb4.0", + "@material/notched-outline": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/shape": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/shape/-/shape-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-yKC+cqdjGYg3sseZ4baNe9OLhBENHwX2SpJGZORZ7ix4/8pxzFG3wO80eZ8LsldzYem9MmtcbRilBZ4rvvxh0A==", + "requires": { + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/snackbar": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/snackbar/-/snackbar-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-NDYR2rYyF2kbQYCec/I0NmAPtnXMBpGYEQ4/m10rAzTP2hsyySZs0cKk54/V3czT+gFz9C9W3zCm1CwgJwL5fA==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/button": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/icon-button": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/switch": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/switch/-/switch-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-kubSphtXl74TC/PAjp67lYi7Ngk0MEKTLzp1ZHiMHElew2Z9/IYHP0pPaQRTkBY0ddIx6hVdHMiMf8qB4zuz2w==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/tab": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/tab/-/tab-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-Tmb+8Dsx7wItbqOW4JHUVIq3I/inM3l/gk6EV/ctNeyz8coPIJL39yN4CcTX+VHsYykF+tK3jz4QSQX0ASfimQ==", + "requires": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/tab-indicator": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/tab-bar": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/tab-bar/-/tab-bar-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-cxGyfONh9tFK2tISHDSAWFfH/uxH/HfTTjuDQIiPkOLmr6oVgGPXP2AdsZ0Z60HJCAedbR9mdWCesEk8w4f8+Q==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/tab": "12.0.0-canary.22d29cbb4.0", + "@material/tab-indicator": "12.0.0-canary.22d29cbb4.0", + "@material/tab-scroller": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/tab-indicator": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/tab-indicator/-/tab-indicator-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-7MeJG5bN7WCyNsjT+7iGci2XuIkwUXA3QRz3La2zKPBxnPkRiz7GUwkpr1b5h6wPpYfCWKyCbixQD9Ufgq3kKA==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/tab-scroller": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/tab-scroller/-/tab-scroller-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-IaFQiwJ/MKhbFvKcGmlAFNHCxXf5THyjefgzav/k0Fu49vzQFA1ZiSTvPU7/d0vV/G2amaba+l5w9TP9/n4KFw==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/tab": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/textfield": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-OJMgS0iniOvnRJa5DWyFqg1VIC77KEdoXern9OQiQphUE1LJ2Kbbwwj0GgyULuxhcUlUSnnisw+J5IfWK7kMUg==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/floating-label": "12.0.0-canary.22d29cbb4.0", + "@material/line-ripple": "12.0.0-canary.22d29cbb4.0", + "@material/notched-outline": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/theme": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/theme/-/theme-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-r4xYCgc+CrbvDxCINVqXwAFWQ1WgV3s2+bUse/2iw53YqyemhhtzFjfp+DXLdC4zJSOuObWC45eaDKeseLMGMw==", + "requires": { + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/top-app-bar": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/top-app-bar/-/top-app-bar-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-fTS0kOHyUAKBhtz8olDvsCtZ6VxJEJ5QNUAZdHbJsTjig87poLLUP2CKJ18t5DjzW/KFMFjNYMSbah6NOREvqg==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/touch-target": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-aPEMmR+xRI5ywD9JM+njTgU14CCsgRSS7CLZwd+wsfJkMYPCi8rBM3t23bu/jILa4IT6TIe32Ew1xIBVxJNpgQ==", + "requires": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/typography": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/typography/-/typography-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-lIzU4IFjaSfVRbhsabTiri8CD+fEe9/DaGpoDm89sHm7b8RbN1+m+7OrePICcWgWFo2swRndph8qhzh7gTYdew==", + "requires": { + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@mdn/browser-compat-data": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.1.0.tgz", + "integrity": "sha512-58eB5/ovJ5CfArzZwmZdenF/WlAGGS+1PG8RUb3oJ4st9exETBjClmFC0E1uVrZG1BwPaT205RKS8RhnUh5x3Q==", + "dev": true + }, + "@microsoft/tsdoc": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.13.2.tgz", + "integrity": "sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg==", + "dev": true + }, + "@microsoft/tsdoc-config": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.15.2.tgz", + "integrity": "sha512-mK19b2wJHSdNf8znXSMYVShAHktVr/ib0Ck2FA3lsVBSEhSI/TfXT7DJQkAYgcztTuwazGcg58ZjYdk0hTCVrA==", + "dev": true, + "requires": { + "@microsoft/tsdoc": "0.13.2", + "ajv": "~6.12.6", + "jju": "~1.4.0", + "resolve": "~1.19.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/arborist": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-2.10.0.tgz", + "integrity": "sha512-CLnD+zXG9oijEEzViimz8fbOoFVb7hoypiaf7p6giJhvYtrxLAyY3cZAMPIFQvsG731+02eMDp3LqVBNo7BaZA==", + "dev": true, + "requires": { + "@isaacs/string-locale-compare": "^1.0.1", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^1.0.2", + "@npmcli/metavuln-calculator": "^1.1.0", + "@npmcli/move-file": "^1.1.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^1.0.1", + "@npmcli/package-json": "^1.0.1", + "@npmcli/run-script": "^1.8.2", + "bin-links": "^2.2.1", + "cacache": "^15.0.3", + "common-ancestor-path": "^1.0.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "npm-install-checks": "^4.0.0", + "npm-package-arg": "^8.1.5", + "npm-pick-manifest": "^6.1.0", + "npm-registry-fetch": "^11.0.0", + "pacote": "^11.3.5", + "parse-conflict-json": "^1.1.1", + "proc-log": "^1.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "ssri": "^8.0.1", + "treeverse": "^1.0.4", + "walk-up-path": "^1.0.0" + } + }, + "@npmcli/fs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz", + "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", + "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + } + }, + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "@npmcli/map-workspaces": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-1.0.4.tgz", + "integrity": "sha512-wVR8QxhyXsFcD/cORtJwGQodeeaDf0OxcHie8ema4VgFeqwYkFsDPnSrIRSytX8xR6nKPAH89WnwTcaU608b/Q==", + "dev": true, + "requires": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^7.1.6", + "minimatch": "^3.0.4", + "read-package-json-fast": "^2.0.1" + } + }, + "@npmcli/metavuln-calculator": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-1.1.1.tgz", + "integrity": "sha512-9xe+ZZ1iGVaUovBVFI9h3qW+UuECUzhvZPxK9RaEA2mjU26o5D0JloGYWwLYvQELJNmBdQB6rrpuN8jni6LwzQ==", + "dev": true, + "requires": { + "cacache": "^15.0.5", + "pacote": "^11.1.11", + "semver": "^7.3.2" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@npmcli/name-from-folder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", + "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", + "dev": true + }, + "@npmcli/node-gyp": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", + "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", + "dev": true + }, + "@npmcli/package-json": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-1.0.1.tgz", + "integrity": "sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.1" + } + }, + "@npmcli/promise-spawn": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "dev": true, + "requires": { + "infer-owner": "^1.0.4" + } + }, + "@npmcli/run-script": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.6.tgz", + "integrity": "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + } + }, + "@open-wc/building-utils": { + "version": "2.18.4", + "resolved": "https://registry.npmjs.org/@open-wc/building-utils/-/building-utils-2.18.4.tgz", + "integrity": "sha512-wjNp9oE1SFsiBEqaI67ff60KHDpDbGMNF+82pvCHe412SFY4q8DNy8A+hesj1nZsuZHH1/olDfzBDbYKAnmgMg==", + "dev": true, + "requires": { + "@babel/core": "^7.11.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@webcomponents/shadycss": "^1.10.2", + "@webcomponents/webcomponentsjs": "^2.5.0", + "arrify": "^2.0.1", + "browserslist": "^4.16.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3", + "clone": "^2.1.2", + "core-js-bundle": "^3.8.1", + "deepmerge": "^4.2.2", + "es-module-shims": "^0.4.7", + "html-minifier-terser": "^5.1.1", + "lru-cache": "^5.1.1", + "minimatch": "^3.0.4", + "parse5": "^5.1.1", + "path-is-inside": "^1.0.2", + "regenerator-runtime": "^0.13.7", + "resolve": "^1.19.0", + "rimraf": "^3.0.2", + "shady-css-scoped-element": "^0.0.2", + "systemjs": "^6.8.3", + "terser": "^4.6.7", + "valid-url": "^1.0.9", + "whatwg-fetch": "^3.5.0", + "whatwg-url": "^7.1.0" + }, + "dependencies": { + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@open-wc/chai-dom-equals": { + "version": "0.12.36", + "resolved": "https://registry.npmjs.org/@open-wc/chai-dom-equals/-/chai-dom-equals-0.12.36.tgz", + "integrity": "sha512-Gt1fa37h4rtWPQGETSU4n1L678NmMi9KwHM1sH+JCGcz45rs8DBPx7MUVeGZ+HxRlbEI5t9LU2RGGv6xT2OlyA==", + "dev": true, + "requires": { + "@open-wc/semantic-dom-diff": "^0.13.16", + "@types/chai": "^4.1.7" + }, + "dependencies": { + "@open-wc/semantic-dom-diff": { + "version": "0.13.21", + "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.13.21.tgz", + "integrity": "sha512-BONpjHcGX2zFa9mfnwBCLEmlDsOHzT+j6Qt1yfK3MzFXFtAykfzFjAgaxPetu0YbBlCfXuMlfxI4vlRGCGMvFg==", + "dev": true + } + } + }, + "@open-wc/dedupe-mixin": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@open-wc/dedupe-mixin/-/dedupe-mixin-1.3.0.tgz", + "integrity": "sha512-UfdK1MPnR6T7f3svzzYBfu3qBkkZ/KsPhcpc3JYhsUY4hbpwNF9wEQtD4Z+/mRqMTJrKg++YSxIxE0FBhY3RIw==", + "dev": true + }, + "@open-wc/eslint-config": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@open-wc/eslint-config/-/eslint-config-4.3.0.tgz", + "integrity": "sha512-kCxFWQ1AR4meTmWJGnK36LJYqDJeFGjlj6n4vLjAW3/c1VUyYQKL90vrNKy/OHS9kTjc9dcH5D64myAbNx6r1w==", + "dev": true, + "requires": { + "eslint": "^7.6.0", + "eslint-config-airbnb-base": "^14.0.0", + "eslint-plugin-html": "^6.0.0", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-lit": "^1.2.0", + "eslint-plugin-lit-a11y": "^1.0.1", + "eslint-plugin-no-only-tests": "^2.4.0", + "eslint-plugin-wc": "^1.2.0" + } + }, + "@open-wc/scoped-elements": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@open-wc/scoped-elements/-/scoped-elements-1.3.4.tgz", + "integrity": "sha512-WD+ObocdzcFCpBxnc8bQa7NoATeA+tJrK0/c/yV1Nx4leV+1PmJNNu+WCcuckBEGd0Op6FP8w1TidoqmVVba6g==", + "dev": true, + "requires": { + "@open-wc/dedupe-mixin": "^1.3.0", + "lit-html": "^1.0.0" + } + }, + "@open-wc/semantic-dom-diff": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.19.5.tgz", + "integrity": "sha512-Wi0Fuj3dzqlWClU0y+J4k/nqTcH0uwgOWxZXPyeyG3DdvuyyjgiT4L4I/s6iVShWQvvEsyXnj7yVvixAo3CZvg==", + "dev": true, + "requires": { + "@types/chai": "^4.2.11", + "@web/test-runner-commands": "^0.5.7" + } + }, + "@open-wc/testing": { + "version": "2.5.33", + "resolved": "https://registry.npmjs.org/@open-wc/testing/-/testing-2.5.33.tgz", + "integrity": "sha512-+EJNs0i+VV4nE+BrG70l2DNGXOZTSrluruaaU06HUSk57ZlKa+kIxWmkLxCOLlbgnQgrPrQWxbs3lgB1tIx/YA==", + "dev": true, + "requires": { + "@open-wc/chai-dom-equals": "^0.12.36", + "@open-wc/semantic-dom-diff": "^0.19.3", + "@open-wc/testing-helpers": "^1.8.12", + "@types/chai": "^4.2.11", + "@types/chai-dom": "^0.0.9", + "@types/mocha": "^5.2.7", + "@types/sinon-chai": "^3.2.3", + "chai": "^4.2.0", + "chai-a11y-axe": "^1.3.1", + "chai-dom": "^1.8.1", + "mocha": "^6.2.2", + "sinon-chai": "^3.5.0" + } + }, + "@open-wc/testing-helpers": { + "version": "1.8.12", + "resolved": "https://registry.npmjs.org/@open-wc/testing-helpers/-/testing-helpers-1.8.12.tgz", + "integrity": "sha512-+4exEHYvnFqI1RGDDIKFHPZ7Ws5NK1epvEku3zLaOYN3zc+huX19SndNc5+X++v8A+quN/iXbHlh80ROyNaYDA==", + "dev": true, + "requires": { + "@open-wc/scoped-elements": "^1.2.4", + "lit-element": "^2.2.1", + "lit-html": "^1.0.0" + } + }, + "@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, + "@rollup/plugin-commonjs": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-16.0.0.tgz", + "integrity": "sha512-LuNyypCP3msCGVQJ7ki8PqYdpjfEkE/xtFa5DqlF+7IBD0JsfMZ87C58heSwIMint58sAUZbt3ITqOmdQv/dXw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + }, + "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-inject": { + "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.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": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", + "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.8" + } + }, + "@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, + "@sindresorhus/is": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", + "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", + "dev": true + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@sinonjs/samsam": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.0.2.tgz", + "integrity": "sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + } + }, + "@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "dev": true + }, + "@snowpack/plugin-typescript": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@snowpack/plugin-typescript/-/plugin-typescript-1.2.1.tgz", + "integrity": "sha512-wU+JNaMVkqGsqTaUY7TnEMhGt/3URTgA9dpMCtZX6wn/ceA7Gwlmue/sOLynf0OTNLygHPvjiQECQYkEi3LTtg==", + "dev": true, + "requires": { + "execa": "^5.0.0", + "npm-run-path": "^4.0.1" + } + }, + "@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "requires": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + }, + "dependencies": { + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + } + } + }, + "@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "requires": { + "defer-to-connect": "^2.0.0" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", + "dev": true, + "requires": { + "@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.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", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/browserslist": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@types/browserslist/-/browserslist-4.15.0.tgz", + "integrity": "sha512-h9LyKErRGZqMsHh9bd+FE8yCIal4S0DxKTOeui56VgVXqa66TKiuaIUxCAI7c1O0LjaUzOTcsMyOpO9GetozRA==", + "dev": true, + "requires": { + "browserslist": "*" + } + }, + "@types/browserslist-useragent": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/browserslist-useragent/-/browserslist-useragent-3.0.4.tgz", + "integrity": "sha512-S/AhrluMHi8EcuxxCtTDBGr8u+XvwUfLvZdARuIS2LFZ/lHoeaeJJYCozD68GKH6wm52FbIHq4WWPF/Ec6a9qA==", + "dev": true + }, + "@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "dev": true, + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, + "@types/caniuse-api": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/caniuse-api/-/caniuse-api-3.0.2.tgz", + "integrity": "sha512-YfCDMn7R59n7GFFfwjPAM0zLJQy4UvveC32rOJBmTqJJY8uSRqM4Dc7IJj8V9unA48Qy4nj5Bj3jD6Q8VZ1Seg==", + "dev": true + }, + "@types/chai": { + "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": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@types/chai-dom/-/chai-dom-0.0.9.tgz", + "integrity": "sha512-jj4F2NJog2/GBYsyJ8+NvhnWUBbPY4MUAKLdPJE6+568rw12GGXvj0ycUuP5nndVrnJgozmJAoMTvxvjJATXWw==", + "dev": true, + "requires": { + "@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", + "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", + "dev": true + }, + "@types/command-line-usage": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.2.tgz", + "integrity": "sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg==", + "dev": true + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==", + "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", + "integrity": "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/express": "*", + "@types/keygrip": "*", + "@types/node": "*" + } + }, + "@types/debounce": { + "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": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@types/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-bsKkeSqN7HYyYntFRAmzcwx/dKW4Wa+KVMTInANlI72PWLQmOpZu96j0OqHZGArW4VQwCmJPteQlXaUDeOB0WQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.26", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.26.tgz", + "integrity": "sha512-zeu3tpouA043RHxW0gzRxwCHchMgftE8GArRsvYT0ByDMbn19olQHx5jLue0LxWY6iYtXb7rXmuVtSkhy9YZvQ==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/http-assert": { + "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": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, + "@types/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.1.tgz", + "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/keygrip": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", + "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==", + "dev": true + }, + "@types/keyv": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", + "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/koa": { + "version": "2.13.4", + "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.4.tgz", + "integrity": "sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw==", + "dev": true, + "requires": { + "@types/accepts": "*", + "@types/content-disposition": "*", + "@types/cookies": "*", + "@types/http-assert": "*", + "@types/http-errors": "*", + "@types/keygrip": "*", + "@types/koa-compose": "*", + "@types/node": "*" + } + }, + "@types/koa__cors": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/koa__cors/-/koa__cors-3.0.3.tgz", + "integrity": "sha512-74Xb4hJOPGKlrQ4PRBk1A/p0gfLpgbnpT0o67OMVbwyeMXvlBN+ZCRztAAmkKZs+8hKbgMutUlZVbA52Hr/0IA==", + "dev": true, + "requires": { + "@types/koa": "*" + } + }, + "@types/koa-compose": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", + "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==", + "dev": true, + "requires": { + "@types/koa": "*" + } + }, + "@types/koa-compress": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@types/koa-compress/-/koa-compress-2.0.9.tgz", + "integrity": "sha512-1Sa9OsbHd2N2N7gLpdIRHe8W99EZbfIR31D7Iisx16XgwZCnWUtGXzXQejhu74Y1pE/wILqBP6VL49ch/MVpZw==", + "dev": true, + "requires": { + "@types/koa": "*", + "@types/node": "*" + } + }, + "@types/koa-etag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/koa-etag/-/koa-etag-3.0.0.tgz", + "integrity": "sha512-gXQUtKGEnCy0sZLG+uE3wL4mvY1CBPcb6ECjpAoD8RGYy/8ACY1B084k8LTFPIdVcmy7GD6Y4n3up3jnupofcQ==", + "dev": true, + "requires": { + "@types/etag": "*", + "@types/koa": "*" + } + }, + "@types/koa-send": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@types/koa-send/-/koa-send-4.1.3.tgz", + "integrity": "sha512-daaTqPZlgjIJycSTNjKpHYuKhXYP30atFc1pBcy6HHqB9+vcymDgYTguPdx9tO4HMOqNyz6bz/zqpxt5eLR+VA==", + "dev": true, + "requires": { + "@types/koa": "*" + } + }, + "@types/koa-static": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/koa-static/-/koa-static-4.0.2.tgz", + "integrity": "sha512-ns/zHg+K6XVPMuohjpOlpkR1WLa4VJ9czgUP9bxkCDn0JZBtUWbD/wKDZzPGDclkQK1bpAEScufCHOy8cbfL0w==", + "dev": true, + "requires": { + "@types/koa": "*", + "@types/koa-send": "*" + } + }, + "@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true + }, + "@types/marked": { + "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": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "@types/mime-types": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.1.tgz", + "integrity": "sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/mocha": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", + "dev": true + }, + "@types/node": { + "version": "16.11.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.11.tgz", + "integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/parse5": { + "version": "2.2.34", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz", + "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/path-is-inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/path-is-inside/-/path-is-inside-1.0.0.tgz", + "integrity": "sha512-hfnXRGugz+McgX2jxyy5qz9sB21LRzlGn24zlwN2KEgoPtEvjzNRrLtUkOOebPDPZl3Rq7ywKxYvylVcEZDnEw==", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/sinon": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.6.tgz", + "integrity": "sha512-6EF+wzMWvBNeGrfP3Nx60hhx+FfwSg1JJBLAAP/IdIUq0EYkqCYf70VT3PhuhPX9eLD+Dp+lNdpb/ZeHG8Yezg==", + "dev": true, + "requires": { + "@sinonjs/fake-timers": "^7.1.0" + } + }, + "@types/sinon-chai": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.6.tgz", + "integrity": "sha512-Z57LprQ+yOQNu9d6mWdHNvnmncPXzDWGSeLj+8L075/QahToapC4Q13zAFRVKV4clyBmdJ5gz4xBfVkOso5lXw==", + "dev": true, + "requires": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "@types/trusted-types": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", + "dev": true + }, + "@types/whatwg-url": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-6.4.0.tgz", + "integrity": "sha512-tonhlcbQ2eho09am6RHnHOgvtDfDYINd5rgxD+2YSkKENooVCFsWizJz139MQW/PV8FfClyKrNe9ZbdHrSCxGg==", + "dev": true, + "requires": { + "@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": "*" + } + }, + "@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "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.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.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "dev": true + } + } + }, + "@typescript-eslint/experimental-utils": { + "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.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" + }, + "dependencies": { + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + } + } + }, + "@typescript-eslint/parser": { + "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.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.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.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + } + }, + "@typescript-eslint/types": { + "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.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.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "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.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/config-loader": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.1.3.tgz", + "integrity": "sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==", + "dev": true, + "requires": { + "semver": "^7.3.4" + } + }, + "@web/dev-server": { + "version": "0.1.28", + "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.28.tgz", + "integrity": "sha512-964NqgatvFWX7LM8QGlB1XpcJoUQRXZPiEn3XKgDIUSNS6JNCjGfQQ+TfxBlT5KBHYJakDYbTk+sdEeRi2gaLw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.11", + "@types/command-line-args": "^5.0.0", + "@web/config-loader": "^0.1.3", + "@web/dev-server-core": "^0.3.17", + "@web/dev-server-rollup": "^0.3.13", + "camelcase": "^6.2.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.1", + "debounce": "^1.2.0", + "deepmerge": "^4.2.2", + "ip": "^1.1.5", + "nanocolors": "^0.2.1", + "open": "^8.0.2", + "portfinder": "^1.0.28" + }, + "dependencies": { + "camelcase": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", + "dev": true + } + } + }, + "@web/dev-server-core": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.3.17.tgz", + "integrity": "sha512-vN1dwQ8yDHGiAvCeUo9xFfjo+pFl8TW+pON7k9kfhbegrrB8CKhJDUxmHbZsyQUmjf/iX57/LhuWj1xGhRL8AA==", + "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/dev-server-esbuild": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/@web/dev-server-esbuild/-/dev-server-esbuild-0.2.16.tgz", + "integrity": "sha512-a82uKy9vQ4HvfWtjd7hJ3GtaqkL2ofxpEu3a1wIZyXB2dFWPvhRSmLNe/4IPPHe4vj6PVdRpLSFPEA3lXUW5Pw==", + "dev": true, + "requires": { + "@mdn/browser-compat-data": "^4.0.0", + "@web/dev-server-core": "^0.3.17", + "esbuild": "^0.12.21", + "parse5": "^6.0.1", + "ua-parser-js": "^1.0.2" + }, + "dependencies": { + "esbuild": { + "version": "0.12.29", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.29.tgz", + "integrity": "sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g==", + "dev": true + } + } + }, + "@web/dev-server-rollup": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.13.tgz", + "integrity": "sha512-QaxEtsdL6+fktIa1ZL8VEtq4U7WB7ikKEnxkbhUpFknB+WSvwx6DUrvyBDuPckunpczCnljXBFPugu+2W6N8Fg==", + "dev": true, + "requires": { + "@rollup/plugin-node-resolve": "^11.0.1", + "@web/dev-server-core": "^0.3.16", + "nanocolors": "^0.2.1", + "parse5": "^6.0.1", + "rollup": "^2.58.0", + "whatwg-url": "^11.0.0" + } + }, + "@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.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true + } + } + }, + "@web/test-runner": { + "version": "0.13.22", + "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.13.22.tgz", + "integrity": "sha512-s4P3X4z8RlxqbQgO4K7aPVZTlum9juuQ9ZIxvZlua+KMTG5J5Utr7Drey/tGcx+BwVFUAtQLr20IEWA+38d+fA==", + "dev": true, + "requires": { + "@web/browser-logs": "^0.2.2", + "@web/config-loader": "^0.1.3", + "@web/dev-server": "^0.1.24", + "@web/test-runner-chrome": "^0.10.5", + "@web/test-runner-commands": "^0.5.10", + "@web/test-runner-core": "^0.10.22", + "@web/test-runner-mocha": "^0.7.5", + "camelcase": "^6.2.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.1", + "convert-source-map": "^1.7.0", + "diff": "^5.0.0", + "globby": "^11.0.1", + "nanocolors": "^0.2.1", + "portfinder": "^1.0.28", + "source-map": "^0.7.3" + }, + "dependencies": { + "camelcase": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", + "dev": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + } + } + }, + "@web/test-runner-chrome": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.10.7.tgz", + "integrity": "sha512-DKJVHhHh3e/b6/erfKOy0a4kGfZ47qMoQRgROxi9T4F9lavEY3E5/MQ7hapHFM2lBF4vDrm+EWjtBdOL8o42tw==", + "dev": true, + "requires": { + "@web/test-runner-core": "^0.10.20", + "@web/test-runner-coverage-v8": "^0.4.8", + "chrome-launcher": "^0.15.0", + "puppeteer-core": "^13.1.3" + } + }, + "@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" + } + }, + "@web/test-runner-coverage-v8": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.4.8.tgz", + "integrity": "sha512-Ib0AscR8Xf9E/V7rf3XOVQTe4vKIbwSTupxV1xGgzj3x4RKUuMUg9FLz9EigZ5iN0mOzZKDllyRS523hbdhDtA==", + "dev": true, + "requires": { + "@web/test-runner-core": "^0.10.20", + "istanbul-lib-coverage": "^3.0.0", + "picomatch": "^2.2.2", + "v8-to-istanbul": "^8.0.0" + } + }, + "@web/test-runner-mocha": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.7.5.tgz", + "integrity": "sha512-12/OBq6efPCAvJpcz3XJs2OO5nHe7GtBibZ8Il1a0QtsGpRmuJ4/m1EF0Fj9f6KHg7JdpGo18A37oE+5hXjHwg==", + "dev": true, + "requires": { + "@types/mocha": "^8.2.0", + "@web/test-runner-core": "^0.10.20" + }, + "dependencies": { + "@types/mocha": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", + "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", + "dev": true + } + } + }, + "@webcomponents/shadycss": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.11.0.tgz", + "integrity": "sha512-L5O/+UPum8erOleNjKq6k58GVl3fNsEQdSOyh0EUhNmi7tHUyRuCJy1uqJiWydWcLARE5IPsMoPYMZmUGrz1JA==", + "dev": true + }, + "@webcomponents/webcomponentsjs": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.6.0.tgz", + "integrity": "sha512-Moog+Smx3ORTbWwuPqoclr+uvfLnciVd6wdCaVscHPrxbmQ/IJKm3wbB7hpzJtXWjAq2l/6QMlO85aZiOdtv5Q==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "abortcontroller-polyfill": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", + "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "ace-custom-element": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/ace-custom-element/-/ace-custom-element-1.6.5.tgz", + "integrity": "sha512-xU/9r94WKwjwEOjdfs6oVk2Dqc6X63eF2ECvKIMm/JCK1PDbXXdBYi5sQx110tR2sY4f96iXxyvscfT9qeI1RQ==" + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", + "dev": true + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", + "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + } + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "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.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": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "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", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "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-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "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.prototype.flat": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "axe-core": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", + "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", + "dev": true + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz", + "integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.0", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", + "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.0", + "core-js-compat": "^3.18.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz", + "integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "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.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "bin-links": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-2.3.0.tgz", + "integrity": "sha512-JzrOLHLwX2zMqKdyYZjkDgQGT+kHDkIhv2/IK2lJ00qLxV4TmFoHi8drDBb6H5Zrz1YfgHkai4e2MGPqnoUhqA==", + "dev": true, + "requires": { + "cmd-shim": "^4.0.1", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0", + "read-cmd-shim": "^2.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^3.0.3" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "blocking-elements": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/blocking-elements/-/blocking-elements-0.1.1.tgz", + "integrity": "sha512-/SLWbEzMoVIMZACCyhD/4Ya2M1PWP1qMKuiymowPcI+PdWDARqeARBjhj73kbUBCxEmTZCUu5TAqxtwUO9C1Ig==" + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "bplist-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", + "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=", + "dev": true, + "requires": { + "big-integer": "^1.6.7" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserslist": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", + "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001280", + "electron-to-chromium": "^1.3.896", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, + "browserslist-useragent": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/browserslist-useragent/-/browserslist-useragent-3.0.3.tgz", + "integrity": "sha512-8KKO6kOXu/93IkMi8zVqzU72BgpoxcITIHtkM1qmlnxJtIMF9Y+2uWL9JS2uUbzj/PaS3kaA6LcICBThMojGjA==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "semver": "^7.3.2", + "useragent": "^2.3.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "bufferutil": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", + "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", + "dev": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "dev": true + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + } + } + }, + "cache-content-type": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", + "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", + "dev": true, + "requires": { + "mime-types": "^2.1.18", + "ylru": "^1.2.0" + } + }, + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true + }, + "cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001284", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001284.tgz", + "integrity": "sha512-t28SKa7g6kiIQi6NHeOcKrOrGMzCRrXvlasPwWC26TH2QNdglgzQIRUuJ0cR3NeQPH+5jpuveeeSFDLm2zbkEw==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "chai-a11y-axe": { + "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.3.3" + } + }, + "chai-dom": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/chai-dom/-/chai-dom-1.11.0.tgz", + "integrity": "sha512-ZzGlEfk1UhHH5+N0t9bDqstOxPEXmn3EyXvtsok5rfXVDOFDJbHVy12rED6ZwkJAUDs2w7/Da4Hlq2LB63kltg==", + "dev": true, + "requires": {} + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "dev": true, + "requires": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "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": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "chrome-launcher": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.0.tgz", + "integrity": "sha512-ZQqX5kb9H0+jy1OqLnWampfocrtSZaGl7Ny3F9GRha85o4odbL8x55paUzh51UC7cEmZ5obp3H2Mm70uC2PpRA==", + "dev": true, + "requires": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + } + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "clean-css": { + "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": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "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": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "cmd-shim": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", + "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", + "dev": true, + "requires": { + "mkdirp-infer-owner": "^2.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "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", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "command-line-args": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.0.tgz", + "integrity": "sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A==", + "dev": true, + "requires": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + } + }, + "command-line-usage": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", + "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", + "dev": true, + "requires": { + "array-back": "^4.0.1", + "chalk": "^2.4.2", + "table-layout": "^1.0.1", + "typical": "^5.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true + }, + "common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "concurrently": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.4.0.tgz", + "integrity": "sha512-HZ3D0RTQMH3oS4gvtYj1P+NBc6PzE2McEra6yEFcQKrUQ9HvtTGU4Dbne083F034p+LRb7kWU0tPRNvSGs1UCQ==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } + } + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "confusing-browser-globals": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", + "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "conventional-changelog": { + "version": "3.1.24", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.24.tgz", + "integrity": "sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg==", + "dev": true, + "requires": { + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-atom": "^2.0.8", + "conventional-changelog-codemirror": "^2.0.8", + "conventional-changelog-conventionalcommits": "^4.5.0", + "conventional-changelog-core": "^4.2.1", + "conventional-changelog-ember": "^2.0.9", + "conventional-changelog-eslint": "^3.0.9", + "conventional-changelog-express": "^2.0.6", + "conventional-changelog-jquery": "^3.0.11", + "conventional-changelog-jshint": "^2.0.9", + "conventional-changelog-preset-loader": "^2.3.4" + } + }, + "conventional-changelog-angular": { + "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", + "q": "^1.5.1" + } + }, + "conventional-changelog-atom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", + "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-codemirror": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", + "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-config-spec": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz", + "integrity": "sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==", + "dev": true + }, + "conventional-changelog-conventionalcommits": { + "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", + "lodash": "^4.17.15", + "q": "^1.5.1" + } + }, + "conventional-changelog-core": { + "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", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.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" + } + }, + "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", + "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 + }, + "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" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "dependencies": { + "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" + } + } + } + }, + "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=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "conventional-changelog-ember": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", + "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-eslint": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", + "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-express": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", + "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-jquery": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", + "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-jshint": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", + "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + } + }, + "conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "dev": true + }, + "conventional-changelog-writer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz", + "integrity": "sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g==", + "dev": true, + "requires": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.6", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + } + }, + "conventional-commits-parser": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz", + "integrity": "sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw==", + "dev": true, + "requires": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + } + }, + "conventional-recommended-bump": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", + "dev": true, + "requires": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" + } + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "cookies": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", + "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", + "dev": true, + "requires": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + } + }, + "core-js-bundle": { + "version": "3.19.2", + "resolved": "https://registry.npmjs.org/core-js-bundle/-/core-js-bundle-3.19.2.tgz", + "integrity": "sha512-LoFua00O2j1ffgGDViAUQMKuwDXBB/XFOmEGY/9QcyQfIrjlom8XZzj0YymB2aUmPZtHmk1fAjPrz9OEXifW4g==", + "dev": true + }, + "core-js-compat": { + "version": "3.19.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.2.tgz", + "integrity": "sha512-ObBY1W5vx/LFFMaL1P5Udo4Npib6fu+cMokeziWkA8Tns4FcDemKF5j9JvaI5JhdkW8EQJQGJN1EcrzmEwuAqQ==", + "dev": true, + "requires": { + "browserslist": "^4.18.1", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-js-pure": { + "version": "3.19.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.2.tgz", + "integrity": "sha512-5LkcgQEy8pFeVnd/zomkUBSwnmIxuF1C8E9KrMAbOc8f34IBT9RGvTYeNDdp1PnvMJrrVhvk1hg/yVV5h/znlg==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cosmiconfig": { + "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", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "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-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dev": true, + "requires": { + "node-fetch": "2.6.7" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + } + }, + "css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-fns": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.27.0.tgz", + "integrity": "sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q==", + "dev": true + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, + "debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + } + } + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "deep-is": { + "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": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "default-browser-id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-2.0.0.tgz", + "integrity": "sha1-AezONxpx6F8VoXF354YwR+c9vn0=", + "dev": true, + "requires": { + "bplist-parser": "^0.1.0", + "pify": "^2.3.0", + "untildify": "^2.0.0" + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + }, + "dependencies": { + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + } + } + }, + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "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", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "dev": true, + "requires": { + "address": "^1.0.1", + "debug": "^2.6.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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "devtools-protocol": { + "version": "0.0.981744", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", + "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==", + "dev": true + }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "requires": { + "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": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.1.tgz", + "integrity": "sha512-JPFiouQIr16VQ4dX6i0+Hpbg3H2bMKPmZ+WZgBOSSvOPx9QHwwY8sPzeM2baUtViESYto6wC2nuZOMC/6gulcA==", + "dev": true, + "requires": { + "@types/parse5": "^2.2.34", + "clone": "^2.1.0", + "parse5": "^4.0.0" + }, + "dependencies": { + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + } + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "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", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotgitignore": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz", + "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "minimatch": "^3.0.4" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "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 + } + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "dynamic-import-polyfill": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dynamic-import-polyfill/-/dynamic-import-polyfill-0.1.1.tgz", + "integrity": "sha512-m953zv0w5oDagTItWm6Auhmk/pY7EiejaqiVbnzSS3HIjh1FCUeK7WzuaVtWPNs58A+/xpIE+/dVk6pKsrua8g==", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "dev": true, + "requires": { + "jake": "^10.8.5" + } + }, + "electron-to-chromium": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.11.tgz", + "integrity": "sha512-2OhsaYgsWGhWjx2et8kaUcdktPbBGjKM2X0BReUCKcSCPttEY+hz2zie820JLbttU8jwL92+JJysWwkut3wZgA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "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.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + } + }, + "es-dev-server": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-dev-server/-/es-dev-server-2.1.0.tgz", + "integrity": "sha512-Vrq/4PyMzWz33QmOdSncvoWLTJVcv2e96z8FLHQwP9zK7DyLeDZCckII8VTW+btUGtM7aErvLH/d/R2pjjjs8w==", + "dev": true, + "requires": { + "@babel/core": "^7.11.1", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.11.0", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-transform-template-literals": "^7.8.3", + "@babel/preset-env": "^7.9.0", + "@koa/cors": "^3.1.0", + "@open-wc/building-utils": "^2.18.3", + "@rollup/plugin-node-resolve": "^11.0.0", + "@rollup/pluginutils": "^3.0.0", + "@types/babel__core": "^7.1.3", + "@types/browserslist": "^4.8.0", + "@types/browserslist-useragent": "^3.0.0", + "@types/caniuse-api": "^3.0.0", + "@types/command-line-args": "^5.0.0", + "@types/command-line-usage": "^5.0.1", + "@types/debounce": "^1.2.0", + "@types/koa": "^2.0.48", + "@types/koa__cors": "^3.0.1", + "@types/koa-compress": "^2.0.9", + "@types/koa-etag": "^3.0.0", + "@types/koa-static": "^4.0.1", + "@types/lru-cache": "^5.1.0", + "@types/mime-types": "^2.1.0", + "@types/minimatch": "^3.0.3", + "@types/path-is-inside": "^1.0.0", + "@types/whatwg-url": "^6.4.0", + "browserslist": "^4.9.1", + "browserslist-useragent": "^3.0.2", + "builtin-modules": "^3.1.0", + "camelcase": "^5.3.1", + "caniuse-api": "^3.0.0", + "caniuse-lite": "^1.0.30001033", + "chokidar": "^3.0.0", + "command-line-args": "^5.0.2", + "command-line-usage": "^6.1.0", + "debounce": "^1.2.0", + "deepmerge": "^4.2.2", + "es-module-lexer": "^0.3.13", + "get-stream": "^5.1.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^4.0.2", + "koa": "^2.7.0", + "koa-compress": "^3.0.0", + "koa-etag": "^3.0.0", + "koa-static": "^5.0.0", + "lru-cache": "^5.1.1", + "mime-types": "^2.1.27", + "minimatch": "^3.0.4", + "open": "^7.0.3", + "parse5": "^5.1.1", + "path-is-inside": "^1.0.2", + "polyfills-loader": "^1.7.4", + "portfinder": "^1.0.21", + "rollup": "^2.7.2", + "strip-ansi": "^5.2.0", + "systemjs": "^6.3.1", + "tslib": "^1.11.1", + "useragent": "^2.3.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "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", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "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", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "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", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "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" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "es-module-lexer": { + "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": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/es-module-shims/-/es-module-shims-0.4.7.tgz", + "integrity": "sha512-0LTiSQoPWwdcaTVIQXhGlaDwTneD0g9/tnH1PNs3zHFFH+xoCeJclDM3rQeqF9nurXPfMKm3l9+kfPRa5VpbKg==", + "dev": true + }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "esbuild": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.9.7.tgz", + "integrity": "sha512-VtUf6aQ89VTmMLKrWHYG50uByMF4JQlVysb8dmg6cOgW8JnFCipmz7p+HNBl+RR3LLCuBxFGVauAe2wfnF9bLg==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esinstall": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/esinstall/-/esinstall-1.1.7.tgz", + "integrity": "sha512-irDsrIF7fZ5BCQEAV5gmH+4nsK6JhnkI9C9VloXdmzJLbM1EcshPw8Ap95UUGc4ZJdzGeOrjV+jgKjQ/Z7Q3pg==", + "dev": true, + "requires": { + "@rollup/plugin-commonjs": "^16.0.0", + "@rollup/plugin-inject": "^4.0.2", + "@rollup/plugin-json": "^4.0.0", + "@rollup/plugin-node-resolve": "^10.0.0", + "@rollup/plugin-replace": "^2.4.2", + "builtin-modules": "^3.2.0", + "cjs-module-lexer": "^1.2.1", + "es-module-lexer": "^0.6.0", + "execa": "^5.1.1", + "is-valid-identifier": "^2.0.2", + "kleur": "^4.1.1", + "mkdirp": "^1.0.3", + "picomatch": "^2.3.0", + "resolve": "^1.20.0", + "rimraf": "^3.0.0", + "rollup": "~2.37.1", + "rollup-plugin-polyfill-node": "^0.6.2", + "slash": "~3.0.0", + "validate-npm-package-name": "^3.0.0", + "vm2": "^3.9.2" + }, + "dependencies": { + "@rollup/plugin-node-resolve": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-10.0.0.tgz", + "integrity": "sha512-sNijGta8fqzwA1VwUEtTvWCx2E7qC70NMsDh4ZG13byAXYigBNZMxALhKUSycBks5gupJdq0lFrKumFrRZ8H3A==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.17.0" + } + }, + "es-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.6.0.tgz", + "integrity": "sha512-f8kcHX1ArhllUtb/wVSyvygoKCznIjnxhLxy7TCvIiMdT7fL4ZDTIKaadMe6eLvOXg6Wk02UeoFgUoZ2EKZZUA==", + "dev": true + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "rollup": { + "version": "2.37.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.37.1.tgz", + "integrity": "sha512-V3ojEeyGeSdrMSuhP3diBb06P+qV4gKQeanbDv+Qh/BZbhdZ7kHV0xAt8Yjk4GFshq/WjO7R4c7DFM20AwTFVQ==", + "dev": true, + "requires": { + "fsevents": "~2.1.2" + } + } + } + }, + "eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } + } + }, + "eslint-config-airbnb-base": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", + "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "dev": true, + "requires": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.2" + } + }, + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "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": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "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 + } + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz", + "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", + "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.1", + "has": "^1.0.3", + "is-core-module": "^2.8.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": { + "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" + } + }, + "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.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", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "requireindex": "^1.2.0" + } + }, + "eslint-plugin-lit-a11y": { + "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.3.3", + "axobject-query": "^2.2.0", + "dom5": "^3.0.1", + "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.1", + "requireindex": "~1.2.0" + }, + "dependencies": { + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + } + } + }, + "eslint-plugin-no-only-tests": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-2.6.0.tgz", + "integrity": "sha512-T9SmE/g6UV1uZo1oHAqOvL86XWl7Pl2EpRpnLI8g/bkJu+h7XBCB+1LnubRZ2CUQXj805vh4/CYZdnqtVaEo2Q==", + "dev": true + }, + "eslint-plugin-tsdoc": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.14.tgz", + "integrity": "sha512-fJ3fnZRsdIoBZgzkQjv8vAj6NeeOoFkTfgosj6mKsFjX70QV256sA/wq+y/R2+OL4L8E79VVaVWrPeZnKNe8Ng==", + "dev": true, + "requires": { + "@microsoft/tsdoc": "0.13.2", + "@microsoft/tsdoc-config": "0.15.2" + } + }, + "eslint-plugin-wc": { + "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", + "js-levenshtein-esm": "^1.2.0" + } + }, + "eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "dev": true + }, + "eslint-rule-extender": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/eslint-rule-extender/-/eslint-rule-extender-0.0.1.tgz", + "integrity": "sha512-F0j1Twve3lamL3J0rRSVAynlp58sDPG39JFcQrM+u9Na7PmCgiPHNODh6YE9mduaGcsn3NBqbf6LZRj0cLr8Ng==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-check": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.20.0.tgz", + "integrity": "sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog==", + "dev": true, + "requires": { + "pure-rand": "^5.0.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "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" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "fdir": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-5.1.0.tgz", + "integrity": "sha512-IgTtZwL52tx2wqWeuGDzXYTnNsEjNLahZpJw30hCQDyVnoHXwY5acNDnjGImTTL1R0z1PCyLw20VAbE5qLic3Q==", + "dev": true + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "dependencies": { + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + } + } + }, + "find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "requires": { + "array-back": "^3.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "requires": { + "is-buffer": "~2.0.3" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "^1.0.0" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "generic-names": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz", + "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "get-pkg-repo": { + "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", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "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" + } + }, + "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" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "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", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "git-raw-commits": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", + "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", + "dev": true, + "requires": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + } + }, + "git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", + "dev": true, + "requires": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + } + }, + "git-semver-tags": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", + "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", + "dev": true, + "requires": { + "meow": "^8.0.0", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "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", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + }, + "dependencies": { + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "dev": true + } + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "requires": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "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": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } + } + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dev": true, + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + } + }, + "htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "http-assert": { + "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.8.0" + } + }, + "http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + } + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "dependencies": { + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + } + } + }, + "httpie": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/httpie/-/httpie-1.1.2.tgz", + "integrity": "sha512-VQ82oXG95oY1fQw/XecHuvcFBA+lZQ9Vwj1RfLcO8a7HpDd4cc2ukwpJt+TUlFaLUAzZErylxWu6wclJ1rUhUQ==", + "dev": true + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "husky": { + "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": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, + "idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "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", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + } + }, + "internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "intersection-observer": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/intersection-observer/-/intersection-observer-0.7.0.tgz", + "integrity": "sha512-Id0Fij0HsB/vKWGeBe9PxeY45ttRiBmhFyyt/geBdDHBYNctMRTE3dC1U3ujzz3lap+hVXlEcVaB56kZP/eEUg==", + "dev": true + }, + "intl-list-format": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/intl-list-format/-/intl-list-format-1.0.3.tgz", + "integrity": "sha512-VNF1Mh0K1xALXkz/5QsK1gfKRvEQO/jWaniTGAzQvbzGr5uyGDskQrRjnf6Qnbc9/JRbNE8BQtTg6iWuFrZorw==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-core-module": { + "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-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "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-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "requires": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + }, + "dependencies": { + "global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "dev": true, + "requires": { + "ini": "1.3.7" + } + }, + "ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true + } + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "requires": { + "text-extensions": "^1.0.0" + } + }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-valid-element-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-element-name/-/is-valid-element-name-1.0.0.tgz", + "integrity": "sha1-Ju8/12zfHxItEFQG4y01sN4AWYE=", + "dev": true, + "requires": { + "is-potential-custom-element-name": "^1.0.0" + } + }, + "is-valid-identifier": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-valid-identifier/-/is-valid-identifier-2.0.2.tgz", + "integrity": "sha512-mpS5EGqXOwzXtKAg6I44jIAqeBfntFLxpAth1rrKbxtKyI6LPktyDYpHBI+tHlduhhX/SF26mFXmxQu995QVqg==", + "dev": true, + "requires": { + "assert": "^1.4.1" + } + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "isbinaryfile": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", + "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-reports": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.1.tgz", + "integrity": "sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + } + } + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", + "dev": true + }, + "js-levenshtein-esm": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/js-levenshtein-esm/-/js-levenshtein-esm-1.2.0.tgz", + "integrity": "sha512-fzreKVq1eD7eGcQr7MtRpQH94f8gIfhdrc7yeih38xh684TNMK9v5aAu2wxfIRMk/GpAJRrzcirMAPIaSDaByQ==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-nice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true + }, + "jsonschema": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.11.tgz", + "integrity": "sha512-XNZHs3N1IOa3lPKm//npxMhOdaoPw+MvEV0NIgxcER83GTJcG13rehtWmpBCfEt8DrtYwIkMTs8bdXoYs4fvnQ==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "just-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-3.1.1.tgz", + "integrity": "sha512-sdMWKjRq8qWZEjDcVA6llnUT8RDEBIfOiGpYFPYa9u+2c39JCsejktSP7mj5eRid5EIvTzIpQ2kDOCw1Nq9BjQ==", + "dev": true + }, + "just-diff-apply": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-3.1.2.tgz", + "integrity": "sha512-TCa7ZdxCeq6q3Rgms2JCRHTCfWAETPZ8SzYUbkYF6KR3I03sN29DaOIC+xyWboIcMvjAsD5iG2u/RWzHD8XpgQ==", + "dev": true + }, + "just-extend": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "dev": true + }, + "keygrip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "dev": true, + "requires": { + "tsscmp": "1.0.6" + } + }, + "keyv": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", + "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "kleur": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", + "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", + "dev": true + }, + "koa": { + "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", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.8.0", + "debug": "^4.3.2", + "delegates": "^1.0.0", + "depd": "^2.0.0", + "destroy": "^1.0.4", + "encodeurl": "^1.0.2", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.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" + } + }, + "koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", + "dev": true + }, + "koa-compress": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/koa-compress/-/koa-compress-3.1.0.tgz", + "integrity": "sha512-0m24/yS/GbhWI+g9FqtvStY+yJwTObwoxOvPok6itVjRen7PBWkjsJ8pre76m+99YybXLKhOJ62mJ268qyBFMQ==", + "dev": true, + "requires": { + "bytes": "^3.0.0", + "compressible": "^2.0.0", + "koa-is-json": "^1.0.0", + "statuses": "^1.0.0" + } + }, + "koa-convert": { + "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": "^4.1.0" + } + }, + "koa-etag": { + "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.8.1" + } + }, + "koa-is-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", + "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=", + "dev": true + }, + "koa-send": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", + "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "http-errors": "^1.7.3", + "resolve-path": "^1.4.0" + } + }, + "koa-static": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", + "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "koa-send": "^5.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lighthouse-logger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", + "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "marky": "^1.2.2" + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "lint-staged": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.2.6.tgz", + "integrity": "sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg==", + "dev": true, + "requires": { + "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.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", + "supports-color": "8.1.1" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "listr2": { + "version": "3.13.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.13.5.tgz", + "integrity": "sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.4.0", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "rxjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", + "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", + "dev": true, + "requires": { + "tslib": "~2.1.0" + } + }, + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + } + } + }, + "lit-element": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-2.5.1.tgz", + "integrity": "sha512-ogu7PiJTA33bEK0xGu1dmaX5vhcRjBXCFexPja0e7P7jqLhTpNKYRPmE+GmiCaRVAbiQKGkUgkh/i6+bh++dPQ==", + "requires": { + "lit-html": "^1.1.1" + } + }, + "lit-html": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-1.4.1.tgz", + "integrity": "sha512-B9btcSgPYb1q4oSOb/PrOT6Z/H+r6xuNzfH4lFli/AWhYwdtrgQkQWBbIc6mdnf6E2IL3gDXdkkqNktpU0OZQA==" + }, + "lit-translate": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/lit-translate/-/lit-translate-1.2.1.tgz", + "integrity": "sha512-jykKpkdRX0lx3JYq9jUMzVs02ISClOe2wxyPHat5wVKPyBRJQxgXxLxj1AbpuLNBCDZKEysMBpeJ1z0Y35Bk2Q==", + "requires": { + "lit-html": "^1.2.1" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "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", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + } + }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true + }, + "marked": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.10.tgz", + "integrity": "sha512-+QvuFj0nGgO970fySghXGmuw+Fd0gD2x3+MqCWLIPf5oxdv1Ka6b2q+z9RP01P/IaKPMEramy+7cNy/Lw8c3hw==" + }, + "marky": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.2.tgz", + "integrity": "sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "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": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "meriyah": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/meriyah/-/meriyah-3.1.6.tgz", + "integrity": "sha512-JDOSi6DIItDc33U5N52UdV6P8v+gn+fqZKfbAfHzdWApRQyQWdcvxPvAr9t01bI2rBxGvSrKRQSCg3SkZC1qeg==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "requires": { + "mime-db": "1.51.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, + "minipass": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", + "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "mkdirp-infer-owner": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", + "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + } + } + }, + "mocha": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", + "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", + "dev": true, + "requires": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "2.2.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.4", + "ms": "2.1.1", + "node-environment-flags": "1.0.5", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "dependencies": { + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true + }, + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "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", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "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" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "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 + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "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", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "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 + }, + "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" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "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.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "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", + "integrity": "sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0", + "@sinonjs/fake-timers": "^7.0.4", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" + } + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-environment-flags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", + "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "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", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + } + }, + "node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "dev": true + }, + "node-releases": { + "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": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "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", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", + "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", + "dev": true, + "requires": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "dev": true, + "requires": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "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.19.1" + } + }, + "object.getownpropertydescriptors": { + "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.19.1" + } + }, + "object.values": { + "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.19.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "only": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=", + "dev": true + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + } + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + } + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "pacote": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", + "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", + "dev": true, + "requires": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "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": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-conflict-json": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-1.1.1.tgz", + "integrity": "sha512-4gySviBiW5TRl7XHvp1agcS7SOe0KZOjC//71dzZVWJrY9hCrgtvl5v3SyIxCZ4fZF47TxD9nfzmxcx76xmbUw==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "just-diff": "^3.0.1", + "just-diff-apply": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dev": true, + "requires": { + "isarray": "0.0.1" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "periscopic": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-2.0.3.tgz", + "integrity": "sha512-FuCZe61mWxQOJAQFEfmt9FjzebRlcpFz8sFPbyaCKtdusPkMEbA9ey0eARnRav5zAhmXznhaQkKGFAPn7X9NUw==", + "dev": true, + "requires": { + "estree-walker": "^2.0.2", + "is-reference": "^1.1.4" + }, + "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 + } + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "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", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, + "polyfills-loader": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/polyfills-loader/-/polyfills-loader-1.7.6.tgz", + "integrity": "sha512-AiLIgmGFmzcvsqewyKsqWb7H8CnWNTSQBoM0u+Mauzmp0DsjObXmnZdeqvTn0HNwc1wYHHTOta82WjSjG341eQ==", + "dev": true, + "requires": { + "@babel/core": "^7.11.1", + "@open-wc/building-utils": "^2.18.3", + "@webcomponents/webcomponentsjs": "^2.4.0", + "abortcontroller-polyfill": "^1.4.0", + "core-js-bundle": "^3.6.0", + "deepmerge": "^4.2.2", + "dynamic-import-polyfill": "^0.1.1", + "es-module-shims": "^0.4.6", + "intersection-observer": "^0.7.0", + "parse5": "^5.1.1", + "regenerator-runtime": "^0.13.3", + "resize-observer-polyfill": "^1.5.1", + "systemjs": "^6.3.1", + "terser": "^4.6.7", + "whatwg-fetch": "^3.0.0" + }, + "dependencies": { + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + } + } + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "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" + } + } + } + }, + "postcss": { + "version": "8.4.4", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.4.tgz", + "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==", + "dev": true, + "requires": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + } + }, + "postcss-modules": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.2.2.tgz", + "integrity": "sha512-/H08MGEmaalv/OU8j6bUKi/kZr2kqGF6huAW8m9UAgOLWtpFdhA14+gPBoymtqyv+D4MLsmqaF2zvIegdCxJXg==", + "dev": true, + "requires": { + "generic-names": "^2.0.1", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true + }, + "proc-log": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz", + "integrity": "sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "promise-all-reject-late": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", + "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", + "dev": true + }, + "promise-call-limit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz", + "integrity": "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, + "puppeteer-core": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-13.7.0.tgz", + "integrity": "sha512-rXja4vcnAzFAP1OVLq/5dWNfwBGuzcOARJ6qGV7oAZhnLmVRU8G5MsdeQEAOy332ZhkIOnn9jp15R89LKHyp2Q==", + "dev": true, + "requires": { + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.981744", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "pkg-dir": "4.2.0", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.5.0" + }, + "dependencies": { + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "dev": true, + "requires": {} + } + } + }, + "pure-rand": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.0.tgz", + "integrity": "sha512-lD2/y78q+7HqBx2SaT6OT4UcwtvXNRfEpzYEzl0EQ+9gZq2Qi3fa0HDnYPeqQwhlHJFBUhT7AO3mLU3+8bynHA==", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", + "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "raw-body": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "dev": true, + "requires": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + } + } + }, + "read-cmd-shim": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", + "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", + "dev": true + }, + "read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "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 + }, + "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" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "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.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "regexpu-core": { + "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.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": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "regjsparser": { + "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" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "requireindex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", + "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", + "dev": true + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "dev": true, + "requires": { + "global-dirs": "^0.1.1" + } + }, + "resolve-path": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", + "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", + "dev": true, + "requires": { + "http-errors": "~1.6.2", + "path-is-absolute": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "dev": true, + "requires": { + "lowercase-keys": "^2.0.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.60.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.60.2.tgz", + "integrity": "sha512-1Bgjpq61sPjgoZzuiDSGvbI1tD91giZABgjCQBKM5aYLnzjq52GoDuWVwT/cm/MCxCMPU8gqQvkj8doQ5C8Oqw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-polyfill-node": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.6.2.tgz", + "integrity": "sha512-gMCVuR0zsKq0jdBn8pSXN1Ejsc458k2QsFFvQdbHoM0Pot5hEnck+pBP/FDwFS6uAi77pD3rDTytsaUStsOMlA==", + "dev": true, + "requires": { + "@rollup/plugin-inject": "^4.0.0" + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "dependencies": { + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "terser": { + "version": "5.16.5", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.5.tgz", + "integrity": "sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + } + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "setprototypeof": { + "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": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/shady-css-scoped-element/-/shady-css-scoped-element-0.0.2.tgz", + "integrity": "sha512-Dqfl70x6JiwYDujd33ZTbtCK0t52E7+H2swdWQNSTzfsolSa6LJHnTpN4T9OpJJEq4bxuzHRLFO9RBcy/UfrMQ==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shiki": { + "version": "0.9.14", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.14.tgz", + "integrity": "sha512-uLHjjyJdNsMzF9GOF8vlOuZ8BwigiYPraMN5yjC826k8K7Xu90JQcC5GUNrzRibLgT2EOk9597I1IX+jRdA8nw==", + "dev": true, + "requires": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "sinon": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-11.1.2.tgz", + "integrity": "sha512-59237HChms4kg7/sXhiRcUzdSkKuydDeTiamT/jesUVHshBgL8XAmhgFo0GfK6RruMDM/iRSij1EybmMog9cJw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": "^7.1.2", + "@sinonjs/samsam": "^6.0.2", + "diff": "^5.0.0", + "nise": "^5.1.0", + "supports-color": "^7.2.0" + }, + "dependencies": { + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + } + } + }, + "sinon-chai": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.7.0.tgz", + "integrity": "sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==", + "dev": true, + "requires": {} + }, + "skypack": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/skypack/-/skypack-0.3.2.tgz", + "integrity": "sha512-je1pix0QYER6iHuUGbgcafRJT5TI+EGUIBfzBLMqo3Wi22I2SzB9TVHQqwKCw8pzJMuHqhVTFEHc3Ey+ra25Sw==", + "dev": true, + "requires": { + "cacache": "^15.0.0", + "cachedir": "^2.3.0", + "esinstall": "^1.0.0", + "etag": "^1.8.1", + "find-up": "^5.0.0", + "got": "^11.1.4", + "kleur": "^4.1.0", + "mkdirp": "^1.0.3", + "p-queue": "^6.2.1", + "rimraf": "^3.0.0", + "rollup": "^2.23.0", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + } + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "snowpack": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/snowpack/-/snowpack-3.8.6.tgz", + "integrity": "sha512-EZ3Y7RtTiPvxnVFTKPfkvi2PKBrprXCvOHKWQQLBkHonf+xdtG51RiNjtrRLJeCjislAlD6OoeGHUxz76ToGHw==", + "dev": true, + "requires": { + "@npmcli/arborist": "^2.6.4", + "bufferutil": "^4.0.2", + "cachedir": "^2.3.0", + "cheerio": "1.0.0-rc.10", + "chokidar": "^3.4.0", + "cli-spinners": "^2.5.0", + "compressible": "^2.0.18", + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "default-browser-id": "^2.0.0", + "detect-port": "^1.3.0", + "es-module-lexer": "^0.3.24", + "esbuild": "~0.9.0", + "esinstall": "^1.1.7", + "estree-walker": "^2.0.2", + "etag": "^1.8.1", + "execa": "^5.1.1", + "fdir": "^5.0.0", + "find-cache-dir": "^3.3.1", + "find-up": "^5.0.0", + "fsevents": "^2.3.2", + "glob": "^7.1.7", + "httpie": "^1.1.2", + "is-plain-object": "^5.0.0", + "is-reference": "^1.2.1", + "isbinaryfile": "^4.0.6", + "jsonschema": "~1.2.5", + "kleur": "^4.1.1", + "meriyah": "^3.1.6", + "mime-types": "^2.1.26", + "mkdirp": "^1.0.3", + "npm-run-path": "^4.0.1", + "open": "^8.2.1", + "pacote": "^11.3.4", + "periscopic": "^2.0.3", + "picomatch": "^2.3.0", + "postcss": "^8.3.5", + "postcss-modules": "^4.0.0", + "resolve": "^1.20.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "rollup": "~2.37.1", + "signal-exit": "^3.0.3", + "skypack": "^0.3.2", + "slash": "~3.0.0", + "source-map": "^0.7.3", + "strip-ansi": "^6.0.0", + "strip-comments": "^2.0.1", + "utf-8-validate": "^5.0.3", + "ws": "^7.3.0", + "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", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "rollup": { + "version": "2.37.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.37.1.tgz", + "integrity": "sha512-V3ojEeyGeSdrMSuhP3diBb06P+qV4gKQeanbDv+Qh/BZbhdZ7kHV0xAt8Yjk4GFshq/WjO7R4c7DFM20AwTFVQ==", + "dev": true, + "requires": { + "fsevents": "~2.1.2" + }, + "dependencies": { + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + } + } + } + } + }, + "socks": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", + "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", + "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + } + }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + }, + "source-map-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", + "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "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 + } + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "requires": { + "through": "2" + } + }, + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "requires": { + "readable-stream": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "standard-version": { + "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.6.1", + "conventional-recommended-bump": "6.1.0", + "detect-indent": "^6.0.0", + "detect-newline": "^3.1.0", + "dotgitignore": "^2.1.0", + "figures": "^3.1.0", + "find-up": "^5.0.0", + "fs-access": "^1.0.1", + "git-semver-tags": "^4.0.0", + "semver": "^7.1.1", + "stringify-package": "^1.0.1", + "yargs": "^16.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true + }, + "string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "dependencies": { + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + } + } + }, + "stringify-package": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", + "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "systemjs": { + "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.5", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.5.tgz", + "integrity": "sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + } + }, + "table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "requires": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } + }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + } + } + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true + }, + "tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "dependencies": { + "type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true + } + } + }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "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 + } + } + }, + "text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "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-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "treeverse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-1.0.4.tgz", + "integrity": "sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g==", + "dev": true + }, + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "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", + "integrity": "sha512-zKmsCQs4dZaeSKjEA7pLFDv7FHHqAFLPd0Mr//OIJvu8M+4p4bgSFJwZSEBEg3ec9W7RzRz1vi8giiX0+mheBQ==", + "dev": true + }, + "tsconfig-paths": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typedoc": { + "version": "0.21.10", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.21.10.tgz", + "integrity": "sha512-Y0wYIehkjkPfsp3pv86fp3WPHUcOf8pnQUDLwG1PqSccUSqdsv7Pz1Gd5WrTJvXQB2wO1mKlZ8qW8qMiopKyjA==", + "dev": true, + "requires": { + "glob": "^7.1.7", + "handlebars": "^4.7.7", + "lunr": "^2.3.9", + "marked": "^4.0.10", + "minimatch": "^3.0.0", + "progress": "^2.0.3", + "shiki": "^0.9.8", + "typedoc-default-themes": "^0.12.10" + } + }, + "typedoc-default-themes": { + "version": "0.12.10", + "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.12.10.tgz", + "integrity": "sha512-fIS001cAYHkyQPidWXmHuhs8usjP5XVJjWB8oZGqkTowZaz3v7g3KDZeeqE82FBrmkAnIBOY3jgy7lnPnqATbA==", + "dev": true + }, + "typedoc-plugin-markdown": { + "version": "3.10.4", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.10.4.tgz", + "integrity": "sha512-if9w7S9fXLg73AYi/EoRSEhTOZlg3I8mIP8YEmvzSE33VrNXC9/hA0nVcLEwFVJeQY7ay6z67I6kW0KIv7LjeA==", + "dev": true, + "requires": { + "handlebars": "^4.7.7" + } + }, + "typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true + }, + "typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true + }, + "ua-parser-js": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.34.tgz", + "integrity": "sha512-K9mwJm/DaB6mRLZfw6q8IMXipcrmuT6yfhYmwhAkuh+81sChuYstYA+znlgaflUPaYUa3odxKPKGw6Vw/lANew==", + "dev": true + }, + "uglify-js": { + "version": "3.14.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.4.tgz", + "integrity": "sha512-AbiSR44J0GoCeV81+oxcy/jDOElO2Bx3d0MfQCUShq7JRXaM4KtQopZsq2vFv8bCq2yMaGrw1FgygUd03RyRDA==", + "dev": true, + "optional": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "unicode-canonical-property-names-ecmascript": { + "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": "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": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "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": "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 + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "untildify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", + "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0" + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dev": true, + "requires": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "useragent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "dev": true, + "requires": { + "lru-cache": "4.1.x", + "tmp": "0.0.x" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "utf-8-validate": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", + "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", + "dev": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "v8-to-istanbul": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", + "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + } + }, + "valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + } + } + }, + "vm2": { + "version": "3.9.14", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.14.tgz", + "integrity": "sha512-HgvPHYHeQy8+QhzlFryvSteA4uQLBCOub02mgqdR+0bN/akRZ48TGB1v0aCv7ksyc0HXx16AZtMHKS38alc6TA==", + "dev": true, + "requires": { + "acorn": "^8.7.0", + "acorn-walk": "^8.2.0" + }, + "dependencies": { + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true + } + } + }, + "vscode-oniguruma": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz", + "integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==", + "dev": true + }, + "vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "dev": true + }, + "walk-up-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", + "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", + "dev": true + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "web-component-analyzer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/web-component-analyzer/-/web-component-analyzer-1.1.6.tgz", + "integrity": "sha512-1PyBkb/jijDEVE+Pnk3DTmVHD8takipdvAwvZv1V8jIidsSIJ5nhN87Gs+4dpEb1vw48yp8dnbZKkvMYJ+C0VQ==", + "dev": true, + "requires": { + "fast-glob": "^3.2.2", + "ts-simple-type": "~1.0.5", + "typescript": "^3.8.3", + "yargs": "^15.3.1" + }, + "dependencies": { + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + }, + "whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", + "dev": true + }, + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + }, + "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", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, + "wicg-inert": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/wicg-inert/-/wicg-inert-3.1.1.tgz", + "integrity": "sha512-PhBaNh8ur9Xm4Ggy4umelwNIP6pPP1bv3EaWaKqfb/QNme2rdLjm7wIInvV4WhxVHhzA4Spgw9qNSqWtB/ca2A==" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "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": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "requires": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "dependencies": { + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } + }, + "workbox-background-sync": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz", + "integrity": "sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==", + "dev": true, + "requires": { + "idb": "^7.0.1", + "workbox-core": "6.5.4" + } + }, + "workbox-broadcast-update": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz", + "integrity": "sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==", + "dev": true, + "requires": { + "workbox-core": "6.5.4" + } + }, + "workbox-build": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.4.tgz", + "integrity": "sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==", + "dev": true, + "requires": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.5.4", + "workbox-broadcast-update": "6.5.4", + "workbox-cacheable-response": "6.5.4", + "workbox-core": "6.5.4", + "workbox-expiration": "6.5.4", + "workbox-google-analytics": "6.5.4", + "workbox-navigation-preload": "6.5.4", + "workbox-precaching": "6.5.4", + "workbox-range-requests": "6.5.4", + "workbox-recipes": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4", + "workbox-streams": "6.5.4", + "workbox-sw": "6.5.4", + "workbox-window": "6.5.4" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "requires": { + "whatwg-url": "^7.0.0" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, + "workbox-cacheable-response": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz", + "integrity": "sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==", + "dev": true, + "requires": { + "workbox-core": "6.5.4" + } + }, + "workbox-cli": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-cli/-/workbox-cli-6.5.4.tgz", + "integrity": "sha512-+Cc0jYh25MofhCROZqfQkpYSAGvykyrUVekuuPaLFbJ8qxX/zzX8hRRpglfwxDwokAjz8S20oEph4s+MyQc+Yw==", + "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", + "inquirer": "^7.3.3", + "meow": "^7.1.0", + "ora": "^5.0.0", + "pretty-bytes": "^5.3.0", + "stringify-object": "^3.3.0", + "upath": "^1.2.0", + "update-notifier": "^4.1.0", + "workbox-build": "6.5.4" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^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 + }, + "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" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "workbox-core": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.4.tgz", + "integrity": "sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==", + "dev": true + }, + "workbox-expiration": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.4.tgz", + "integrity": "sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==", + "dev": true, + "requires": { + "idb": "^7.0.1", + "workbox-core": "6.5.4" + } + }, + "workbox-google-analytics": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz", + "integrity": "sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==", + "dev": true, + "requires": { + "workbox-background-sync": "6.5.4", + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "workbox-navigation-preload": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz", + "integrity": "sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==", + "dev": true, + "requires": { + "workbox-core": "6.5.4" + } + }, + "workbox-precaching": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.4.tgz", + "integrity": "sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==", + "dev": true, + "requires": { + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "workbox-range-requests": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz", + "integrity": "sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==", + "dev": true, + "requires": { + "workbox-core": "6.5.4" + } + }, + "workbox-recipes": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.4.tgz", + "integrity": "sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==", + "dev": true, + "requires": { + "workbox-cacheable-response": "6.5.4", + "workbox-core": "6.5.4", + "workbox-expiration": "6.5.4", + "workbox-precaching": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "workbox-routing": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.4.tgz", + "integrity": "sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==", + "dev": true, + "requires": { + "workbox-core": "6.5.4" + } + }, + "workbox-strategies": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.4.tgz", + "integrity": "sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==", + "dev": true, + "requires": { + "workbox-core": "6.5.4" + } + }, + "workbox-streams": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.4.tgz", + "integrity": "sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==", + "dev": true, + "requires": { + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4" + } + }, + "workbox-sw": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.4.tgz", + "integrity": "sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==", + "dev": true + }, + "workbox-window": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.4.tgz", + "integrity": "sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==", + "dev": true, + "requires": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.5.4" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", + "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", + "dev": true, + "requires": {} + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz", + "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "dependencies": { + "yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "dev": true + } + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "requires": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "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 + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "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 + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "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 + }, + "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" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "ylru": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", + "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", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/packages/open-scd/package.json b/packages/open-scd/package.json new file mode 100644 index 0000000000..c7eeb9b676 --- /dev/null +++ b/packages/open-scd/package.json @@ -0,0 +1,170 @@ +{ + "name": "open-scd", + "version": "0.33.0", + "repository": "https://github.com/openscd/open-scd.git", + "directory": "packages/open-scd", + "description": "A bottom-up substation configuration designer for projects described using SCL `IEC 61850-6` Edition 2 or greater.", + "keywords": [ + "SCL", + "substation configuration", + "IEC", + "61850-6", + "SCD", + "editor" + ], + "author": "OMICRON electronics GmbH", + "license": "Apache-2.0", + "main": "open-scd.js", + "module": "open-scd.js", + "type": "module", + "dependencies": { + "@material/mwc-dialog": "0.22.1", + "@material/mwc-drawer": "0.22.1", + "@material/mwc-fab": "0.22.1", + "@material/mwc-formfield": "0.22.1", + "@material/mwc-icon": "0.22.1", + "@material/mwc-icon-button": "0.22.1", + "@material/mwc-icon-button-toggle": "0.22.1", + "@material/mwc-linear-progress": "0.22.1", + "@material/mwc-list": "0.22.1", + "@material/mwc-menu": "0.22.1", + "@material/mwc-select": "0.22.1", + "@material/mwc-snackbar": "0.22.1", + "@material/mwc-switch": "0.22.1", + "@material/mwc-tab": "0.22.1", + "@material/mwc-tab-bar": "0.22.1", + "@material/mwc-textarea": "0.22.1", + "@material/mwc-textfield": "0.22.1", + "@material/mwc-top-app-bar-fixed": "0.22.1", + "ace-custom-element": "^1.6.5", + "lit-element": "2.5.1", + "lit-html": "1.4.1", + "lit-translate": "^1.2.1", + "marked": "^4.0.10", + "panzoom": "^9.4.2" + }, + "scripts": { + "lint:eslint": "eslint --ext .ts,.html . --ignore-path .gitignore", + "format:eslint": "eslint --ext .ts,.html . --fix --ignore-path .gitignore", + "lint:prettier": "prettier \"**/*.js\" \"**/*.ts\" --check --ignore-path .gitignore", + "format:prettier": "prettier \"**/*.js\" \"**/*.ts\" --write --ignore-path .gitignore", + "lint": "npm run lint:eslint && npm run lint:prettier", + "format": "npm run format:eslint && npm run format:prettier", + "test": "web-test-runner --coverage", + "test:snapshot": "web-test-runner --update-snapshots --coverage", + "test:manual": "web-test-runner --manual", + "test:watch": "web-test-runner --watch", + "test:unit": "web-test-runner --watch --group unit", + "test:integration": "web-test-runner --watch --group integration", + "doc:clean": "npx rimraf doc", + "doc:typedoc": "typedoc --plugin none --out doc src", + "doc:wca": "wca src --outDir doc/components", + "doc": "npm run doc:clean && npm run doc:typedoc && npm run doc:wca", + "release": "standard-version", + "release:minor": "standard-version --release-as minor", + "release:patch": "standard-version --release-as patch", + "release:major": "standard-version --release-as major", + "build": "npm run test && npm run build:notest && cp .nojekyll build/", + "build:notest": "npm run doc && snowpack build && workbox generateSW workbox-config.cjs", + "start": "snowpack dev" + }, + "devDependencies": { + "@commitlint/cli": "^13.1.0", + "@commitlint/config-conventional": "^13.1.0", + "@open-wc/eslint-config": "^4.3.0", + "@open-wc/semantic-dom-diff": "^0.19.5", + "@open-wc/testing": "^2.5.33", + "@snowpack/plugin-typescript": "^1.2.1", + "@types/marked": "^2.0.4", + "@types/node": "^16.6.1", + "@typescript-eslint/eslint-plugin": "^4.29.2", + "@typescript-eslint/parser": "^4.29.2", + "@web/dev-server-esbuild": "^0.2.16", + "@web/test-runner": "^0.13.22", + "concurrently": "^6.2.1", + "deepmerge": "^4.2.2", + "es-dev-server": "^2.1.0", + "eslint": "^7.32.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-babel": "^5.3.1", + "eslint-plugin-tsdoc": "^0.2.14", + "fast-check": "^2.19.0", + "husky": "^7.0.1", + "lint-staged": "^11.1.2", + "prettier": "^2.3.2", + "sinon": "^11.1.2", + "snowpack": "3.8.6", + "source-map": "^0.7.4", + "standard-version": "^9.3.1", + "tslib": "^2.3.1", + "typedoc": "^0.21.10", + "typedoc-plugin-markdown": "3.10.4", + "typescript": "4.3.5", + "web-component-analyzer": "^1.1.6", + "workbox-cli": "^6.2.4" + }, + "eslintConfig": { + "extends": [ + "@open-wc/eslint-config", + "eslint-config-prettier" + ] + }, + "prettier": { + "singleQuote": true, + "arrowParens": "avoid" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged", + "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" + } + }, + "lint-staged": { + "*.ts": [ + "eslint --fix", + "prettier --write" + ] + }, + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ] + }, + "standard-version": { + "types": [ + { + "type": "feat", + "section": "Features" + }, + { + "type": "fix", + "section": "Bug Fixes" + }, + { + "type": "chore", + "hidden": true + }, + { + "type": "docs", + "hidden": true + }, + { + "type": "style", + "hidden": true + }, + { + "type": "refactor", + "hidden": true + }, + { + "type": "perf", + "hidden": true + }, + { + "type": "test", + "hidden": true + } + ], + "commitUrlFormat": "https://github.com/openscd/open-scd/commits/{{hash}}" + } +} \ No newline at end of file diff --git a/public/ace/ext-searchbox.js b/packages/open-scd/public/ace/ext-searchbox.js similarity index 100% rename from public/ace/ext-searchbox.js rename to packages/open-scd/public/ace/ext-searchbox.js diff --git a/public/ace/mode-xml.js b/packages/open-scd/public/ace/mode-xml.js similarity index 100% rename from public/ace/mode-xml.js rename to packages/open-scd/public/ace/mode-xml.js diff --git a/public/ace/theme-solarized_dark.js b/packages/open-scd/public/ace/theme-solarized_dark.js similarity index 100% rename from public/ace/theme-solarized_dark.js rename to packages/open-scd/public/ace/theme-solarized_dark.js diff --git a/public/ace/theme-solarized_light.js b/packages/open-scd/public/ace/theme-solarized_light.js similarity index 100% rename from public/ace/theme-solarized_light.js rename to packages/open-scd/public/ace/theme-solarized_light.js diff --git a/public/ace/worker-xml.js b/packages/open-scd/public/ace/worker-xml.js similarity index 100% rename from public/ace/worker-xml.js rename to packages/open-scd/public/ace/worker-xml.js diff --git a/public/apple-touch-icon.png b/packages/open-scd/public/apple-touch-icon.png similarity index 100% rename from public/apple-touch-icon.png rename to packages/open-scd/public/apple-touch-icon.png diff --git a/public/css/normalize.css b/packages/open-scd/public/css/normalize.css similarity index 100% rename from public/css/normalize.css rename to packages/open-scd/public/css/normalize.css diff --git a/public/favicon-16x16.png b/packages/open-scd/public/favicon-16x16.png similarity index 100% rename from public/favicon-16x16.png rename to packages/open-scd/public/favicon-16x16.png diff --git a/public/favicon-32x32.png b/packages/open-scd/public/favicon-32x32.png similarity index 100% rename from public/favicon-32x32.png rename to packages/open-scd/public/favicon-32x32.png diff --git a/public/google/fonts/roboto-mono-v13-latin-300.ttf b/packages/open-scd/public/google/fonts/roboto-mono-v13-latin-300.ttf similarity index 100% rename from public/google/fonts/roboto-mono-v13-latin-300.ttf rename to packages/open-scd/public/google/fonts/roboto-mono-v13-latin-300.ttf diff --git a/public/google/fonts/roboto-mono-v13-latin-300.woff b/packages/open-scd/public/google/fonts/roboto-mono-v13-latin-300.woff similarity index 100% rename from public/google/fonts/roboto-mono-v13-latin-300.woff rename to packages/open-scd/public/google/fonts/roboto-mono-v13-latin-300.woff diff --git a/public/google/fonts/roboto-mono-v13-latin-300.woff2 b/packages/open-scd/public/google/fonts/roboto-mono-v13-latin-300.woff2 similarity index 100% rename from public/google/fonts/roboto-mono-v13-latin-300.woff2 rename to packages/open-scd/public/google/fonts/roboto-mono-v13-latin-300.woff2 diff --git a/public/google/fonts/roboto-mono-v13.css b/packages/open-scd/public/google/fonts/roboto-mono-v13.css similarity index 100% rename from public/google/fonts/roboto-mono-v13.css rename to packages/open-scd/public/google/fonts/roboto-mono-v13.css diff --git a/public/google/fonts/roboto-v27-latin-300.ttf b/packages/open-scd/public/google/fonts/roboto-v27-latin-300.ttf similarity index 100% rename from public/google/fonts/roboto-v27-latin-300.ttf rename to packages/open-scd/public/google/fonts/roboto-v27-latin-300.ttf diff --git a/public/google/fonts/roboto-v27-latin-300.woff b/packages/open-scd/public/google/fonts/roboto-v27-latin-300.woff similarity index 100% rename from public/google/fonts/roboto-v27-latin-300.woff rename to packages/open-scd/public/google/fonts/roboto-v27-latin-300.woff diff --git a/public/google/fonts/roboto-v27-latin-300.woff2 b/packages/open-scd/public/google/fonts/roboto-v27-latin-300.woff2 similarity index 100% rename from public/google/fonts/roboto-v27-latin-300.woff2 rename to packages/open-scd/public/google/fonts/roboto-v27-latin-300.woff2 diff --git a/public/google/fonts/roboto-v27-latin-500.ttf b/packages/open-scd/public/google/fonts/roboto-v27-latin-500.ttf similarity index 100% rename from public/google/fonts/roboto-v27-latin-500.ttf rename to packages/open-scd/public/google/fonts/roboto-v27-latin-500.ttf diff --git a/public/google/fonts/roboto-v27-latin-500.woff b/packages/open-scd/public/google/fonts/roboto-v27-latin-500.woff similarity index 100% rename from public/google/fonts/roboto-v27-latin-500.woff rename to packages/open-scd/public/google/fonts/roboto-v27-latin-500.woff diff --git a/public/google/fonts/roboto-v27-latin-500.woff2 b/packages/open-scd/public/google/fonts/roboto-v27-latin-500.woff2 similarity index 100% rename from public/google/fonts/roboto-v27-latin-500.woff2 rename to packages/open-scd/public/google/fonts/roboto-v27-latin-500.woff2 diff --git a/public/google/fonts/roboto-v27-latin-regular.ttf b/packages/open-scd/public/google/fonts/roboto-v27-latin-regular.ttf similarity index 100% rename from public/google/fonts/roboto-v27-latin-regular.ttf rename to packages/open-scd/public/google/fonts/roboto-v27-latin-regular.ttf diff --git a/public/google/fonts/roboto-v27-latin-regular.woff b/packages/open-scd/public/google/fonts/roboto-v27-latin-regular.woff similarity index 100% rename from public/google/fonts/roboto-v27-latin-regular.woff rename to packages/open-scd/public/google/fonts/roboto-v27-latin-regular.woff diff --git a/public/google/fonts/roboto-v27-latin-regular.woff2 b/packages/open-scd/public/google/fonts/roboto-v27-latin-regular.woff2 similarity index 100% rename from public/google/fonts/roboto-v27-latin-regular.woff2 rename to packages/open-scd/public/google/fonts/roboto-v27-latin-regular.woff2 diff --git a/public/google/fonts/roboto-v27.css b/packages/open-scd/public/google/fonts/roboto-v27.css similarity index 100% rename from public/google/fonts/roboto-v27.css rename to packages/open-scd/public/google/fonts/roboto-v27.css diff --git a/public/google/icons/material-icons-outlined.css b/packages/open-scd/public/google/icons/material-icons-outlined.css similarity index 100% rename from public/google/icons/material-icons-outlined.css rename to packages/open-scd/public/google/icons/material-icons-outlined.css diff --git a/public/google/icons/material-icons-outlined.woff2 b/packages/open-scd/public/google/icons/material-icons-outlined.woff2 similarity index 100% rename from public/google/icons/material-icons-outlined.woff2 rename to packages/open-scd/public/google/icons/material-icons-outlined.woff2 diff --git a/public/icon-192x192.png b/packages/open-scd/public/icon-192x192.png similarity index 100% rename from public/icon-192x192.png rename to packages/open-scd/public/icon-192x192.png diff --git a/public/icon-512x512.png b/packages/open-scd/public/icon-512x512.png similarity index 100% rename from public/icon-512x512.png rename to packages/open-scd/public/icon-512x512.png diff --git a/public/icon.svg b/packages/open-scd/public/icon.svg similarity index 100% rename from public/icon.svg rename to packages/open-scd/public/icon.svg diff --git a/public/js/plugins.js b/packages/open-scd/public/js/plugins.js similarity index 100% rename from public/js/plugins.js rename to packages/open-scd/public/js/plugins.js diff --git a/public/js/worker.js b/packages/open-scd/public/js/worker.js similarity index 100% rename from public/js/worker.js rename to packages/open-scd/public/js/worker.js diff --git a/public/js/xmlvalidate.js b/packages/open-scd/public/js/xmlvalidate.js similarity index 100% rename from public/js/xmlvalidate.js rename to packages/open-scd/public/js/xmlvalidate.js diff --git a/public/js/xmlvalidate.wasm b/packages/open-scd/public/js/xmlvalidate.wasm similarity index 100% rename from public/js/xmlvalidate.wasm rename to packages/open-scd/public/js/xmlvalidate.wasm diff --git a/public/maskable_icon.png b/packages/open-scd/public/maskable_icon.png similarity index 100% rename from public/maskable_icon.png rename to packages/open-scd/public/maskable_icon.png diff --git a/public/md/Add-DAType-from-templates.md b/packages/open-scd/public/md/Add-DAType-from-templates.md similarity index 100% rename from public/md/Add-DAType-from-templates.md rename to packages/open-scd/public/md/Add-DAType-from-templates.md diff --git a/public/md/Add-DOType-from-templates.md b/packages/open-scd/public/md/Add-DOType-from-templates.md similarity index 100% rename from public/md/Add-DOType-from-templates.md rename to packages/open-scd/public/md/Add-DOType-from-templates.md diff --git a/public/md/Add-EnumType-from-templates.md b/packages/open-scd/public/md/Add-EnumType-from-templates.md similarity index 100% rename from public/md/Add-EnumType-from-templates.md rename to packages/open-scd/public/md/Add-EnumType-from-templates.md diff --git a/public/md/Add-LNodeType-from-templates.md b/packages/open-scd/public/md/Add-LNodeType-from-templates.md similarity index 100% rename from public/md/Add-LNodeType-from-templates.md rename to packages/open-scd/public/md/Add-LNodeType-from-templates.md diff --git a/public/md/All-template-editor-wizards.md b/packages/open-scd/public/md/All-template-editor-wizards.md similarity index 100% rename from public/md/All-template-editor-wizards.md rename to packages/open-scd/public/md/All-template-editor-wizards.md diff --git a/public/md/Bay.md b/packages/open-scd/public/md/Bay.md similarity index 100% rename from public/md/Bay.md rename to packages/open-scd/public/md/Bay.md diff --git a/public/md/ClientLN.md b/packages/open-scd/public/md/ClientLN.md similarity index 100% rename from public/md/ClientLN.md rename to packages/open-scd/public/md/ClientLN.md diff --git a/public/md/Communication-Basics.md b/packages/open-scd/public/md/Communication-Basics.md similarity index 100% rename from public/md/Communication-Basics.md rename to packages/open-scd/public/md/Communication-Basics.md diff --git a/public/md/Conducting-Equipment.md b/packages/open-scd/public/md/Conducting-Equipment.md similarity index 100% rename from public/md/Conducting-Equipment.md rename to packages/open-scd/public/md/Conducting-Equipment.md diff --git a/public/md/ConnectedAP.md b/packages/open-scd/public/md/ConnectedAP.md similarity index 100% rename from public/md/ConnectedAP.md rename to packages/open-scd/public/md/ConnectedAP.md diff --git a/public/md/Create-GOOSE-Control-Blocks.md b/packages/open-scd/public/md/Create-GOOSE-Control-Blocks.md similarity index 100% rename from public/md/Create-GOOSE-Control-Blocks.md rename to packages/open-scd/public/md/Create-GOOSE-Control-Blocks.md diff --git a/public/md/Create-Report-Control-Blocks.md b/packages/open-scd/public/md/Create-Report-Control-Blocks.md similarity index 100% rename from public/md/Create-Report-Control-Blocks.md rename to packages/open-scd/public/md/Create-Report-Control-Blocks.md diff --git a/public/md/Create-Sampled-Values-Control-Blocks.md b/packages/open-scd/public/md/Create-Sampled-Values-Control-Blocks.md similarity index 100% rename from public/md/Create-Sampled-Values-Control-Blocks.md rename to packages/open-scd/public/md/Create-Sampled-Values-Control-Blocks.md diff --git a/public/md/Create-Specification-IED-from-functions.md b/packages/open-scd/public/md/Create-Specification-IED-from-functions.md similarity index 100% rename from public/md/Create-Specification-IED-from-functions.md rename to packages/open-scd/public/md/Create-Specification-IED-from-functions.md diff --git a/public/md/Data-attribute-type-DAType.md b/packages/open-scd/public/md/Data-attribute-type-DAType.md similarity index 100% rename from public/md/Data-attribute-type-DAType.md rename to packages/open-scd/public/md/Data-attribute-type-DAType.md diff --git a/public/md/Data-attribute-type-child-BDA.md b/packages/open-scd/public/md/Data-attribute-type-child-BDA.md similarity index 100% rename from public/md/Data-attribute-type-child-BDA.md rename to packages/open-scd/public/md/Data-attribute-type-child-BDA.md diff --git a/public/md/Data-object-type-DOType.md b/packages/open-scd/public/md/Data-object-type-DOType.md similarity index 100% rename from public/md/Data-object-type-DOType.md rename to packages/open-scd/public/md/Data-object-type-DOType.md diff --git a/public/md/Data-object-type-child-DA.md b/packages/open-scd/public/md/Data-object-type-child-DA.md similarity index 100% rename from public/md/Data-object-type-child-DA.md rename to packages/open-scd/public/md/Data-object-type-child-DA.md diff --git a/public/md/Data-object-type-child-SDO.md b/packages/open-scd/public/md/Data-object-type-child-SDO.md similarity index 100% rename from public/md/Data-object-type-child-SDO.md rename to packages/open-scd/public/md/Data-object-type-child-SDO.md diff --git a/public/md/DataTypeTemplates.md b/packages/open-scd/public/md/DataTypeTemplates.md similarity index 100% rename from public/md/DataTypeTemplates.md rename to packages/open-scd/public/md/DataTypeTemplates.md diff --git a/public/md/Edit-GOOSE-Control-Blocks.md b/packages/open-scd/public/md/Edit-GOOSE-Control-Blocks.md similarity index 100% rename from public/md/Edit-GOOSE-Control-Blocks.md rename to packages/open-scd/public/md/Edit-GOOSE-Control-Blocks.md diff --git a/public/md/Edit-Report-Control-Blocks.md b/packages/open-scd/public/md/Edit-Report-Control-Blocks.md similarity index 100% rename from public/md/Edit-Report-Control-Blocks.md rename to packages/open-scd/public/md/Edit-Report-Control-Blocks.md diff --git a/public/md/Edit-Sampled-Value-Control-Blocks.md b/packages/open-scd/public/md/Edit-Sampled-Value-Control-Blocks.md similarity index 100% rename from public/md/Edit-Sampled-Value-Control-Blocks.md rename to packages/open-scd/public/md/Edit-Sampled-Value-Control-Blocks.md diff --git a/public/md/Enumeration-EnumType.md b/packages/open-scd/public/md/Enumeration-EnumType.md similarity index 100% rename from public/md/Enumeration-EnumType.md rename to packages/open-scd/public/md/Enumeration-EnumType.md diff --git a/public/md/Enumeration-EnumVal.md b/packages/open-scd/public/md/Enumeration-EnumVal.md similarity index 100% rename from public/md/Enumeration-EnumVal.md rename to packages/open-scd/public/md/Enumeration-EnumVal.md diff --git a/public/md/Extensions.md b/packages/open-scd/public/md/Extensions.md similarity index 100% rename from public/md/Extensions.md rename to packages/open-scd/public/md/Extensions.md diff --git a/public/md/Function.md b/packages/open-scd/public/md/Function.md similarity index 100% rename from public/md/Function.md rename to packages/open-scd/public/md/Function.md diff --git a/public/md/Functional-Naming-Basics.md b/packages/open-scd/public/md/Functional-Naming-Basics.md similarity index 100% rename from public/md/Functional-Naming-Basics.md rename to packages/open-scd/public/md/Functional-Naming-Basics.md diff --git a/public/md/Generic-Substation-Event-Basics.md b/packages/open-scd/public/md/Generic-Substation-Event-Basics.md similarity index 100% rename from public/md/Generic-Substation-Event-Basics.md rename to packages/open-scd/public/md/Generic-Substation-Event-Basics.md diff --git a/public/md/Global-SCL-manipulation.md b/packages/open-scd/public/md/Global-SCL-manipulation.md similarity index 100% rename from public/md/Global-SCL-manipulation.md rename to packages/open-scd/public/md/Global-SCL-manipulation.md diff --git a/public/md/Guess-substation-structure.md b/packages/open-scd/public/md/Guess-substation-structure.md similarity index 100% rename from public/md/Guess-substation-structure.md rename to packages/open-scd/public/md/Guess-substation-structure.md diff --git a/public/md/Home.md b/packages/open-scd/public/md/Home.md similarity index 100% rename from public/md/Home.md rename to packages/open-scd/public/md/Home.md diff --git a/public/md/IED.md b/packages/open-scd/public/md/IED.md similarity index 100% rename from public/md/IED.md rename to packages/open-scd/public/md/IED.md diff --git a/public/md/Import-IEDs.md b/packages/open-scd/public/md/Import-IEDs.md similarity index 100% rename from public/md/Import-IEDs.md rename to packages/open-scd/public/md/Import-IEDs.md diff --git a/public/md/Install-OpenSCD.md b/packages/open-scd/public/md/Install-OpenSCD.md similarity index 100% rename from public/md/Install-OpenSCD.md rename to packages/open-scd/public/md/Install-OpenSCD.md diff --git a/public/md/Interface.md b/packages/open-scd/public/md/Interface.md similarity index 100% rename from public/md/Interface.md rename to packages/open-scd/public/md/Interface.md diff --git a/public/md/Logical-Node-Reference.md b/packages/open-scd/public/md/Logical-Node-Reference.md similarity index 100% rename from public/md/Logical-Node-Reference.md rename to packages/open-scd/public/md/Logical-Node-Reference.md diff --git a/public/md/Logical-node-type-LNodeType.md b/packages/open-scd/public/md/Logical-node-type-LNodeType.md similarity index 100% rename from public/md/Logical-node-type-LNodeType.md rename to packages/open-scd/public/md/Logical-node-type-LNodeType.md diff --git a/public/md/Logical-node-type-child-DO.md b/packages/open-scd/public/md/Logical-node-type-child-DO.md similarity index 100% rename from public/md/Logical-node-type-child-DO.md rename to packages/open-scd/public/md/Logical-node-type-child-DO.md diff --git a/public/md/Merge-functionality.md b/packages/open-scd/public/md/Merge-functionality.md similarity index 100% rename from public/md/Merge-functionality.md rename to packages/open-scd/public/md/Merge-functionality.md diff --git a/public/md/Power-Transformer.md b/packages/open-scd/public/md/Power-Transformer.md similarity index 100% rename from public/md/Power-Transformer.md rename to packages/open-scd/public/md/Power-Transformer.md diff --git a/public/md/Project-workflow.md b/packages/open-scd/public/md/Project-workflow.md similarity index 100% rename from public/md/Project-workflow.md rename to packages/open-scd/public/md/Project-workflow.md diff --git a/public/md/Report-Basics.md b/packages/open-scd/public/md/Report-Basics.md similarity index 100% rename from public/md/Report-Basics.md rename to packages/open-scd/public/md/Report-Basics.md diff --git a/public/md/Sampled-Values-Basics.md b/packages/open-scd/public/md/Sampled-Values-Basics.md similarity index 100% rename from public/md/Sampled-Values-Basics.md rename to packages/open-scd/public/md/Sampled-Values-Basics.md diff --git a/public/md/Save-project.md b/packages/open-scd/public/md/Save-project.md similarity index 100% rename from public/md/Save-project.md rename to packages/open-scd/public/md/Save-project.md diff --git a/public/md/Start-from-scratch.md b/packages/open-scd/public/md/Start-from-scratch.md similarity index 100% rename from public/md/Start-from-scratch.md rename to packages/open-scd/public/md/Start-from-scratch.md diff --git a/public/md/Start-from-template.md b/packages/open-scd/public/md/Start-from-template.md similarity index 100% rename from public/md/Start-from-template.md rename to packages/open-scd/public/md/Start-from-template.md diff --git a/public/md/Subnetwork.md b/packages/open-scd/public/md/Subnetwork.md similarity index 100% rename from public/md/Subnetwork.md rename to packages/open-scd/public/md/Subnetwork.md diff --git a/public/md/Subscribe-complete-GOOSE.md b/packages/open-scd/public/md/Subscribe-complete-GOOSE.md similarity index 100% rename from public/md/Subscribe-complete-GOOSE.md rename to packages/open-scd/public/md/Subscribe-complete-GOOSE.md diff --git a/public/md/Subscribe-complete-SMV.md b/packages/open-scd/public/md/Subscribe-complete-SMV.md similarity index 100% rename from public/md/Subscribe-complete-SMV.md rename to packages/open-scd/public/md/Subscribe-complete-SMV.md diff --git a/public/md/Subscriber-basics.md b/packages/open-scd/public/md/Subscriber-basics.md similarity index 100% rename from public/md/Subscriber-basics.md rename to packages/open-scd/public/md/Subscriber-basics.md diff --git a/public/md/Substation-Section-Basics.md b/packages/open-scd/public/md/Substation-Section-Basics.md similarity index 100% rename from public/md/Substation-Section-Basics.md rename to packages/open-scd/public/md/Substation-Section-Basics.md diff --git a/public/md/Substation.md b/packages/open-scd/public/md/Substation.md similarity index 100% rename from public/md/Substation.md rename to packages/open-scd/public/md/Substation.md diff --git a/public/md/Update-subscriber-info.md b/packages/open-scd/public/md/Update-subscriber-info.md similarity index 100% rename from public/md/Update-subscriber-info.md rename to packages/open-scd/public/md/Update-subscriber-info.md diff --git a/public/md/Validate-schema.md b/packages/open-scd/public/md/Validate-schema.md similarity index 100% rename from public/md/Validate-schema.md rename to packages/open-scd/public/md/Validate-schema.md diff --git a/public/md/Validate-template.md b/packages/open-scd/public/md/Validate-template.md similarity index 100% rename from public/md/Validate-template.md rename to packages/open-scd/public/md/Validate-template.md diff --git a/public/md/Validators.md b/packages/open-scd/public/md/Validators.md similarity index 100% rename from public/md/Validators.md rename to packages/open-scd/public/md/Validators.md diff --git a/public/md/Voltage-Level.md b/packages/open-scd/public/md/Voltage-Level.md similarity index 100% rename from public/md/Voltage-Level.md rename to packages/open-scd/public/md/Voltage-Level.md diff --git a/public/md/XML-code-editor.md b/packages/open-scd/public/md/XML-code-editor.md similarity index 100% rename from public/md/XML-code-editor.md rename to packages/open-scd/public/md/XML-code-editor.md diff --git a/public/md/_Sidebar.md b/packages/open-scd/public/md/_Sidebar.md similarity index 100% rename from public/md/_Sidebar.md rename to packages/open-scd/public/md/_Sidebar.md diff --git a/public/monochrome_icon.png b/packages/open-scd/public/monochrome_icon.png similarity index 100% rename from public/monochrome_icon.png rename to packages/open-scd/public/monochrome_icon.png diff --git a/public/mstile-144x144.png b/packages/open-scd/public/mstile-144x144.png similarity index 100% rename from public/mstile-144x144.png rename to packages/open-scd/public/mstile-144x144.png diff --git a/public/mstile-150x150.png b/packages/open-scd/public/mstile-150x150.png similarity index 100% rename from public/mstile-150x150.png rename to packages/open-scd/public/mstile-150x150.png diff --git a/public/mstile-310x150.png b/packages/open-scd/public/mstile-310x150.png similarity index 100% rename from public/mstile-310x150.png rename to packages/open-scd/public/mstile-310x150.png diff --git a/public/mstile-310x310.png b/packages/open-scd/public/mstile-310x310.png similarity index 100% rename from public/mstile-310x310.png rename to packages/open-scd/public/mstile-310x310.png diff --git a/public/mstile-70x70.png b/packages/open-scd/public/mstile-70x70.png similarity index 100% rename from public/mstile-70x70.png rename to packages/open-scd/public/mstile-70x70.png diff --git a/public/xml/IEC_61850-7-2_2007B3.nsd b/packages/open-scd/public/xml/IEC_61850-7-2_2007B3.nsd similarity index 100% rename from public/xml/IEC_61850-7-2_2007B3.nsd rename to packages/open-scd/public/xml/IEC_61850-7-2_2007B3.nsd diff --git a/public/xml/IEC_61850-7-3_2007B3.nsd b/packages/open-scd/public/xml/IEC_61850-7-3_2007B3.nsd similarity index 100% rename from public/xml/IEC_61850-7-3_2007B3.nsd rename to packages/open-scd/public/xml/IEC_61850-7-3_2007B3.nsd diff --git a/public/xml/IEC_61850-7-420_2019A4.nsd b/packages/open-scd/public/xml/IEC_61850-7-420_2019A4.nsd similarity index 100% rename from public/xml/IEC_61850-7-420_2019A4.nsd rename to packages/open-scd/public/xml/IEC_61850-7-420_2019A4.nsd diff --git a/public/xml/IEC_61850-7-4_2007B3.nsd b/packages/open-scd/public/xml/IEC_61850-7-4_2007B3.nsd similarity index 100% rename from public/xml/IEC_61850-7-4_2007B3.nsd rename to packages/open-scd/public/xml/IEC_61850-7-4_2007B3.nsd diff --git a/public/xml/IEC_61850-8-1_2003A2.nsd b/packages/open-scd/public/xml/IEC_61850-8-1_2003A2.nsd similarity index 100% rename from public/xml/IEC_61850-8-1_2003A2.nsd rename to packages/open-scd/public/xml/IEC_61850-8-1_2003A2.nsd diff --git a/public/xml/templates.scd b/packages/open-scd/public/xml/templates.scd similarity index 100% rename from public/xml/templates.scd rename to packages/open-scd/public/xml/templates.scd diff --git a/snowpack.config.mjs b/packages/open-scd/snowpack.config.mjs similarity index 100% rename from snowpack.config.mjs rename to packages/open-scd/snowpack.config.mjs diff --git a/src/Editing.ts b/packages/open-scd/src/Editing.ts similarity index 100% rename from src/Editing.ts rename to packages/open-scd/src/Editing.ts diff --git a/src/Hosting.ts b/packages/open-scd/src/Hosting.ts similarity index 100% rename from src/Hosting.ts rename to packages/open-scd/src/Hosting.ts diff --git a/src/Logging.ts b/packages/open-scd/src/Logging.ts similarity index 100% rename from src/Logging.ts rename to packages/open-scd/src/Logging.ts diff --git a/src/Plugging.ts b/packages/open-scd/src/Plugging.ts similarity index 100% rename from src/Plugging.ts rename to packages/open-scd/src/Plugging.ts diff --git a/src/Setting.ts b/packages/open-scd/src/Setting.ts similarity index 100% rename from src/Setting.ts rename to packages/open-scd/src/Setting.ts diff --git a/src/Waiting.ts b/packages/open-scd/src/Waiting.ts similarity index 100% rename from src/Waiting.ts rename to packages/open-scd/src/Waiting.ts diff --git a/src/WizardDivider.ts b/packages/open-scd/src/WizardDivider.ts similarity index 100% rename from src/WizardDivider.ts rename to packages/open-scd/src/WizardDivider.ts diff --git a/src/Wizarding.ts b/packages/open-scd/src/Wizarding.ts similarity index 100% rename from src/Wizarding.ts rename to packages/open-scd/src/Wizarding.ts diff --git a/src/action-icon.ts b/packages/open-scd/src/action-icon.ts similarity index 100% rename from src/action-icon.ts rename to packages/open-scd/src/action-icon.ts diff --git a/src/action-pane.ts b/packages/open-scd/src/action-pane.ts similarity index 100% rename from src/action-pane.ts rename to packages/open-scd/src/action-pane.ts diff --git a/src/editors/Cleanup.ts b/packages/open-scd/src/editors/Cleanup.ts similarity index 100% rename from src/editors/Cleanup.ts rename to packages/open-scd/src/editors/Cleanup.ts diff --git a/src/editors/Communication.ts b/packages/open-scd/src/editors/Communication.ts similarity index 100% rename from src/editors/Communication.ts rename to packages/open-scd/src/editors/Communication.ts diff --git a/src/editors/GooseSubscriberDataBinding.ts b/packages/open-scd/src/editors/GooseSubscriberDataBinding.ts similarity index 100% rename from src/editors/GooseSubscriberDataBinding.ts rename to packages/open-scd/src/editors/GooseSubscriberDataBinding.ts diff --git a/src/editors/GooseSubscriberLaterBinding.ts b/packages/open-scd/src/editors/GooseSubscriberLaterBinding.ts similarity index 100% rename from src/editors/GooseSubscriberLaterBinding.ts rename to packages/open-scd/src/editors/GooseSubscriberLaterBinding.ts diff --git a/src/editors/GooseSubscriberMessageBinding.ts b/packages/open-scd/src/editors/GooseSubscriberMessageBinding.ts similarity index 100% rename from src/editors/GooseSubscriberMessageBinding.ts rename to packages/open-scd/src/editors/GooseSubscriberMessageBinding.ts diff --git a/src/editors/IED.ts b/packages/open-scd/src/editors/IED.ts similarity index 100% rename from src/editors/IED.ts rename to packages/open-scd/src/editors/IED.ts diff --git a/src/editors/Protocol104.ts b/packages/open-scd/src/editors/Protocol104.ts similarity index 100% rename from src/editors/Protocol104.ts rename to packages/open-scd/src/editors/Protocol104.ts diff --git a/src/editors/Publisher.ts b/packages/open-scd/src/editors/Publisher.ts similarity index 100% rename from src/editors/Publisher.ts rename to packages/open-scd/src/editors/Publisher.ts diff --git a/src/editors/SMVSubscriberDataBinding.ts b/packages/open-scd/src/editors/SMVSubscriberDataBinding.ts similarity index 100% rename from src/editors/SMVSubscriberDataBinding.ts rename to packages/open-scd/src/editors/SMVSubscriberDataBinding.ts diff --git a/src/editors/SMVSubscriberLaterBinding.ts b/packages/open-scd/src/editors/SMVSubscriberLaterBinding.ts similarity index 100% rename from src/editors/SMVSubscriberLaterBinding.ts rename to packages/open-scd/src/editors/SMVSubscriberLaterBinding.ts diff --git a/src/editors/SMVSubscriberMessageBinding.ts b/packages/open-scd/src/editors/SMVSubscriberMessageBinding.ts similarity index 100% rename from src/editors/SMVSubscriberMessageBinding.ts rename to packages/open-scd/src/editors/SMVSubscriberMessageBinding.ts diff --git a/src/editors/SingleLineDiagram.ts b/packages/open-scd/src/editors/SingleLineDiagram.ts similarity index 100% rename from src/editors/SingleLineDiagram.ts rename to packages/open-scd/src/editors/SingleLineDiagram.ts diff --git a/src/editors/Substation.ts b/packages/open-scd/src/editors/Substation.ts similarity index 100% rename from src/editors/Substation.ts rename to packages/open-scd/src/editors/Substation.ts diff --git a/src/editors/Templates.ts b/packages/open-scd/src/editors/Templates.ts similarity index 100% rename from src/editors/Templates.ts rename to packages/open-scd/src/editors/Templates.ts diff --git a/src/editors/cleanup/control-blocks-container.ts b/packages/open-scd/src/editors/cleanup/control-blocks-container.ts similarity index 100% rename from src/editors/cleanup/control-blocks-container.ts rename to packages/open-scd/src/editors/cleanup/control-blocks-container.ts diff --git a/src/editors/cleanup/datasets-container.ts b/packages/open-scd/src/editors/cleanup/datasets-container.ts similarity index 100% rename from src/editors/cleanup/datasets-container.ts rename to packages/open-scd/src/editors/cleanup/datasets-container.ts diff --git a/src/editors/cleanup/datatypes-container.ts b/packages/open-scd/src/editors/cleanup/datatypes-container.ts similarity index 100% rename from src/editors/cleanup/datatypes-container.ts rename to packages/open-scd/src/editors/cleanup/datatypes-container.ts diff --git a/src/editors/cleanup/foundation.ts b/packages/open-scd/src/editors/cleanup/foundation.ts similarity index 100% rename from src/editors/cleanup/foundation.ts rename to packages/open-scd/src/editors/cleanup/foundation.ts diff --git a/src/editors/communication/connectedap-editor.ts b/packages/open-scd/src/editors/communication/connectedap-editor.ts similarity index 100% rename from src/editors/communication/connectedap-editor.ts rename to packages/open-scd/src/editors/communication/connectedap-editor.ts diff --git a/src/editors/communication/gse-editor.ts b/packages/open-scd/src/editors/communication/gse-editor.ts similarity index 100% rename from src/editors/communication/gse-editor.ts rename to packages/open-scd/src/editors/communication/gse-editor.ts diff --git a/src/editors/communication/smv-editor.ts b/packages/open-scd/src/editors/communication/smv-editor.ts similarity index 100% rename from src/editors/communication/smv-editor.ts rename to packages/open-scd/src/editors/communication/smv-editor.ts diff --git a/src/editors/communication/subnetwork-editor.ts b/packages/open-scd/src/editors/communication/subnetwork-editor.ts similarity index 100% rename from src/editors/communication/subnetwork-editor.ts rename to packages/open-scd/src/editors/communication/subnetwork-editor.ts diff --git a/src/editors/ied/access-point-container.ts b/packages/open-scd/src/editors/ied/access-point-container.ts similarity index 100% rename from src/editors/ied/access-point-container.ts rename to packages/open-scd/src/editors/ied/access-point-container.ts diff --git a/src/editors/ied/da-container.ts b/packages/open-scd/src/editors/ied/da-container.ts similarity index 100% rename from src/editors/ied/da-container.ts rename to packages/open-scd/src/editors/ied/da-container.ts diff --git a/src/editors/ied/da-wizard.ts b/packages/open-scd/src/editors/ied/da-wizard.ts similarity index 100% rename from src/editors/ied/da-wizard.ts rename to packages/open-scd/src/editors/ied/da-wizard.ts diff --git a/src/editors/ied/do-container.ts b/packages/open-scd/src/editors/ied/do-container.ts similarity index 100% rename from src/editors/ied/do-container.ts rename to packages/open-scd/src/editors/ied/do-container.ts diff --git a/src/editors/ied/do-wizard.ts b/packages/open-scd/src/editors/ied/do-wizard.ts similarity index 100% rename from src/editors/ied/do-wizard.ts rename to packages/open-scd/src/editors/ied/do-wizard.ts diff --git a/src/editors/ied/element-path.ts b/packages/open-scd/src/editors/ied/element-path.ts similarity index 100% rename from src/editors/ied/element-path.ts rename to packages/open-scd/src/editors/ied/element-path.ts diff --git a/src/editors/ied/foundation.ts b/packages/open-scd/src/editors/ied/foundation.ts similarity index 100% rename from src/editors/ied/foundation.ts rename to packages/open-scd/src/editors/ied/foundation.ts diff --git a/src/editors/ied/ied-container.ts b/packages/open-scd/src/editors/ied/ied-container.ts similarity index 100% rename from src/editors/ied/ied-container.ts rename to packages/open-scd/src/editors/ied/ied-container.ts diff --git a/src/editors/ied/ldevice-container.ts b/packages/open-scd/src/editors/ied/ldevice-container.ts similarity index 100% rename from src/editors/ied/ldevice-container.ts rename to packages/open-scd/src/editors/ied/ldevice-container.ts diff --git a/src/editors/ied/ln-container.ts b/packages/open-scd/src/editors/ied/ln-container.ts similarity index 100% rename from src/editors/ied/ln-container.ts rename to packages/open-scd/src/editors/ied/ln-container.ts diff --git a/src/editors/ied/server-container.ts b/packages/open-scd/src/editors/ied/server-container.ts similarity index 100% rename from src/editors/ied/server-container.ts rename to packages/open-scd/src/editors/ied/server-container.ts diff --git a/src/editors/protocol104/base-container.ts b/packages/open-scd/src/editors/protocol104/base-container.ts similarity index 100% rename from src/editors/protocol104/base-container.ts rename to packages/open-scd/src/editors/protocol104/base-container.ts diff --git a/src/editors/protocol104/connectedap-editor.ts b/packages/open-scd/src/editors/protocol104/connectedap-editor.ts similarity index 100% rename from src/editors/protocol104/connectedap-editor.ts rename to packages/open-scd/src/editors/protocol104/connectedap-editor.ts diff --git a/src/editors/protocol104/doi-container.ts b/packages/open-scd/src/editors/protocol104/doi-container.ts similarity index 100% rename from src/editors/protocol104/doi-container.ts rename to packages/open-scd/src/editors/protocol104/doi-container.ts diff --git a/src/editors/protocol104/foundation/actions.ts b/packages/open-scd/src/editors/protocol104/foundation/actions.ts similarity index 100% rename from src/editors/protocol104/foundation/actions.ts rename to packages/open-scd/src/editors/protocol104/foundation/actions.ts diff --git a/src/editors/protocol104/foundation/cdc.ts b/packages/open-scd/src/editors/protocol104/foundation/cdc.ts similarity index 100% rename from src/editors/protocol104/foundation/cdc.ts rename to packages/open-scd/src/editors/protocol104/foundation/cdc.ts diff --git a/src/editors/protocol104/foundation/foundation.ts b/packages/open-scd/src/editors/protocol104/foundation/foundation.ts similarity index 100% rename from src/editors/protocol104/foundation/foundation.ts rename to packages/open-scd/src/editors/protocol104/foundation/foundation.ts diff --git a/src/editors/protocol104/foundation/p-types.ts b/packages/open-scd/src/editors/protocol104/foundation/p-types.ts similarity index 100% rename from src/editors/protocol104/foundation/p-types.ts rename to packages/open-scd/src/editors/protocol104/foundation/p-types.ts diff --git a/src/editors/protocol104/foundation/private.ts b/packages/open-scd/src/editors/protocol104/foundation/private.ts similarity index 100% rename from src/editors/protocol104/foundation/private.ts rename to packages/open-scd/src/editors/protocol104/foundation/private.ts diff --git a/src/editors/protocol104/ied-container.ts b/packages/open-scd/src/editors/protocol104/ied-container.ts similarity index 100% rename from src/editors/protocol104/ied-container.ts rename to packages/open-scd/src/editors/protocol104/ied-container.ts diff --git a/src/editors/protocol104/network-container.ts b/packages/open-scd/src/editors/protocol104/network-container.ts similarity index 100% rename from src/editors/protocol104/network-container.ts rename to packages/open-scd/src/editors/protocol104/network-container.ts diff --git a/src/editors/protocol104/subnetwork-container.ts b/packages/open-scd/src/editors/protocol104/subnetwork-container.ts similarity index 100% rename from src/editors/protocol104/subnetwork-container.ts rename to packages/open-scd/src/editors/protocol104/subnetwork-container.ts diff --git a/src/editors/protocol104/values-container.ts b/packages/open-scd/src/editors/protocol104/values-container.ts similarity index 100% rename from src/editors/protocol104/values-container.ts rename to packages/open-scd/src/editors/protocol104/values-container.ts diff --git a/src/editors/protocol104/wizards/address.ts b/packages/open-scd/src/editors/protocol104/wizards/address.ts similarity index 100% rename from src/editors/protocol104/wizards/address.ts rename to packages/open-scd/src/editors/protocol104/wizards/address.ts diff --git a/src/editors/protocol104/wizards/connectedap.ts b/packages/open-scd/src/editors/protocol104/wizards/connectedap.ts similarity index 100% rename from src/editors/protocol104/wizards/connectedap.ts rename to packages/open-scd/src/editors/protocol104/wizards/connectedap.ts diff --git a/src/editors/protocol104/wizards/createAddresses.ts b/packages/open-scd/src/editors/protocol104/wizards/createAddresses.ts similarity index 100% rename from src/editors/protocol104/wizards/createAddresses.ts rename to packages/open-scd/src/editors/protocol104/wizards/createAddresses.ts diff --git a/src/editors/protocol104/wizards/doi.ts b/packages/open-scd/src/editors/protocol104/wizards/doi.ts similarity index 100% rename from src/editors/protocol104/wizards/doi.ts rename to packages/open-scd/src/editors/protocol104/wizards/doi.ts diff --git a/src/editors/protocol104/wizards/logiclink.ts b/packages/open-scd/src/editors/protocol104/wizards/logiclink.ts similarity index 100% rename from src/editors/protocol104/wizards/logiclink.ts rename to packages/open-scd/src/editors/protocol104/wizards/logiclink.ts diff --git a/src/editors/protocol104/wizards/redundancygroup.ts b/packages/open-scd/src/editors/protocol104/wizards/redundancygroup.ts similarity index 100% rename from src/editors/protocol104/wizards/redundancygroup.ts rename to packages/open-scd/src/editors/protocol104/wizards/redundancygroup.ts diff --git a/src/editors/protocol104/wizards/selectDo.ts b/packages/open-scd/src/editors/protocol104/wizards/selectDo.ts similarity index 100% rename from src/editors/protocol104/wizards/selectDo.ts rename to packages/open-scd/src/editors/protocol104/wizards/selectDo.ts diff --git a/src/editors/protocol104/wizards/subnetwork.ts b/packages/open-scd/src/editors/protocol104/wizards/subnetwork.ts similarity index 100% rename from src/editors/protocol104/wizards/subnetwork.ts rename to packages/open-scd/src/editors/protocol104/wizards/subnetwork.ts diff --git a/src/editors/publisher/data-set-editor.ts b/packages/open-scd/src/editors/publisher/data-set-editor.ts similarity index 100% rename from src/editors/publisher/data-set-editor.ts rename to packages/open-scd/src/editors/publisher/data-set-editor.ts diff --git a/src/editors/publisher/data-set-element-editor.ts b/packages/open-scd/src/editors/publisher/data-set-element-editor.ts similarity index 100% rename from src/editors/publisher/data-set-element-editor.ts rename to packages/open-scd/src/editors/publisher/data-set-element-editor.ts diff --git a/src/editors/publisher/foundation.ts b/packages/open-scd/src/editors/publisher/foundation.ts similarity index 100% rename from src/editors/publisher/foundation.ts rename to packages/open-scd/src/editors/publisher/foundation.ts diff --git a/src/editors/publisher/gse-control-editor.ts b/packages/open-scd/src/editors/publisher/gse-control-editor.ts similarity index 100% rename from src/editors/publisher/gse-control-editor.ts rename to packages/open-scd/src/editors/publisher/gse-control-editor.ts diff --git a/src/editors/publisher/gse-control-element-editor.ts b/packages/open-scd/src/editors/publisher/gse-control-element-editor.ts similarity index 100% rename from src/editors/publisher/gse-control-element-editor.ts rename to packages/open-scd/src/editors/publisher/gse-control-element-editor.ts diff --git a/src/editors/publisher/report-control-editor.ts b/packages/open-scd/src/editors/publisher/report-control-editor.ts similarity index 100% rename from src/editors/publisher/report-control-editor.ts rename to packages/open-scd/src/editors/publisher/report-control-editor.ts diff --git a/src/editors/publisher/report-control-element-editor.ts b/packages/open-scd/src/editors/publisher/report-control-element-editor.ts similarity index 100% rename from src/editors/publisher/report-control-element-editor.ts rename to packages/open-scd/src/editors/publisher/report-control-element-editor.ts diff --git a/src/editors/publisher/sampled-value-control-editor.ts b/packages/open-scd/src/editors/publisher/sampled-value-control-editor.ts similarity index 100% rename from src/editors/publisher/sampled-value-control-editor.ts rename to packages/open-scd/src/editors/publisher/sampled-value-control-editor.ts diff --git a/src/editors/publisher/sampled-value-control-element-editor.ts b/packages/open-scd/src/editors/publisher/sampled-value-control-element-editor.ts similarity index 100% rename from src/editors/publisher/sampled-value-control-element-editor.ts rename to packages/open-scd/src/editors/publisher/sampled-value-control-element-editor.ts diff --git a/src/editors/singlelinediagram/foundation.ts b/packages/open-scd/src/editors/singlelinediagram/foundation.ts similarity index 100% rename from src/editors/singlelinediagram/foundation.ts rename to packages/open-scd/src/editors/singlelinediagram/foundation.ts diff --git a/src/editors/singlelinediagram/ortho-connector.ts b/packages/open-scd/src/editors/singlelinediagram/ortho-connector.ts similarity index 100% rename from src/editors/singlelinediagram/ortho-connector.ts rename to packages/open-scd/src/editors/singlelinediagram/ortho-connector.ts diff --git a/src/editors/singlelinediagram/sld-drawing.ts b/packages/open-scd/src/editors/singlelinediagram/sld-drawing.ts similarity index 100% rename from src/editors/singlelinediagram/sld-drawing.ts rename to packages/open-scd/src/editors/singlelinediagram/sld-drawing.ts diff --git a/src/editors/singlelinediagram/wizards/bay.ts b/packages/open-scd/src/editors/singlelinediagram/wizards/bay.ts similarity index 100% rename from src/editors/singlelinediagram/wizards/bay.ts rename to packages/open-scd/src/editors/singlelinediagram/wizards/bay.ts diff --git a/src/editors/singlelinediagram/wizards/conductingequipment.ts b/packages/open-scd/src/editors/singlelinediagram/wizards/conductingequipment.ts similarity index 100% rename from src/editors/singlelinediagram/wizards/conductingequipment.ts rename to packages/open-scd/src/editors/singlelinediagram/wizards/conductingequipment.ts diff --git a/src/editors/singlelinediagram/wizards/foundation.ts b/packages/open-scd/src/editors/singlelinediagram/wizards/foundation.ts similarity index 100% rename from src/editors/singlelinediagram/wizards/foundation.ts rename to packages/open-scd/src/editors/singlelinediagram/wizards/foundation.ts diff --git a/src/editors/singlelinediagram/wizards/powertransformer.ts b/packages/open-scd/src/editors/singlelinediagram/wizards/powertransformer.ts similarity index 100% rename from src/editors/singlelinediagram/wizards/powertransformer.ts rename to packages/open-scd/src/editors/singlelinediagram/wizards/powertransformer.ts diff --git a/src/editors/singlelinediagram/wizards/wizard-library.ts b/packages/open-scd/src/editors/singlelinediagram/wizards/wizard-library.ts similarity index 100% rename from src/editors/singlelinediagram/wizards/wizard-library.ts rename to packages/open-scd/src/editors/singlelinediagram/wizards/wizard-library.ts diff --git a/src/editors/subscription/fcda-binding-list.ts b/packages/open-scd/src/editors/subscription/fcda-binding-list.ts similarity index 100% rename from src/editors/subscription/fcda-binding-list.ts rename to packages/open-scd/src/editors/subscription/fcda-binding-list.ts diff --git a/src/editors/subscription/foundation.ts b/packages/open-scd/src/editors/subscription/foundation.ts similarity index 100% rename from src/editors/subscription/foundation.ts rename to packages/open-scd/src/editors/subscription/foundation.ts diff --git a/src/editors/subscription/goose/foundation.ts b/packages/open-scd/src/editors/subscription/goose/foundation.ts similarity index 100% rename from src/editors/subscription/goose/foundation.ts rename to packages/open-scd/src/editors/subscription/goose/foundation.ts diff --git a/src/editors/subscription/goose/goose-list.ts b/packages/open-scd/src/editors/subscription/goose/goose-list.ts similarity index 100% rename from src/editors/subscription/goose/goose-list.ts rename to packages/open-scd/src/editors/subscription/goose/goose-list.ts diff --git a/src/editors/subscription/goose/subscriber-list.ts b/packages/open-scd/src/editors/subscription/goose/subscriber-list.ts similarity index 100% rename from src/editors/subscription/goose/subscriber-list.ts rename to packages/open-scd/src/editors/subscription/goose/subscriber-list.ts diff --git a/src/editors/subscription/ied-list.ts b/packages/open-scd/src/editors/subscription/ied-list.ts similarity index 100% rename from src/editors/subscription/ied-list.ts rename to packages/open-scd/src/editors/subscription/ied-list.ts diff --git a/src/editors/subscription/later-binding/ext-ref-later-binding-list.ts b/packages/open-scd/src/editors/subscription/later-binding/ext-ref-later-binding-list.ts similarity index 100% rename from src/editors/subscription/later-binding/ext-ref-later-binding-list.ts rename to packages/open-scd/src/editors/subscription/later-binding/ext-ref-later-binding-list.ts diff --git a/src/editors/subscription/later-binding/ext-ref-ln-binding-list.ts b/packages/open-scd/src/editors/subscription/later-binding/ext-ref-ln-binding-list.ts similarity index 100% rename from src/editors/subscription/later-binding/ext-ref-ln-binding-list.ts rename to packages/open-scd/src/editors/subscription/later-binding/ext-ref-ln-binding-list.ts diff --git a/src/editors/subscription/later-binding/foundation.ts b/packages/open-scd/src/editors/subscription/later-binding/foundation.ts similarity index 100% rename from src/editors/subscription/later-binding/foundation.ts rename to packages/open-scd/src/editors/subscription/later-binding/foundation.ts diff --git a/src/editors/subscription/sampledvalues/foundation.ts b/packages/open-scd/src/editors/subscription/sampledvalues/foundation.ts similarity index 100% rename from src/editors/subscription/sampledvalues/foundation.ts rename to packages/open-scd/src/editors/subscription/sampledvalues/foundation.ts diff --git a/src/editors/subscription/sampledvalues/smv-list.ts b/packages/open-scd/src/editors/subscription/sampledvalues/smv-list.ts similarity index 100% rename from src/editors/subscription/sampledvalues/smv-list.ts rename to packages/open-scd/src/editors/subscription/sampledvalues/smv-list.ts diff --git a/src/editors/subscription/sampledvalues/subscriber-list.ts b/packages/open-scd/src/editors/subscription/sampledvalues/subscriber-list.ts similarity index 100% rename from src/editors/subscription/sampledvalues/subscriber-list.ts rename to packages/open-scd/src/editors/subscription/sampledvalues/subscriber-list.ts diff --git a/src/editors/substation/bay-editor.ts b/packages/open-scd/src/editors/substation/bay-editor.ts similarity index 100% rename from src/editors/substation/bay-editor.ts rename to packages/open-scd/src/editors/substation/bay-editor.ts diff --git a/src/editors/substation/conducting-equipment-editor.ts b/packages/open-scd/src/editors/substation/conducting-equipment-editor.ts similarity index 100% rename from src/editors/substation/conducting-equipment-editor.ts rename to packages/open-scd/src/editors/substation/conducting-equipment-editor.ts diff --git a/src/editors/substation/eq-function-editor.ts b/packages/open-scd/src/editors/substation/eq-function-editor.ts similarity index 100% rename from src/editors/substation/eq-function-editor.ts rename to packages/open-scd/src/editors/substation/eq-function-editor.ts diff --git a/src/editors/substation/eq-sub-function-editor.ts b/packages/open-scd/src/editors/substation/eq-sub-function-editor.ts similarity index 100% rename from src/editors/substation/eq-sub-function-editor.ts rename to packages/open-scd/src/editors/substation/eq-sub-function-editor.ts diff --git a/src/editors/substation/foundation.ts b/packages/open-scd/src/editors/substation/foundation.ts similarity index 100% rename from src/editors/substation/foundation.ts rename to packages/open-scd/src/editors/substation/foundation.ts diff --git a/src/editors/substation/function-editor.ts b/packages/open-scd/src/editors/substation/function-editor.ts similarity index 100% rename from src/editors/substation/function-editor.ts rename to packages/open-scd/src/editors/substation/function-editor.ts diff --git a/src/editors/substation/general-equipment-editor.ts b/packages/open-scd/src/editors/substation/general-equipment-editor.ts similarity index 100% rename from src/editors/substation/general-equipment-editor.ts rename to packages/open-scd/src/editors/substation/general-equipment-editor.ts diff --git a/src/editors/substation/guess-wizard.ts b/packages/open-scd/src/editors/substation/guess-wizard.ts similarity index 100% rename from src/editors/substation/guess-wizard.ts rename to packages/open-scd/src/editors/substation/guess-wizard.ts diff --git a/src/editors/substation/ied-editor.ts b/packages/open-scd/src/editors/substation/ied-editor.ts similarity index 100% rename from src/editors/substation/ied-editor.ts rename to packages/open-scd/src/editors/substation/ied-editor.ts diff --git a/src/editors/substation/l-node-editor.ts b/packages/open-scd/src/editors/substation/l-node-editor.ts similarity index 100% rename from src/editors/substation/l-node-editor.ts rename to packages/open-scd/src/editors/substation/l-node-editor.ts diff --git a/src/editors/substation/line-editor.ts b/packages/open-scd/src/editors/substation/line-editor.ts similarity index 100% rename from src/editors/substation/line-editor.ts rename to packages/open-scd/src/editors/substation/line-editor.ts diff --git a/src/editors/substation/powertransformer-editor.ts b/packages/open-scd/src/editors/substation/powertransformer-editor.ts similarity index 100% rename from src/editors/substation/powertransformer-editor.ts rename to packages/open-scd/src/editors/substation/powertransformer-editor.ts diff --git a/src/editors/substation/process-editor.ts b/packages/open-scd/src/editors/substation/process-editor.ts similarity index 100% rename from src/editors/substation/process-editor.ts rename to packages/open-scd/src/editors/substation/process-editor.ts diff --git a/src/editors/substation/sub-equipment-editor.ts b/packages/open-scd/src/editors/substation/sub-equipment-editor.ts similarity index 100% rename from src/editors/substation/sub-equipment-editor.ts rename to packages/open-scd/src/editors/substation/sub-equipment-editor.ts diff --git a/src/editors/substation/sub-function-editor.ts b/packages/open-scd/src/editors/substation/sub-function-editor.ts similarity index 100% rename from src/editors/substation/sub-function-editor.ts rename to packages/open-scd/src/editors/substation/sub-function-editor.ts diff --git a/src/editors/substation/substation-editor.ts b/packages/open-scd/src/editors/substation/substation-editor.ts similarity index 100% rename from src/editors/substation/substation-editor.ts rename to packages/open-scd/src/editors/substation/substation-editor.ts diff --git a/src/editors/substation/tapchanger-editor.ts b/packages/open-scd/src/editors/substation/tapchanger-editor.ts similarity index 100% rename from src/editors/substation/tapchanger-editor.ts rename to packages/open-scd/src/editors/substation/tapchanger-editor.ts diff --git a/src/editors/substation/transformer-winding-editor.ts b/packages/open-scd/src/editors/substation/transformer-winding-editor.ts similarity index 100% rename from src/editors/substation/transformer-winding-editor.ts rename to packages/open-scd/src/editors/substation/transformer-winding-editor.ts diff --git a/src/editors/substation/voltage-level-editor.ts b/packages/open-scd/src/editors/substation/voltage-level-editor.ts similarity index 100% rename from src/editors/substation/voltage-level-editor.ts rename to packages/open-scd/src/editors/substation/voltage-level-editor.ts diff --git a/src/editors/substation/zeroline-pane.ts b/packages/open-scd/src/editors/substation/zeroline-pane.ts similarity index 100% rename from src/editors/substation/zeroline-pane.ts rename to packages/open-scd/src/editors/substation/zeroline-pane.ts diff --git a/src/editors/templates/datype-wizards.ts b/packages/open-scd/src/editors/templates/datype-wizards.ts similarity index 100% rename from src/editors/templates/datype-wizards.ts rename to packages/open-scd/src/editors/templates/datype-wizards.ts diff --git a/src/editors/templates/dotype-wizards.ts b/packages/open-scd/src/editors/templates/dotype-wizards.ts similarity index 100% rename from src/editors/templates/dotype-wizards.ts rename to packages/open-scd/src/editors/templates/dotype-wizards.ts diff --git a/src/editors/templates/enumtype-wizard.ts b/packages/open-scd/src/editors/templates/enumtype-wizard.ts similarity index 100% rename from src/editors/templates/enumtype-wizard.ts rename to packages/open-scd/src/editors/templates/enumtype-wizard.ts diff --git a/src/editors/templates/foundation.ts b/packages/open-scd/src/editors/templates/foundation.ts similarity index 100% rename from src/editors/templates/foundation.ts rename to packages/open-scd/src/editors/templates/foundation.ts diff --git a/src/editors/templates/lnodetype-wizard.ts b/packages/open-scd/src/editors/templates/lnodetype-wizard.ts similarity index 100% rename from src/editors/templates/lnodetype-wizard.ts rename to packages/open-scd/src/editors/templates/lnodetype-wizard.ts diff --git a/src/filtered-list.ts b/packages/open-scd/src/filtered-list.ts similarity index 100% rename from src/filtered-list.ts rename to packages/open-scd/src/filtered-list.ts diff --git a/src/finder-list.ts b/packages/open-scd/src/finder-list.ts similarity index 100% rename from src/finder-list.ts rename to packages/open-scd/src/finder-list.ts diff --git a/src/foundation.ts b/packages/open-scd/src/foundation.ts similarity index 100% rename from src/foundation.ts rename to packages/open-scd/src/foundation.ts diff --git a/src/foundation/compare.ts b/packages/open-scd/src/foundation/compare.ts similarity index 100% rename from src/foundation/compare.ts rename to packages/open-scd/src/foundation/compare.ts diff --git a/src/foundation/dai.ts b/packages/open-scd/src/foundation/dai.ts similarity index 100% rename from src/foundation/dai.ts rename to packages/open-scd/src/foundation/dai.ts diff --git a/src/foundation/generators.ts b/packages/open-scd/src/foundation/generators.ts similarity index 100% rename from src/foundation/generators.ts rename to packages/open-scd/src/foundation/generators.ts diff --git a/src/foundation/ied.ts b/packages/open-scd/src/foundation/ied.ts similarity index 100% rename from src/foundation/ied.ts rename to packages/open-scd/src/foundation/ied.ts diff --git a/src/foundation/nsdoc.ts b/packages/open-scd/src/foundation/nsdoc.ts similarity index 100% rename from src/foundation/nsdoc.ts rename to packages/open-scd/src/foundation/nsdoc.ts diff --git a/src/foundation/scl.ts b/packages/open-scd/src/foundation/scl.ts similarity index 100% rename from src/foundation/scl.ts rename to packages/open-scd/src/foundation/scl.ts diff --git a/src/icons/compare.ts b/packages/open-scd/src/icons/compare.ts similarity index 100% rename from src/icons/compare.ts rename to packages/open-scd/src/icons/compare.ts diff --git a/src/icons/icons.ts b/packages/open-scd/src/icons/icons.ts similarity index 100% rename from src/icons/icons.ts rename to packages/open-scd/src/icons/icons.ts diff --git a/src/icons/ied-icons.ts b/packages/open-scd/src/icons/ied-icons.ts similarity index 100% rename from src/icons/ied-icons.ts rename to packages/open-scd/src/icons/ied-icons.ts diff --git a/src/icons/lnode.ts b/packages/open-scd/src/icons/lnode.ts similarity index 100% rename from src/icons/lnode.ts rename to packages/open-scd/src/icons/lnode.ts diff --git a/src/menu/CompareIED.ts b/packages/open-scd/src/menu/CompareIED.ts similarity index 100% rename from src/menu/CompareIED.ts rename to packages/open-scd/src/menu/CompareIED.ts diff --git a/src/menu/ExportCommunication.ts b/packages/open-scd/src/menu/ExportCommunication.ts similarity index 100% rename from src/menu/ExportCommunication.ts rename to packages/open-scd/src/menu/ExportCommunication.ts diff --git a/src/menu/Help.ts b/packages/open-scd/src/menu/Help.ts similarity index 100% rename from src/menu/Help.ts rename to packages/open-scd/src/menu/Help.ts diff --git a/src/menu/ImportIEDs.ts b/packages/open-scd/src/menu/ImportIEDs.ts similarity index 100% rename from src/menu/ImportIEDs.ts rename to packages/open-scd/src/menu/ImportIEDs.ts diff --git a/src/menu/Merge.ts b/packages/open-scd/src/menu/Merge.ts similarity index 100% rename from src/menu/Merge.ts rename to packages/open-scd/src/menu/Merge.ts diff --git a/src/menu/NewProject.ts b/packages/open-scd/src/menu/NewProject.ts similarity index 100% rename from src/menu/NewProject.ts rename to packages/open-scd/src/menu/NewProject.ts diff --git a/src/menu/OpenProject.ts b/packages/open-scd/src/menu/OpenProject.ts similarity index 100% rename from src/menu/OpenProject.ts rename to packages/open-scd/src/menu/OpenProject.ts diff --git a/src/menu/SaveProject.ts b/packages/open-scd/src/menu/SaveProject.ts similarity index 100% rename from src/menu/SaveProject.ts rename to packages/open-scd/src/menu/SaveProject.ts diff --git a/src/menu/SclHistory.ts b/packages/open-scd/src/menu/SclHistory.ts similarity index 100% rename from src/menu/SclHistory.ts rename to packages/open-scd/src/menu/SclHistory.ts diff --git a/src/menu/SubscriberInfo.ts b/packages/open-scd/src/menu/SubscriberInfo.ts similarity index 100% rename from src/menu/SubscriberInfo.ts rename to packages/open-scd/src/menu/SubscriberInfo.ts diff --git a/src/menu/UpdateDescriptionABB.ts b/packages/open-scd/src/menu/UpdateDescriptionABB.ts similarity index 100% rename from src/menu/UpdateDescriptionABB.ts rename to packages/open-scd/src/menu/UpdateDescriptionABB.ts diff --git a/src/menu/UpdateDescriptionSEL.ts b/packages/open-scd/src/menu/UpdateDescriptionSEL.ts similarity index 100% rename from src/menu/UpdateDescriptionSEL.ts rename to packages/open-scd/src/menu/UpdateDescriptionSEL.ts diff --git a/src/menu/UpdateSubstation.ts b/packages/open-scd/src/menu/UpdateSubstation.ts similarity index 100% rename from src/menu/UpdateSubstation.ts rename to packages/open-scd/src/menu/UpdateSubstation.ts diff --git a/src/menu/VirtualTemplateIED.ts b/packages/open-scd/src/menu/VirtualTemplateIED.ts similarity index 100% rename from src/menu/VirtualTemplateIED.ts rename to packages/open-scd/src/menu/VirtualTemplateIED.ts diff --git a/src/menu/virtualtemplateied/foundation.ts b/packages/open-scd/src/menu/virtualtemplateied/foundation.ts similarity index 100% rename from src/menu/virtualtemplateied/foundation.ts rename to packages/open-scd/src/menu/virtualtemplateied/foundation.ts diff --git a/src/open-scd.ts b/packages/open-scd/src/open-scd.ts similarity index 100% rename from src/open-scd.ts rename to packages/open-scd/src/open-scd.ts diff --git a/src/oscd-filter-button.ts b/packages/open-scd/src/oscd-filter-button.ts similarity index 100% rename from src/oscd-filter-button.ts rename to packages/open-scd/src/oscd-filter-button.ts diff --git a/src/plain-compare-list.ts b/packages/open-scd/src/plain-compare-list.ts similarity index 100% rename from src/plain-compare-list.ts rename to packages/open-scd/src/plain-compare-list.ts diff --git a/src/schemas.ts b/packages/open-scd/src/schemas.ts similarity index 100% rename from src/schemas.ts rename to packages/open-scd/src/schemas.ts diff --git a/src/themes.ts b/packages/open-scd/src/themes.ts similarity index 100% rename from src/themes.ts rename to packages/open-scd/src/themes.ts diff --git a/src/translations/de.ts b/packages/open-scd/src/translations/de.ts similarity index 100% rename from src/translations/de.ts rename to packages/open-scd/src/translations/de.ts diff --git a/src/translations/en.ts b/packages/open-scd/src/translations/en.ts similarity index 100% rename from src/translations/en.ts rename to packages/open-scd/src/translations/en.ts diff --git a/src/translations/loader.ts b/packages/open-scd/src/translations/loader.ts similarity index 100% rename from src/translations/loader.ts rename to packages/open-scd/src/translations/loader.ts diff --git a/src/validators/ValidateSchema.ts b/packages/open-scd/src/validators/ValidateSchema.ts similarity index 100% rename from src/validators/ValidateSchema.ts rename to packages/open-scd/src/validators/ValidateSchema.ts diff --git a/src/validators/ValidateTemplates.ts b/packages/open-scd/src/validators/ValidateTemplates.ts similarity index 100% rename from src/validators/ValidateTemplates.ts rename to packages/open-scd/src/validators/ValidateTemplates.ts diff --git a/src/validators/templates/dabda.ts b/packages/open-scd/src/validators/templates/dabda.ts similarity index 100% rename from src/validators/templates/dabda.ts rename to packages/open-scd/src/validators/templates/dabda.ts diff --git a/src/validators/templates/datype.ts b/packages/open-scd/src/validators/templates/datype.ts similarity index 100% rename from src/validators/templates/datype.ts rename to packages/open-scd/src/validators/templates/datype.ts diff --git a/src/validators/templates/dosdo.ts b/packages/open-scd/src/validators/templates/dosdo.ts similarity index 100% rename from src/validators/templates/dosdo.ts rename to packages/open-scd/src/validators/templates/dosdo.ts diff --git a/src/validators/templates/dotype.ts b/packages/open-scd/src/validators/templates/dotype.ts similarity index 100% rename from src/validators/templates/dotype.ts rename to packages/open-scd/src/validators/templates/dotype.ts diff --git a/src/validators/templates/foundation.ts b/packages/open-scd/src/validators/templates/foundation.ts similarity index 100% rename from src/validators/templates/foundation.ts rename to packages/open-scd/src/validators/templates/foundation.ts diff --git a/src/validators/templates/lnodetype.ts b/packages/open-scd/src/validators/templates/lnodetype.ts similarity index 100% rename from src/validators/templates/lnodetype.ts rename to packages/open-scd/src/validators/templates/lnodetype.ts diff --git a/src/wizard-checkbox.ts b/packages/open-scd/src/wizard-checkbox.ts similarity index 100% rename from src/wizard-checkbox.ts rename to packages/open-scd/src/wizard-checkbox.ts diff --git a/src/wizard-dialog.ts b/packages/open-scd/src/wizard-dialog.ts similarity index 100% rename from src/wizard-dialog.ts rename to packages/open-scd/src/wizard-dialog.ts diff --git a/src/wizard-select.ts b/packages/open-scd/src/wizard-select.ts similarity index 100% rename from src/wizard-select.ts rename to packages/open-scd/src/wizard-select.ts diff --git a/src/wizard-textfield.ts b/packages/open-scd/src/wizard-textfield.ts similarity index 100% rename from src/wizard-textfield.ts rename to packages/open-scd/src/wizard-textfield.ts diff --git a/src/wizards.ts b/packages/open-scd/src/wizards.ts similarity index 100% rename from src/wizards.ts rename to packages/open-scd/src/wizards.ts diff --git a/src/wizards/abstractda.ts b/packages/open-scd/src/wizards/abstractda.ts similarity index 100% rename from src/wizards/abstractda.ts rename to packages/open-scd/src/wizards/abstractda.ts diff --git a/src/wizards/address.ts b/packages/open-scd/src/wizards/address.ts similarity index 100% rename from src/wizards/address.ts rename to packages/open-scd/src/wizards/address.ts diff --git a/src/wizards/bay.ts b/packages/open-scd/src/wizards/bay.ts similarity index 100% rename from src/wizards/bay.ts rename to packages/open-scd/src/wizards/bay.ts diff --git a/src/wizards/bda.ts b/packages/open-scd/src/wizards/bda.ts similarity index 100% rename from src/wizards/bda.ts rename to packages/open-scd/src/wizards/bda.ts diff --git a/src/wizards/clientln.ts b/packages/open-scd/src/wizards/clientln.ts similarity index 100% rename from src/wizards/clientln.ts rename to packages/open-scd/src/wizards/clientln.ts diff --git a/src/wizards/commmap-wizards.ts b/packages/open-scd/src/wizards/commmap-wizards.ts similarity index 100% rename from src/wizards/commmap-wizards.ts rename to packages/open-scd/src/wizards/commmap-wizards.ts diff --git a/src/wizards/conductingequipment.ts b/packages/open-scd/src/wizards/conductingequipment.ts similarity index 100% rename from src/wizards/conductingequipment.ts rename to packages/open-scd/src/wizards/conductingequipment.ts diff --git a/src/wizards/connectedap.ts b/packages/open-scd/src/wizards/connectedap.ts similarity index 100% rename from src/wizards/connectedap.ts rename to packages/open-scd/src/wizards/connectedap.ts diff --git a/src/wizards/connectivitynode.ts b/packages/open-scd/src/wizards/connectivitynode.ts similarity index 100% rename from src/wizards/connectivitynode.ts rename to packages/open-scd/src/wizards/connectivitynode.ts diff --git a/src/wizards/controlwithiedname.ts b/packages/open-scd/src/wizards/controlwithiedname.ts similarity index 100% rename from src/wizards/controlwithiedname.ts rename to packages/open-scd/src/wizards/controlwithiedname.ts diff --git a/src/wizards/da.ts b/packages/open-scd/src/wizards/da.ts similarity index 100% rename from src/wizards/da.ts rename to packages/open-scd/src/wizards/da.ts diff --git a/src/wizards/dai.ts b/packages/open-scd/src/wizards/dai.ts similarity index 100% rename from src/wizards/dai.ts rename to packages/open-scd/src/wizards/dai.ts diff --git a/src/wizards/dataset.ts b/packages/open-scd/src/wizards/dataset.ts similarity index 100% rename from src/wizards/dataset.ts rename to packages/open-scd/src/wizards/dataset.ts diff --git a/src/wizards/eqfunction.ts b/packages/open-scd/src/wizards/eqfunction.ts similarity index 100% rename from src/wizards/eqfunction.ts rename to packages/open-scd/src/wizards/eqfunction.ts diff --git a/src/wizards/eqsubfunction.ts b/packages/open-scd/src/wizards/eqsubfunction.ts similarity index 100% rename from src/wizards/eqsubfunction.ts rename to packages/open-scd/src/wizards/eqsubfunction.ts diff --git a/src/wizards/fcda.ts b/packages/open-scd/src/wizards/fcda.ts similarity index 100% rename from src/wizards/fcda.ts rename to packages/open-scd/src/wizards/fcda.ts diff --git a/src/wizards/foundation/actions.ts b/packages/open-scd/src/wizards/foundation/actions.ts similarity index 100% rename from src/wizards/foundation/actions.ts rename to packages/open-scd/src/wizards/foundation/actions.ts diff --git a/src/wizards/foundation/dai-field-type.ts b/packages/open-scd/src/wizards/foundation/dai-field-type.ts similarity index 100% rename from src/wizards/foundation/dai-field-type.ts rename to packages/open-scd/src/wizards/foundation/dai-field-type.ts diff --git a/src/wizards/foundation/enums.ts b/packages/open-scd/src/wizards/foundation/enums.ts similarity index 100% rename from src/wizards/foundation/enums.ts rename to packages/open-scd/src/wizards/foundation/enums.ts diff --git a/src/wizards/foundation/finder.ts b/packages/open-scd/src/wizards/foundation/finder.ts similarity index 100% rename from src/wizards/foundation/finder.ts rename to packages/open-scd/src/wizards/foundation/finder.ts diff --git a/src/wizards/foundation/limits.ts b/packages/open-scd/src/wizards/foundation/limits.ts similarity index 100% rename from src/wizards/foundation/limits.ts rename to packages/open-scd/src/wizards/foundation/limits.ts diff --git a/src/wizards/foundation/p-types.ts b/packages/open-scd/src/wizards/foundation/p-types.ts similarity index 100% rename from src/wizards/foundation/p-types.ts rename to packages/open-scd/src/wizards/foundation/p-types.ts diff --git a/src/wizards/foundation/references.ts b/packages/open-scd/src/wizards/foundation/references.ts similarity index 100% rename from src/wizards/foundation/references.ts rename to packages/open-scd/src/wizards/foundation/references.ts diff --git a/src/wizards/foundation/scl.ts b/packages/open-scd/src/wizards/foundation/scl.ts similarity index 100% rename from src/wizards/foundation/scl.ts rename to packages/open-scd/src/wizards/foundation/scl.ts diff --git a/src/wizards/function.ts b/packages/open-scd/src/wizards/function.ts similarity index 100% rename from src/wizards/function.ts rename to packages/open-scd/src/wizards/function.ts diff --git a/src/wizards/generalEquipment.ts b/packages/open-scd/src/wizards/generalEquipment.ts similarity index 100% rename from src/wizards/generalEquipment.ts rename to packages/open-scd/src/wizards/generalEquipment.ts diff --git a/src/wizards/gse.ts b/packages/open-scd/src/wizards/gse.ts similarity index 100% rename from src/wizards/gse.ts rename to packages/open-scd/src/wizards/gse.ts diff --git a/src/wizards/gsecontrol.ts b/packages/open-scd/src/wizards/gsecontrol.ts similarity index 100% rename from src/wizards/gsecontrol.ts rename to packages/open-scd/src/wizards/gsecontrol.ts diff --git a/src/wizards/ied.ts b/packages/open-scd/src/wizards/ied.ts similarity index 100% rename from src/wizards/ied.ts rename to packages/open-scd/src/wizards/ied.ts diff --git a/src/wizards/line.ts b/packages/open-scd/src/wizards/line.ts similarity index 100% rename from src/wizards/line.ts rename to packages/open-scd/src/wizards/line.ts diff --git a/src/wizards/lnode.ts b/packages/open-scd/src/wizards/lnode.ts similarity index 100% rename from src/wizards/lnode.ts rename to packages/open-scd/src/wizards/lnode.ts diff --git a/src/wizards/optfields.ts b/packages/open-scd/src/wizards/optfields.ts similarity index 100% rename from src/wizards/optfields.ts rename to packages/open-scd/src/wizards/optfields.ts diff --git a/src/wizards/powertransformer.ts b/packages/open-scd/src/wizards/powertransformer.ts similarity index 100% rename from src/wizards/powertransformer.ts rename to packages/open-scd/src/wizards/powertransformer.ts diff --git a/src/wizards/process.ts b/packages/open-scd/src/wizards/process.ts similarity index 100% rename from src/wizards/process.ts rename to packages/open-scd/src/wizards/process.ts diff --git a/src/wizards/reportcontrol.ts b/packages/open-scd/src/wizards/reportcontrol.ts similarity index 100% rename from src/wizards/reportcontrol.ts rename to packages/open-scd/src/wizards/reportcontrol.ts diff --git a/src/wizards/sampledvaluecontrol.ts b/packages/open-scd/src/wizards/sampledvaluecontrol.ts similarity index 100% rename from src/wizards/sampledvaluecontrol.ts rename to packages/open-scd/src/wizards/sampledvaluecontrol.ts diff --git a/src/wizards/service-GSEControl.ts b/packages/open-scd/src/wizards/service-GSEControl.ts similarity index 100% rename from src/wizards/service-GSEControl.ts rename to packages/open-scd/src/wizards/service-GSEControl.ts diff --git a/src/wizards/service-clientServer-configurations.ts b/packages/open-scd/src/wizards/service-clientServer-configurations.ts similarity index 100% rename from src/wizards/service-clientServer-configurations.ts rename to packages/open-scd/src/wizards/service-clientServer-configurations.ts diff --git a/src/wizards/service-log-settingsgroup.ts b/packages/open-scd/src/wizards/service-log-settingsgroup.ts similarity index 100% rename from src/wizards/service-log-settingsgroup.ts rename to packages/open-scd/src/wizards/service-log-settingsgroup.ts diff --git a/src/wizards/service-networking.ts b/packages/open-scd/src/wizards/service-networking.ts similarity index 100% rename from src/wizards/service-networking.ts rename to packages/open-scd/src/wizards/service-networking.ts diff --git a/src/wizards/service-report-configurations.ts b/packages/open-scd/src/wizards/service-report-configurations.ts similarity index 100% rename from src/wizards/service-report-configurations.ts rename to packages/open-scd/src/wizards/service-report-configurations.ts diff --git a/src/wizards/service-sampled-values.ts b/packages/open-scd/src/wizards/service-sampled-values.ts similarity index 100% rename from src/wizards/service-sampled-values.ts rename to packages/open-scd/src/wizards/service-sampled-values.ts diff --git a/src/wizards/services.ts b/packages/open-scd/src/wizards/services.ts similarity index 100% rename from src/wizards/services.ts rename to packages/open-scd/src/wizards/services.ts diff --git a/src/wizards/smv.ts b/packages/open-scd/src/wizards/smv.ts similarity index 100% rename from src/wizards/smv.ts rename to packages/open-scd/src/wizards/smv.ts diff --git a/src/wizards/smvopts.ts b/packages/open-scd/src/wizards/smvopts.ts similarity index 100% rename from src/wizards/smvopts.ts rename to packages/open-scd/src/wizards/smvopts.ts diff --git a/src/wizards/subequipment.ts b/packages/open-scd/src/wizards/subequipment.ts similarity index 100% rename from src/wizards/subequipment.ts rename to packages/open-scd/src/wizards/subequipment.ts diff --git a/src/wizards/subfunction.ts b/packages/open-scd/src/wizards/subfunction.ts similarity index 100% rename from src/wizards/subfunction.ts rename to packages/open-scd/src/wizards/subfunction.ts diff --git a/src/wizards/subnetwork.ts b/packages/open-scd/src/wizards/subnetwork.ts similarity index 100% rename from src/wizards/subnetwork.ts rename to packages/open-scd/src/wizards/subnetwork.ts diff --git a/src/wizards/substation.ts b/packages/open-scd/src/wizards/substation.ts similarity index 100% rename from src/wizards/substation.ts rename to packages/open-scd/src/wizards/substation.ts diff --git a/src/wizards/tapchanger.ts b/packages/open-scd/src/wizards/tapchanger.ts similarity index 100% rename from src/wizards/tapchanger.ts rename to packages/open-scd/src/wizards/tapchanger.ts diff --git a/src/wizards/terminal.ts b/packages/open-scd/src/wizards/terminal.ts similarity index 100% rename from src/wizards/terminal.ts rename to packages/open-scd/src/wizards/terminal.ts diff --git a/src/wizards/transformerWinding.ts b/packages/open-scd/src/wizards/transformerWinding.ts similarity index 100% rename from src/wizards/transformerWinding.ts rename to packages/open-scd/src/wizards/transformerWinding.ts diff --git a/src/wizards/trgops.ts b/packages/open-scd/src/wizards/trgops.ts similarity index 100% rename from src/wizards/trgops.ts rename to packages/open-scd/src/wizards/trgops.ts diff --git a/src/wizards/voltagelevel.ts b/packages/open-scd/src/wizards/voltagelevel.ts similarity index 100% rename from src/wizards/voltagelevel.ts rename to packages/open-scd/src/wizards/voltagelevel.ts diff --git a/src/wizards/wizard-library.ts b/packages/open-scd/src/wizards/wizard-library.ts similarity index 100% rename from src/wizards/wizard-library.ts rename to packages/open-scd/src/wizards/wizard-library.ts diff --git a/sw.js b/packages/open-scd/sw.js similarity index 100% rename from sw.js rename to packages/open-scd/sw.js diff --git a/test/foundation.ts b/packages/open-scd/test/foundation.ts similarity index 100% rename from test/foundation.ts rename to packages/open-scd/test/foundation.ts diff --git a/test/integration/Editing.test.ts b/packages/open-scd/test/integration/Editing.test.ts similarity index 100% rename from test/integration/Editing.test.ts rename to packages/open-scd/test/integration/Editing.test.ts diff --git a/test/integration/Setting.test.ts b/packages/open-scd/test/integration/Setting.test.ts similarity index 100% rename from test/integration/Setting.test.ts rename to packages/open-scd/test/integration/Setting.test.ts diff --git a/test/integration/__snapshots__/Setting.test.snap.js b/packages/open-scd/test/integration/__snapshots__/Setting.test.snap.js similarity index 100% rename from test/integration/__snapshots__/Setting.test.snap.js rename to packages/open-scd/test/integration/__snapshots__/Setting.test.snap.js diff --git a/test/integration/__snapshots__/open-scd.test.snap.js b/packages/open-scd/test/integration/__snapshots__/open-scd.test.snap.js similarity index 100% rename from test/integration/__snapshots__/open-scd.test.snap.js rename to packages/open-scd/test/integration/__snapshots__/open-scd.test.snap.js diff --git a/test/integration/editors/GooseSubscriberDataBinding.test.ts b/packages/open-scd/test/integration/editors/GooseSubscriberDataBinding.test.ts similarity index 100% rename from test/integration/editors/GooseSubscriberDataBinding.test.ts rename to packages/open-scd/test/integration/editors/GooseSubscriberDataBinding.test.ts diff --git a/test/integration/editors/GooseSubscriberLaterBinding.test.ts b/packages/open-scd/test/integration/editors/GooseSubscriberLaterBinding.test.ts similarity index 100% rename from test/integration/editors/GooseSubscriberLaterBinding.test.ts rename to packages/open-scd/test/integration/editors/GooseSubscriberLaterBinding.test.ts diff --git a/test/integration/editors/GooseSubscriberMessageBinding.test.ts b/packages/open-scd/test/integration/editors/GooseSubscriberMessageBinding.test.ts similarity index 100% rename from test/integration/editors/GooseSubscriberMessageBinding.test.ts rename to packages/open-scd/test/integration/editors/GooseSubscriberMessageBinding.test.ts diff --git a/test/integration/editors/IED.test.ts b/packages/open-scd/test/integration/editors/IED.test.ts similarity index 100% rename from test/integration/editors/IED.test.ts rename to packages/open-scd/test/integration/editors/IED.test.ts diff --git a/test/integration/editors/Protocol104.test.ts b/packages/open-scd/test/integration/editors/Protocol104.test.ts similarity index 100% rename from test/integration/editors/Protocol104.test.ts rename to packages/open-scd/test/integration/editors/Protocol104.test.ts diff --git a/test/integration/editors/SMVSubscriberDataBinding.test.ts b/packages/open-scd/test/integration/editors/SMVSubscriberDataBinding.test.ts similarity index 100% rename from test/integration/editors/SMVSubscriberDataBinding.test.ts rename to packages/open-scd/test/integration/editors/SMVSubscriberDataBinding.test.ts diff --git a/test/integration/editors/SMVSubscriberLaterBinding.test.ts b/packages/open-scd/test/integration/editors/SMVSubscriberLaterBinding.test.ts similarity index 100% rename from test/integration/editors/SMVSubscriberLaterBinding.test.ts rename to packages/open-scd/test/integration/editors/SMVSubscriberLaterBinding.test.ts diff --git a/test/integration/editors/SMVSubscriberMessageBinding.test.ts b/packages/open-scd/test/integration/editors/SMVSubscriberMessageBinding.test.ts similarity index 100% rename from test/integration/editors/SMVSubscriberMessageBinding.test.ts rename to packages/open-scd/test/integration/editors/SMVSubscriberMessageBinding.test.ts diff --git a/test/integration/editors/Substation.test.ts b/packages/open-scd/test/integration/editors/Substation.test.ts similarity index 100% rename from test/integration/editors/Substation.test.ts rename to packages/open-scd/test/integration/editors/Substation.test.ts diff --git a/test/integration/editors/__snapshots__/Cleanup.test.snap.js b/packages/open-scd/test/integration/editors/__snapshots__/Cleanup.test.snap.js similarity index 100% rename from test/integration/editors/__snapshots__/Cleanup.test.snap.js rename to packages/open-scd/test/integration/editors/__snapshots__/Cleanup.test.snap.js diff --git a/test/integration/editors/__snapshots__/GooseSubscriberLaterBinding.test.snap.js b/packages/open-scd/test/integration/editors/__snapshots__/GooseSubscriberLaterBinding.test.snap.js similarity index 100% rename from test/integration/editors/__snapshots__/GooseSubscriberLaterBinding.test.snap.js rename to packages/open-scd/test/integration/editors/__snapshots__/GooseSubscriberLaterBinding.test.snap.js diff --git a/test/integration/editors/__snapshots__/GooseSubscriberMessageBinding.test.snap.js b/packages/open-scd/test/integration/editors/__snapshots__/GooseSubscriberMessageBinding.test.snap.js similarity index 100% rename from test/integration/editors/__snapshots__/GooseSubscriberMessageBinding.test.snap.js rename to packages/open-scd/test/integration/editors/__snapshots__/GooseSubscriberMessageBinding.test.snap.js diff --git a/test/integration/editors/__snapshots__/IED.test.snap.js b/packages/open-scd/test/integration/editors/__snapshots__/IED.test.snap.js similarity index 100% rename from test/integration/editors/__snapshots__/IED.test.snap.js rename to packages/open-scd/test/integration/editors/__snapshots__/IED.test.snap.js diff --git a/test/integration/editors/__snapshots__/Protocol104.test.snap.js b/packages/open-scd/test/integration/editors/__snapshots__/Protocol104.test.snap.js similarity index 100% rename from test/integration/editors/__snapshots__/Protocol104.test.snap.js rename to packages/open-scd/test/integration/editors/__snapshots__/Protocol104.test.snap.js diff --git a/test/integration/editors/__snapshots__/SMVSubscriberLaterBinding.test.snap.js b/packages/open-scd/test/integration/editors/__snapshots__/SMVSubscriberLaterBinding.test.snap.js similarity index 100% rename from test/integration/editors/__snapshots__/SMVSubscriberLaterBinding.test.snap.js rename to packages/open-scd/test/integration/editors/__snapshots__/SMVSubscriberLaterBinding.test.snap.js diff --git a/test/integration/editors/__snapshots__/SMVSubscriberMessageBinding.test.snap.js b/packages/open-scd/test/integration/editors/__snapshots__/SMVSubscriberMessageBinding.test.snap.js similarity index 100% rename from test/integration/editors/__snapshots__/SMVSubscriberMessageBinding.test.snap.js rename to packages/open-scd/test/integration/editors/__snapshots__/SMVSubscriberMessageBinding.test.snap.js diff --git a/test/integration/editors/__snapshots__/Substation.test.snap.js b/packages/open-scd/test/integration/editors/__snapshots__/Substation.test.snap.js similarity index 100% rename from test/integration/editors/__snapshots__/Substation.test.snap.js rename to packages/open-scd/test/integration/editors/__snapshots__/Substation.test.snap.js diff --git a/test/integration/editors/cleanup/__snapshots__/control-blocks-container.test.snap.js b/packages/open-scd/test/integration/editors/cleanup/__snapshots__/control-blocks-container.test.snap.js similarity index 100% rename from test/integration/editors/cleanup/__snapshots__/control-blocks-container.test.snap.js rename to packages/open-scd/test/integration/editors/cleanup/__snapshots__/control-blocks-container.test.snap.js diff --git a/test/integration/editors/cleanup/__snapshots__/datasets-container.test.snap.js b/packages/open-scd/test/integration/editors/cleanup/__snapshots__/datasets-container.test.snap.js similarity index 100% rename from test/integration/editors/cleanup/__snapshots__/datasets-container.test.snap.js rename to packages/open-scd/test/integration/editors/cleanup/__snapshots__/datasets-container.test.snap.js diff --git a/test/integration/editors/cleanup/__snapshots__/datatypes-container.test.snap.js b/packages/open-scd/test/integration/editors/cleanup/__snapshots__/datatypes-container.test.snap.js similarity index 100% rename from test/integration/editors/cleanup/__snapshots__/datatypes-container.test.snap.js rename to packages/open-scd/test/integration/editors/cleanup/__snapshots__/datatypes-container.test.snap.js diff --git a/test/integration/editors/cleanup/control-blocks-container.test.ts b/packages/open-scd/test/integration/editors/cleanup/control-blocks-container.test.ts similarity index 100% rename from test/integration/editors/cleanup/control-blocks-container.test.ts rename to packages/open-scd/test/integration/editors/cleanup/control-blocks-container.test.ts diff --git a/test/integration/editors/cleanup/datasets-container.test.ts b/packages/open-scd/test/integration/editors/cleanup/datasets-container.test.ts similarity index 100% rename from test/integration/editors/cleanup/datasets-container.test.ts rename to packages/open-scd/test/integration/editors/cleanup/datasets-container.test.ts diff --git a/test/integration/editors/cleanup/datatypes-container.test.ts b/packages/open-scd/test/integration/editors/cleanup/datatypes-container.test.ts similarity index 100% rename from test/integration/editors/cleanup/datatypes-container.test.ts rename to packages/open-scd/test/integration/editors/cleanup/datatypes-container.test.ts diff --git a/test/integration/editors/communication/Communication.test.ts b/packages/open-scd/test/integration/editors/communication/Communication.test.ts similarity index 100% rename from test/integration/editors/communication/Communication.test.ts rename to packages/open-scd/test/integration/editors/communication/Communication.test.ts diff --git a/test/integration/editors/communication/__snapshots__/Communication.test.snap.js b/packages/open-scd/test/integration/editors/communication/__snapshots__/Communication.test.snap.js similarity index 100% rename from test/integration/editors/communication/__snapshots__/Communication.test.snap.js rename to packages/open-scd/test/integration/editors/communication/__snapshots__/Communication.test.snap.js diff --git a/test/integration/editors/communication/connectedap-editor-wizarding-editing.test.ts b/packages/open-scd/test/integration/editors/communication/connectedap-editor-wizarding-editing.test.ts similarity index 100% rename from test/integration/editors/communication/connectedap-editor-wizarding-editing.test.ts rename to packages/open-scd/test/integration/editors/communication/connectedap-editor-wizarding-editing.test.ts diff --git a/test/integration/editors/communication/gse-editor-wizarding-editing.test.ts b/packages/open-scd/test/integration/editors/communication/gse-editor-wizarding-editing.test.ts similarity index 100% rename from test/integration/editors/communication/gse-editor-wizarding-editing.test.ts rename to packages/open-scd/test/integration/editors/communication/gse-editor-wizarding-editing.test.ts diff --git a/test/integration/editors/communication/smv-editor-wizarding-editing.test.ts b/packages/open-scd/test/integration/editors/communication/smv-editor-wizarding-editing.test.ts similarity index 100% rename from test/integration/editors/communication/smv-editor-wizarding-editing.test.ts rename to packages/open-scd/test/integration/editors/communication/smv-editor-wizarding-editing.test.ts diff --git a/test/integration/editors/communication/subnetwork-editor-wizarding-editing.test.ts b/packages/open-scd/test/integration/editors/communication/subnetwork-editor-wizarding-editing.test.ts similarity index 100% rename from test/integration/editors/communication/subnetwork-editor-wizarding-editing.test.ts rename to packages/open-scd/test/integration/editors/communication/subnetwork-editor-wizarding-editing.test.ts diff --git a/test/integration/editors/communication/subnetwork-editor-wizarding.test.ts b/packages/open-scd/test/integration/editors/communication/subnetwork-editor-wizarding.test.ts similarity index 100% rename from test/integration/editors/communication/subnetwork-editor-wizarding.test.ts rename to packages/open-scd/test/integration/editors/communication/subnetwork-editor-wizarding.test.ts diff --git a/test/integration/editors/substation/__snapshots__/bay-editor-wizarding.test.snap.js b/packages/open-scd/test/integration/editors/substation/__snapshots__/bay-editor-wizarding.test.snap.js similarity index 100% rename from test/integration/editors/substation/__snapshots__/bay-editor-wizarding.test.snap.js rename to packages/open-scd/test/integration/editors/substation/__snapshots__/bay-editor-wizarding.test.snap.js diff --git a/test/integration/editors/substation/__snapshots__/conducting-equipment-editor-wizarding.test.snap.js b/packages/open-scd/test/integration/editors/substation/__snapshots__/conducting-equipment-editor-wizarding.test.snap.js similarity index 100% rename from test/integration/editors/substation/__snapshots__/conducting-equipment-editor-wizarding.test.snap.js rename to packages/open-scd/test/integration/editors/substation/__snapshots__/conducting-equipment-editor-wizarding.test.snap.js diff --git a/test/integration/editors/substation/__snapshots__/substation-editor-wizarding.test.snap.js b/packages/open-scd/test/integration/editors/substation/__snapshots__/substation-editor-wizarding.test.snap.js similarity index 100% rename from test/integration/editors/substation/__snapshots__/substation-editor-wizarding.test.snap.js rename to packages/open-scd/test/integration/editors/substation/__snapshots__/substation-editor-wizarding.test.snap.js diff --git a/test/integration/editors/substation/__snapshots__/voltage-level-editor-wizarding.test.snap.js b/packages/open-scd/test/integration/editors/substation/__snapshots__/voltage-level-editor-wizarding.test.snap.js similarity index 100% rename from test/integration/editors/substation/__snapshots__/voltage-level-editor-wizarding.test.snap.js rename to packages/open-scd/test/integration/editors/substation/__snapshots__/voltage-level-editor-wizarding.test.snap.js diff --git a/test/integration/editors/substation/bay-editor-wizarding-editing.test.ts b/packages/open-scd/test/integration/editors/substation/bay-editor-wizarding-editing.test.ts similarity index 100% rename from test/integration/editors/substation/bay-editor-wizarding-editing.test.ts rename to packages/open-scd/test/integration/editors/substation/bay-editor-wizarding-editing.test.ts diff --git a/test/integration/editors/substation/bay-editor-wizarding.test.ts b/packages/open-scd/test/integration/editors/substation/bay-editor-wizarding.test.ts similarity index 100% rename from test/integration/editors/substation/bay-editor-wizarding.test.ts rename to packages/open-scd/test/integration/editors/substation/bay-editor-wizarding.test.ts diff --git a/test/integration/editors/substation/conducting-equipment-editor-wizarding-editing.test.ts b/packages/open-scd/test/integration/editors/substation/conducting-equipment-editor-wizarding-editing.test.ts similarity index 100% rename from test/integration/editors/substation/conducting-equipment-editor-wizarding-editing.test.ts rename to packages/open-scd/test/integration/editors/substation/conducting-equipment-editor-wizarding-editing.test.ts diff --git a/test/integration/editors/substation/conducting-equipment-editor-wizarding.test.ts b/packages/open-scd/test/integration/editors/substation/conducting-equipment-editor-wizarding.test.ts similarity index 100% rename from test/integration/editors/substation/conducting-equipment-editor-wizarding.test.ts rename to packages/open-scd/test/integration/editors/substation/conducting-equipment-editor-wizarding.test.ts diff --git a/test/integration/editors/substation/eq-function-wizarding-editing.test.ts b/packages/open-scd/test/integration/editors/substation/eq-function-wizarding-editing.test.ts similarity index 100% rename from test/integration/editors/substation/eq-function-wizarding-editing.test.ts rename to packages/open-scd/test/integration/editors/substation/eq-function-wizarding-editing.test.ts diff --git a/test/integration/editors/substation/eq-sub-function-editor-wizarding-editing.test.ts b/packages/open-scd/test/integration/editors/substation/eq-sub-function-editor-wizarding-editing.test.ts similarity index 100% rename from test/integration/editors/substation/eq-sub-function-editor-wizarding-editing.test.ts rename to packages/open-scd/test/integration/editors/substation/eq-sub-function-editor-wizarding-editing.test.ts diff --git a/test/integration/editors/substation/function-editor.test.ts b/packages/open-scd/test/integration/editors/substation/function-editor.test.ts similarity index 100% rename from test/integration/editors/substation/function-editor.test.ts rename to packages/open-scd/test/integration/editors/substation/function-editor.test.ts diff --git a/test/integration/editors/substation/general-equipment-editor-wizard-editing.test.ts b/packages/open-scd/test/integration/editors/substation/general-equipment-editor-wizard-editing.test.ts similarity index 100% rename from test/integration/editors/substation/general-equipment-editor-wizard-editing.test.ts rename to packages/open-scd/test/integration/editors/substation/general-equipment-editor-wizard-editing.test.ts diff --git a/test/integration/editors/substation/guess-wizarding-editing.test.ts b/packages/open-scd/test/integration/editors/substation/guess-wizarding-editing.test.ts similarity index 100% rename from test/integration/editors/substation/guess-wizarding-editing.test.ts rename to packages/open-scd/test/integration/editors/substation/guess-wizarding-editing.test.ts diff --git a/test/integration/editors/substation/ied-editor-wizarding-integration.test.ts b/packages/open-scd/test/integration/editors/substation/ied-editor-wizarding-integration.test.ts similarity index 100% rename from test/integration/editors/substation/ied-editor-wizarding-integration.test.ts rename to packages/open-scd/test/integration/editors/substation/ied-editor-wizarding-integration.test.ts diff --git a/test/integration/editors/substation/l-node-editor-wizarding-editing.test.ts b/packages/open-scd/test/integration/editors/substation/l-node-editor-wizarding-editing.test.ts similarity index 100% rename from test/integration/editors/substation/l-node-editor-wizarding-editing.test.ts rename to packages/open-scd/test/integration/editors/substation/l-node-editor-wizarding-editing.test.ts diff --git a/test/integration/editors/substation/line-editor-wizard-editing.test.ts b/packages/open-scd/test/integration/editors/substation/line-editor-wizard-editing.test.ts similarity index 100% rename from test/integration/editors/substation/line-editor-wizard-editing.test.ts rename to packages/open-scd/test/integration/editors/substation/line-editor-wizard-editing.test.ts diff --git a/test/integration/editors/substation/lnodewizard.test.ts b/packages/open-scd/test/integration/editors/substation/lnodewizard.test.ts similarity index 100% rename from test/integration/editors/substation/lnodewizard.test.ts rename to packages/open-scd/test/integration/editors/substation/lnodewizard.test.ts diff --git a/test/integration/editors/substation/powertransformer-editor-wizarding-editing.test.ts b/packages/open-scd/test/integration/editors/substation/powertransformer-editor-wizarding-editing.test.ts similarity index 100% rename from test/integration/editors/substation/powertransformer-editor-wizarding-editing.test.ts rename to packages/open-scd/test/integration/editors/substation/powertransformer-editor-wizarding-editing.test.ts diff --git a/test/integration/editors/substation/process-editor-wizard-editing.test.ts b/packages/open-scd/test/integration/editors/substation/process-editor-wizard-editing.test.ts similarity index 100% rename from test/integration/editors/substation/process-editor-wizard-editing.test.ts rename to packages/open-scd/test/integration/editors/substation/process-editor-wizard-editing.test.ts diff --git a/test/integration/editors/substation/sub-equipment-wizarding-editing.test.ts b/packages/open-scd/test/integration/editors/substation/sub-equipment-wizarding-editing.test.ts similarity index 100% rename from test/integration/editors/substation/sub-equipment-wizarding-editing.test.ts rename to packages/open-scd/test/integration/editors/substation/sub-equipment-wizarding-editing.test.ts diff --git a/test/integration/editors/substation/sub-function-editor.test.ts b/packages/open-scd/test/integration/editors/substation/sub-function-editor.test.ts similarity index 100% rename from test/integration/editors/substation/sub-function-editor.test.ts rename to packages/open-scd/test/integration/editors/substation/sub-function-editor.test.ts diff --git a/test/integration/editors/substation/substation-editor-wizarding-editing.test.ts b/packages/open-scd/test/integration/editors/substation/substation-editor-wizarding-editing.test.ts similarity index 100% rename from test/integration/editors/substation/substation-editor-wizarding-editing.test.ts rename to packages/open-scd/test/integration/editors/substation/substation-editor-wizarding-editing.test.ts diff --git a/test/integration/editors/substation/substation-editor-wizarding.test.ts b/packages/open-scd/test/integration/editors/substation/substation-editor-wizarding.test.ts similarity index 100% rename from test/integration/editors/substation/substation-editor-wizarding.test.ts rename to packages/open-scd/test/integration/editors/substation/substation-editor-wizarding.test.ts diff --git a/test/integration/editors/substation/tapchanger-editor-wizard-editing.test.ts b/packages/open-scd/test/integration/editors/substation/tapchanger-editor-wizard-editing.test.ts similarity index 100% rename from test/integration/editors/substation/tapchanger-editor-wizard-editing.test.ts rename to packages/open-scd/test/integration/editors/substation/tapchanger-editor-wizard-editing.test.ts diff --git a/test/integration/editors/substation/transformer-winding-editor-wizard-editing.test.ts b/packages/open-scd/test/integration/editors/substation/transformer-winding-editor-wizard-editing.test.ts similarity index 100% rename from test/integration/editors/substation/transformer-winding-editor-wizard-editing.test.ts rename to packages/open-scd/test/integration/editors/substation/transformer-winding-editor-wizard-editing.test.ts diff --git a/test/integration/editors/substation/voltage-level-editor-wizarding-editing.test.ts b/packages/open-scd/test/integration/editors/substation/voltage-level-editor-wizarding-editing.test.ts similarity index 100% rename from test/integration/editors/substation/voltage-level-editor-wizarding-editing.test.ts rename to packages/open-scd/test/integration/editors/substation/voltage-level-editor-wizarding-editing.test.ts diff --git a/test/integration/editors/substation/voltage-level-editor-wizarding.test.ts b/packages/open-scd/test/integration/editors/substation/voltage-level-editor-wizarding.test.ts similarity index 100% rename from test/integration/editors/substation/voltage-level-editor-wizarding.test.ts rename to packages/open-scd/test/integration/editors/substation/voltage-level-editor-wizarding.test.ts diff --git a/test/integration/editors/substation/zeroline-pane.test.ts b/packages/open-scd/test/integration/editors/substation/zeroline-pane.test.ts similarity index 100% rename from test/integration/editors/substation/zeroline-pane.test.ts rename to packages/open-scd/test/integration/editors/substation/zeroline-pane.test.ts diff --git a/test/integration/editors/templates/Templates.test.ts b/packages/open-scd/test/integration/editors/templates/Templates.test.ts similarity index 100% rename from test/integration/editors/templates/Templates.test.ts rename to packages/open-scd/test/integration/editors/templates/Templates.test.ts diff --git a/test/integration/editors/templates/__snapshots__/Templates.test.snap.js b/packages/open-scd/test/integration/editors/templates/__snapshots__/Templates.test.snap.js similarity index 100% rename from test/integration/editors/templates/__snapshots__/Templates.test.snap.js rename to packages/open-scd/test/integration/editors/templates/__snapshots__/Templates.test.snap.js diff --git a/test/integration/editors/templates/__snapshots__/datype-wizarding.test.snap.js b/packages/open-scd/test/integration/editors/templates/__snapshots__/datype-wizarding.test.snap.js similarity index 100% rename from test/integration/editors/templates/__snapshots__/datype-wizarding.test.snap.js rename to packages/open-scd/test/integration/editors/templates/__snapshots__/datype-wizarding.test.snap.js diff --git a/test/integration/editors/templates/__snapshots__/dotype-wizarding.test.snap.js b/packages/open-scd/test/integration/editors/templates/__snapshots__/dotype-wizarding.test.snap.js similarity index 100% rename from test/integration/editors/templates/__snapshots__/dotype-wizarding.test.snap.js rename to packages/open-scd/test/integration/editors/templates/__snapshots__/dotype-wizarding.test.snap.js diff --git a/test/integration/editors/templates/__snapshots__/enumtype-wizarding.test.snap.js b/packages/open-scd/test/integration/editors/templates/__snapshots__/enumtype-wizarding.test.snap.js similarity index 100% rename from test/integration/editors/templates/__snapshots__/enumtype-wizarding.test.snap.js rename to packages/open-scd/test/integration/editors/templates/__snapshots__/enumtype-wizarding.test.snap.js diff --git a/test/integration/editors/templates/__snapshots__/lnodetype-wizard.test.snap.js b/packages/open-scd/test/integration/editors/templates/__snapshots__/lnodetype-wizard.test.snap.js similarity index 100% rename from test/integration/editors/templates/__snapshots__/lnodetype-wizard.test.snap.js rename to packages/open-scd/test/integration/editors/templates/__snapshots__/lnodetype-wizard.test.snap.js diff --git a/test/integration/editors/templates/datype-wizarding.test.ts b/packages/open-scd/test/integration/editors/templates/datype-wizarding.test.ts similarity index 100% rename from test/integration/editors/templates/datype-wizarding.test.ts rename to packages/open-scd/test/integration/editors/templates/datype-wizarding.test.ts diff --git a/test/integration/editors/templates/dotype-wizarding.test.ts b/packages/open-scd/test/integration/editors/templates/dotype-wizarding.test.ts similarity index 100% rename from test/integration/editors/templates/dotype-wizarding.test.ts rename to packages/open-scd/test/integration/editors/templates/dotype-wizarding.test.ts diff --git a/test/integration/editors/templates/enumtype-wizarding.test.ts b/packages/open-scd/test/integration/editors/templates/enumtype-wizarding.test.ts similarity index 100% rename from test/integration/editors/templates/enumtype-wizarding.test.ts rename to packages/open-scd/test/integration/editors/templates/enumtype-wizarding.test.ts diff --git a/test/integration/editors/templates/lnodetype-wizard.test.ts b/packages/open-scd/test/integration/editors/templates/lnodetype-wizard.test.ts similarity index 100% rename from test/integration/editors/templates/lnodetype-wizard.test.ts rename to packages/open-scd/test/integration/editors/templates/lnodetype-wizard.test.ts diff --git a/test/integration/editors/test-support.ts b/packages/open-scd/test/integration/editors/test-support.ts similarity index 100% rename from test/integration/editors/test-support.ts rename to packages/open-scd/test/integration/editors/test-support.ts diff --git a/test/integration/editors/triggered/CommunicationMappingPlugin.test.ts b/packages/open-scd/test/integration/editors/triggered/CommunicationMappingPlugin.test.ts similarity index 100% rename from test/integration/editors/triggered/CommunicationMappingPlugin.test.ts rename to packages/open-scd/test/integration/editors/triggered/CommunicationMappingPlugin.test.ts diff --git a/test/integration/editors/triggered/ImportIedsPlugin.test.ts b/packages/open-scd/test/integration/editors/triggered/ImportIedsPlugin.test.ts similarity index 100% rename from test/integration/editors/triggered/ImportIedsPlugin.test.ts rename to packages/open-scd/test/integration/editors/triggered/ImportIedsPlugin.test.ts diff --git a/test/integration/menu/ExportCommunication.test.ts b/packages/open-scd/test/integration/menu/ExportCommunication.test.ts similarity index 100% rename from test/integration/menu/ExportCommunication.test.ts rename to packages/open-scd/test/integration/menu/ExportCommunication.test.ts diff --git a/test/integration/menu/NewProject.test.ts b/packages/open-scd/test/integration/menu/NewProject.test.ts similarity index 100% rename from test/integration/menu/NewProject.test.ts rename to packages/open-scd/test/integration/menu/NewProject.test.ts diff --git a/test/integration/menu/UpdateDescritionABB.test.ts b/packages/open-scd/test/integration/menu/UpdateDescritionABB.test.ts similarity index 100% rename from test/integration/menu/UpdateDescritionABB.test.ts rename to packages/open-scd/test/integration/menu/UpdateDescritionABB.test.ts diff --git a/test/integration/open-scd.test.ts b/packages/open-scd/test/integration/open-scd.test.ts similarity index 100% rename from test/integration/open-scd.test.ts rename to packages/open-scd/test/integration/open-scd.test.ts diff --git a/test/integration/validators/ValidateSchema.test.ts b/packages/open-scd/test/integration/validators/ValidateSchema.test.ts similarity index 100% rename from test/integration/validators/ValidateSchema.test.ts rename to packages/open-scd/test/integration/validators/ValidateSchema.test.ts diff --git a/test/integration/validators/ValidateTemplates.test.ts b/packages/open-scd/test/integration/validators/ValidateTemplates.test.ts similarity index 100% rename from test/integration/validators/ValidateTemplates.test.ts rename to packages/open-scd/test/integration/validators/ValidateTemplates.test.ts diff --git a/test/integration/validators/__snapshots__/ValidateSchema.test.snap.js b/packages/open-scd/test/integration/validators/__snapshots__/ValidateSchema.test.snap.js similarity index 100% rename from test/integration/validators/__snapshots__/ValidateSchema.test.snap.js rename to packages/open-scd/test/integration/validators/__snapshots__/ValidateSchema.test.snap.js diff --git a/test/integration/validators/__snapshots__/ValidateTemplates.test.snap.js b/packages/open-scd/test/integration/validators/__snapshots__/ValidateTemplates.test.snap.js similarity index 100% rename from test/integration/validators/__snapshots__/ValidateTemplates.test.snap.js rename to packages/open-scd/test/integration/validators/__snapshots__/ValidateTemplates.test.snap.js diff --git a/test/integration/wizards/__snapshots__/bda-wizarding-editing.test.snap.js b/packages/open-scd/test/integration/wizards/__snapshots__/bda-wizarding-editing.test.snap.js similarity index 100% rename from test/integration/wizards/__snapshots__/bda-wizarding-editing.test.snap.js rename to packages/open-scd/test/integration/wizards/__snapshots__/bda-wizarding-editing.test.snap.js diff --git a/test/integration/wizards/__snapshots__/da-wizarding-editing.test.snap.js b/packages/open-scd/test/integration/wizards/__snapshots__/da-wizarding-editing.test.snap.js similarity index 100% rename from test/integration/wizards/__snapshots__/da-wizarding-editing.test.snap.js rename to packages/open-scd/test/integration/wizards/__snapshots__/da-wizarding-editing.test.snap.js diff --git a/test/integration/wizards/__snapshots__/services-wizard.test.snap.js b/packages/open-scd/test/integration/wizards/__snapshots__/services-wizard.test.snap.js similarity index 100% rename from test/integration/wizards/__snapshots__/services-wizard.test.snap.js rename to packages/open-scd/test/integration/wizards/__snapshots__/services-wizard.test.snap.js diff --git a/test/integration/wizards/bda-wizarding-editing.test.ts b/packages/open-scd/test/integration/wizards/bda-wizarding-editing.test.ts similarity index 100% rename from test/integration/wizards/bda-wizarding-editing.test.ts rename to packages/open-scd/test/integration/wizards/bda-wizarding-editing.test.ts diff --git a/test/integration/wizards/connectedap-wizarding-editing-integration.test.ts b/packages/open-scd/test/integration/wizards/connectedap-wizarding-editing-integration.test.ts similarity index 100% rename from test/integration/wizards/connectedap-wizarding-editing-integration.test.ts rename to packages/open-scd/test/integration/wizards/connectedap-wizarding-editing-integration.test.ts diff --git a/test/integration/wizards/da-wizarding-editing.test.ts b/packages/open-scd/test/integration/wizards/da-wizarding-editing.test.ts similarity index 100% rename from test/integration/wizards/da-wizarding-editing.test.ts rename to packages/open-scd/test/integration/wizards/da-wizarding-editing.test.ts diff --git a/test/integration/wizards/dataset-wizarding-editing-integration.test.ts b/packages/open-scd/test/integration/wizards/dataset-wizarding-editing-integration.test.ts similarity index 100% rename from test/integration/wizards/dataset-wizarding-editing-integration.test.ts rename to packages/open-scd/test/integration/wizards/dataset-wizarding-editing-integration.test.ts diff --git a/test/integration/wizards/fcda-wizarding-editing-integration.test.ts b/packages/open-scd/test/integration/wizards/fcda-wizarding-editing-integration.test.ts similarity index 100% rename from test/integration/wizards/fcda-wizarding-editing-integration.test.ts rename to packages/open-scd/test/integration/wizards/fcda-wizarding-editing-integration.test.ts diff --git a/test/integration/wizards/gse-wizarding-editing-integration.test.ts b/packages/open-scd/test/integration/wizards/gse-wizarding-editing-integration.test.ts similarity index 100% rename from test/integration/wizards/gse-wizarding-editing-integration.test.ts rename to packages/open-scd/test/integration/wizards/gse-wizarding-editing-integration.test.ts diff --git a/test/integration/wizards/gsecontrolwizarding-editing.test.ts b/packages/open-scd/test/integration/wizards/gsecontrolwizarding-editing.test.ts similarity index 100% rename from test/integration/wizards/gsecontrolwizarding-editing.test.ts rename to packages/open-scd/test/integration/wizards/gsecontrolwizarding-editing.test.ts diff --git a/test/integration/wizards/reportcontrol-wizarding-editing.test.ts b/packages/open-scd/test/integration/wizards/reportcontrol-wizarding-editing.test.ts similarity index 100% rename from test/integration/wizards/reportcontrol-wizarding-editing.test.ts rename to packages/open-scd/test/integration/wizards/reportcontrol-wizarding-editing.test.ts diff --git a/test/integration/wizards/sampledvaluecontrol-wizarding-editing.test.ts b/packages/open-scd/test/integration/wizards/sampledvaluecontrol-wizarding-editing.test.ts similarity index 100% rename from test/integration/wizards/sampledvaluecontrol-wizarding-editing.test.ts rename to packages/open-scd/test/integration/wizards/sampledvaluecontrol-wizarding-editing.test.ts diff --git a/test/integration/wizards/services-wizard.test.ts b/packages/open-scd/test/integration/wizards/services-wizard.test.ts similarity index 100% rename from test/integration/wizards/services-wizard.test.ts rename to packages/open-scd/test/integration/wizards/services-wizard.test.ts diff --git a/test/mock-editor-logger.ts b/packages/open-scd/test/mock-editor-logger.ts similarity index 100% rename from test/mock-editor-logger.ts rename to packages/open-scd/test/mock-editor-logger.ts diff --git a/test/mock-setter-logger.ts b/packages/open-scd/test/mock-setter-logger.ts similarity index 100% rename from test/mock-setter-logger.ts rename to packages/open-scd/test/mock-setter-logger.ts diff --git a/test/mock-wizard-editor.ts b/packages/open-scd/test/mock-wizard-editor.ts similarity index 100% rename from test/mock-wizard-editor.ts rename to packages/open-scd/test/mock-wizard-editor.ts diff --git a/test/mock-wizard.ts b/packages/open-scd/test/mock-wizard.ts similarity index 100% rename from test/mock-wizard.ts rename to packages/open-scd/test/mock-wizard.ts diff --git a/test/testfiles/104/valid-addresses.scd b/packages/open-scd/test/testfiles/104/valid-addresses.scd similarity index 100% rename from test/testfiles/104/valid-addresses.scd rename to packages/open-scd/test/testfiles/104/valid-addresses.scd diff --git a/test/testfiles/104/valid-empty-addresses.scd b/packages/open-scd/test/testfiles/104/valid-empty-addresses.scd similarity index 100% rename from test/testfiles/104/valid-empty-addresses.scd rename to packages/open-scd/test/testfiles/104/valid-empty-addresses.scd diff --git a/test/testfiles/104/valid-no-doi.scd b/packages/open-scd/test/testfiles/104/valid-no-doi.scd similarity index 100% rename from test/testfiles/104/valid-no-doi.scd rename to packages/open-scd/test/testfiles/104/valid-no-doi.scd diff --git a/test/testfiles/104/valid-no-ied.scd b/packages/open-scd/test/testfiles/104/valid-no-ied.scd similarity index 100% rename from test/testfiles/104/valid-no-ied.scd rename to packages/open-scd/test/testfiles/104/valid-no-ied.scd diff --git a/test/testfiles/104/valid-subnetwork.scd b/packages/open-scd/test/testfiles/104/valid-subnetwork.scd similarity index 100% rename from test/testfiles/104/valid-subnetwork.scd rename to packages/open-scd/test/testfiles/104/valid-subnetwork.scd diff --git a/test/testfiles/Editing.scd b/packages/open-scd/test/testfiles/Editing.scd similarity index 100% rename from test/testfiles/Editing.scd rename to packages/open-scd/test/testfiles/Editing.scd diff --git a/test/testfiles/Services.scd b/packages/open-scd/test/testfiles/Services.scd similarity index 100% rename from test/testfiles/Services.scd rename to packages/open-scd/test/testfiles/Services.scd diff --git a/test/testfiles/SubEquipment.scd b/packages/open-scd/test/testfiles/SubEquipment.scd similarity index 100% rename from test/testfiles/SubEquipment.scd rename to packages/open-scd/test/testfiles/SubEquipment.scd diff --git a/test/testfiles/cleanup.scd b/packages/open-scd/test/testfiles/cleanup.scd similarity index 100% rename from test/testfiles/cleanup.scd rename to packages/open-scd/test/testfiles/cleanup.scd diff --git a/test/testfiles/comm-map.scd b/packages/open-scd/test/testfiles/comm-map.scd similarity index 100% rename from test/testfiles/comm-map.scd rename to packages/open-scd/test/testfiles/comm-map.scd diff --git a/test/testfiles/communication.scd b/packages/open-scd/test/testfiles/communication.scd similarity index 100% rename from test/testfiles/communication.scd rename to packages/open-scd/test/testfiles/communication.scd diff --git a/test/testfiles/communication/communication.scd b/packages/open-scd/test/testfiles/communication/communication.scd similarity index 100% rename from test/testfiles/communication/communication.scd rename to packages/open-scd/test/testfiles/communication/communication.scd diff --git a/test/testfiles/conductingequipmentwizard.scd b/packages/open-scd/test/testfiles/conductingequipmentwizard.scd similarity index 100% rename from test/testfiles/conductingequipmentwizard.scd rename to packages/open-scd/test/testfiles/conductingequipmentwizard.scd diff --git a/test/testfiles/editors/DataBindingGOOSE2007B4.scd b/packages/open-scd/test/testfiles/editors/DataBindingGOOSE2007B4.scd similarity index 100% rename from test/testfiles/editors/DataBindingGOOSE2007B4.scd rename to packages/open-scd/test/testfiles/editors/DataBindingGOOSE2007B4.scd diff --git a/test/testfiles/editors/DataBindingSMV2007B4.scd b/packages/open-scd/test/testfiles/editors/DataBindingSMV2007B4.scd similarity index 100% rename from test/testfiles/editors/DataBindingSMV2007B4.scd rename to packages/open-scd/test/testfiles/editors/DataBindingSMV2007B4.scd diff --git a/test/testfiles/editors/LaterBindingGOOSE-LGOS.scd b/packages/open-scd/test/testfiles/editors/LaterBindingGOOSE-LGOS.scd similarity index 100% rename from test/testfiles/editors/LaterBindingGOOSE-LGOS.scd rename to packages/open-scd/test/testfiles/editors/LaterBindingGOOSE-LGOS.scd diff --git a/test/testfiles/editors/LaterBindingGOOSE2007B4.scd b/packages/open-scd/test/testfiles/editors/LaterBindingGOOSE2007B4.scd similarity index 100% rename from test/testfiles/editors/LaterBindingGOOSE2007B4.scd rename to packages/open-scd/test/testfiles/editors/LaterBindingGOOSE2007B4.scd diff --git a/test/testfiles/editors/LaterBindingSMV-LSVS.scd b/packages/open-scd/test/testfiles/editors/LaterBindingSMV-LSVS.scd similarity index 100% rename from test/testfiles/editors/LaterBindingSMV-LSVS.scd rename to packages/open-scd/test/testfiles/editors/LaterBindingSMV-LSVS.scd diff --git a/test/testfiles/editors/LaterBindingSMV2003.scd b/packages/open-scd/test/testfiles/editors/LaterBindingSMV2003.scd similarity index 100% rename from test/testfiles/editors/LaterBindingSMV2003.scd rename to packages/open-scd/test/testfiles/editors/LaterBindingSMV2003.scd diff --git a/test/testfiles/editors/LaterBindingSMV2007B4.scd b/packages/open-scd/test/testfiles/editors/LaterBindingSMV2007B4.scd similarity index 100% rename from test/testfiles/editors/LaterBindingSMV2007B4.scd rename to packages/open-scd/test/testfiles/editors/LaterBindingSMV2007B4.scd diff --git a/test/testfiles/editors/MessageBindingGOOSE2007B4.scd b/packages/open-scd/test/testfiles/editors/MessageBindingGOOSE2007B4.scd similarity index 100% rename from test/testfiles/editors/MessageBindingGOOSE2007B4.scd rename to packages/open-scd/test/testfiles/editors/MessageBindingGOOSE2007B4.scd diff --git a/test/testfiles/editors/MessageBindingSMV2007B4.scd b/packages/open-scd/test/testfiles/editors/MessageBindingSMV2007B4.scd similarity index 100% rename from test/testfiles/editors/MessageBindingSMV2007B4.scd rename to packages/open-scd/test/testfiles/editors/MessageBindingSMV2007B4.scd diff --git a/test/testfiles/editors/iedEditorWithIEDs.scd b/packages/open-scd/test/testfiles/editors/iedEditorWithIEDs.scd similarity index 100% rename from test/testfiles/editors/iedEditorWithIEDs.scd rename to packages/open-scd/test/testfiles/editors/iedEditorWithIEDs.scd diff --git a/test/testfiles/editors/iedEditorWithoutIEDs.scd b/packages/open-scd/test/testfiles/editors/iedEditorWithoutIEDs.scd similarity index 100% rename from test/testfiles/editors/iedEditorWithoutIEDs.scd rename to packages/open-scd/test/testfiles/editors/iedEditorWithoutIEDs.scd diff --git a/test/testfiles/editors/substation/Line.scd b/packages/open-scd/test/testfiles/editors/substation/Line.scd similarity index 100% rename from test/testfiles/editors/substation/Line.scd rename to packages/open-scd/test/testfiles/editors/substation/Line.scd diff --git a/test/testfiles/editors/substation/Process.scd b/packages/open-scd/test/testfiles/editors/substation/Process.scd similarity index 100% rename from test/testfiles/editors/substation/Process.scd rename to packages/open-scd/test/testfiles/editors/substation/Process.scd diff --git a/test/testfiles/editors/substation/TapChanger.scd b/packages/open-scd/test/testfiles/editors/substation/TapChanger.scd similarity index 100% rename from test/testfiles/editors/substation/TapChanger.scd rename to packages/open-scd/test/testfiles/editors/substation/TapChanger.scd diff --git a/test/testfiles/editors/substation/TransformerWinding.scd b/packages/open-scd/test/testfiles/editors/substation/TransformerWinding.scd similarity index 100% rename from test/testfiles/editors/substation/TransformerWinding.scd rename to packages/open-scd/test/testfiles/editors/substation/TransformerWinding.scd diff --git a/test/testfiles/editors/substation/generalequipment.scd b/packages/open-scd/test/testfiles/editors/substation/generalequipment.scd similarity index 100% rename from test/testfiles/editors/substation/generalequipment.scd rename to packages/open-scd/test/testfiles/editors/substation/generalequipment.scd diff --git a/test/testfiles/foundation/compare-changed.cid b/packages/open-scd/test/testfiles/foundation/compare-changed.cid similarity index 100% rename from test/testfiles/foundation/compare-changed.cid rename to packages/open-scd/test/testfiles/foundation/compare-changed.cid diff --git a/test/testfiles/foundation/compare-original.cid b/packages/open-scd/test/testfiles/foundation/compare-original.cid similarity index 100% rename from test/testfiles/foundation/compare-original.cid rename to packages/open-scd/test/testfiles/foundation/compare-original.cid diff --git a/test/testfiles/foundation/sclbasics.scd b/packages/open-scd/test/testfiles/foundation/sclbasics.scd similarity index 100% rename from test/testfiles/foundation/sclbasics.scd rename to packages/open-scd/test/testfiles/foundation/sclbasics.scd diff --git a/test/testfiles/foundation/testFile73.nsdoc b/packages/open-scd/test/testfiles/foundation/testFile73.nsdoc similarity index 100% rename from test/testfiles/foundation/testFile73.nsdoc rename to packages/open-scd/test/testfiles/foundation/testFile73.nsdoc diff --git a/test/testfiles/foundation/testFile74.nsdoc b/packages/open-scd/test/testfiles/foundation/testFile74.nsdoc similarity index 100% rename from test/testfiles/foundation/testFile74.nsdoc rename to packages/open-scd/test/testfiles/foundation/testFile74.nsdoc diff --git a/test/testfiles/foundation/testFile81.nsdoc b/packages/open-scd/test/testfiles/foundation/testFile81.nsdoc similarity index 100% rename from test/testfiles/foundation/testFile81.nsdoc rename to packages/open-scd/test/testfiles/foundation/testFile81.nsdoc diff --git a/test/testfiles/history.scd b/packages/open-scd/test/testfiles/history.scd similarity index 100% rename from test/testfiles/history.scd rename to packages/open-scd/test/testfiles/history.scd diff --git a/test/testfiles/importieds/duplicate.iid b/packages/open-scd/test/testfiles/importieds/duplicate.iid similarity index 100% rename from test/testfiles/importieds/duplicate.iid rename to packages/open-scd/test/testfiles/importieds/duplicate.iid diff --git a/test/testfiles/importieds/emptyproject.scd b/packages/open-scd/test/testfiles/importieds/emptyproject.scd similarity index 100% rename from test/testfiles/importieds/emptyproject.scd rename to packages/open-scd/test/testfiles/importieds/emptyproject.scd diff --git a/test/testfiles/importieds/invalid.iid b/packages/open-scd/test/testfiles/importieds/invalid.iid similarity index 100% rename from test/testfiles/importieds/invalid.iid rename to packages/open-scd/test/testfiles/importieds/invalid.iid diff --git a/test/testfiles/importieds/multipleied.scd b/packages/open-scd/test/testfiles/importieds/multipleied.scd similarity index 100% rename from test/testfiles/importieds/multipleied.scd rename to packages/open-scd/test/testfiles/importieds/multipleied.scd diff --git a/test/testfiles/importieds/parsererror.iid b/packages/open-scd/test/testfiles/importieds/parsererror.iid similarity index 100% rename from test/testfiles/importieds/parsererror.iid rename to packages/open-scd/test/testfiles/importieds/parsererror.iid diff --git a/test/testfiles/importieds/template.icd b/packages/open-scd/test/testfiles/importieds/template.icd similarity index 100% rename from test/testfiles/importieds/template.icd rename to packages/open-scd/test/testfiles/importieds/template.icd diff --git a/test/testfiles/importieds/valid.iid b/packages/open-scd/test/testfiles/importieds/valid.iid similarity index 100% rename from test/testfiles/importieds/valid.iid rename to packages/open-scd/test/testfiles/importieds/valid.iid diff --git a/test/testfiles/invalid2007B.scd b/packages/open-scd/test/testfiles/invalid2007B.scd similarity index 100% rename from test/testfiles/invalid2007B.scd rename to packages/open-scd/test/testfiles/invalid2007B.scd diff --git a/test/testfiles/lnodewizard.scd b/packages/open-scd/test/testfiles/lnodewizard.scd similarity index 100% rename from test/testfiles/lnodewizard.scd rename to packages/open-scd/test/testfiles/lnodewizard.scd diff --git a/test/testfiles/menu/compare-ied-changed.scd b/packages/open-scd/test/testfiles/menu/compare-ied-changed.scd similarity index 100% rename from test/testfiles/menu/compare-ied-changed.scd rename to packages/open-scd/test/testfiles/menu/compare-ied-changed.scd diff --git a/test/testfiles/menu/compare-ied-original.scd b/packages/open-scd/test/testfiles/menu/compare-ied-original.scd similarity index 100% rename from test/testfiles/menu/compare-ied-original.scd rename to packages/open-scd/test/testfiles/menu/compare-ied-original.scd diff --git a/test/testfiles/missingCommunication.scd b/packages/open-scd/test/testfiles/missingCommunication.scd similarity index 100% rename from test/testfiles/missingCommunication.scd rename to packages/open-scd/test/testfiles/missingCommunication.scd diff --git a/test/testfiles/missingSubstation.scd b/packages/open-scd/test/testfiles/missingSubstation.scd similarity index 100% rename from test/testfiles/missingSubstation.scd rename to packages/open-scd/test/testfiles/missingSubstation.scd diff --git a/test/testfiles/no-history.scd b/packages/open-scd/test/testfiles/no-history.scd similarity index 100% rename from test/testfiles/no-history.scd rename to packages/open-scd/test/testfiles/no-history.scd diff --git a/test/testfiles/nsdoc/IEC_61850-7-2.nsdoc b/packages/open-scd/test/testfiles/nsdoc/IEC_61850-7-2.nsdoc similarity index 100% rename from test/testfiles/nsdoc/IEC_61850-7-2.nsdoc rename to packages/open-scd/test/testfiles/nsdoc/IEC_61850-7-2.nsdoc diff --git a/test/testfiles/nsdoc/invalid.nsdoc b/packages/open-scd/test/testfiles/nsdoc/invalid.nsdoc similarity index 100% rename from test/testfiles/nsdoc/invalid.nsdoc rename to packages/open-scd/test/testfiles/nsdoc/invalid.nsdoc diff --git a/test/testfiles/nsdoc/wrong-version.nsdoc b/packages/open-scd/test/testfiles/nsdoc/wrong-version.nsdoc similarity index 100% rename from test/testfiles/nsdoc/wrong-version.nsdoc rename to packages/open-scd/test/testfiles/nsdoc/wrong-version.nsdoc diff --git a/test/testfiles/subscriberinfo2003.scd b/packages/open-scd/test/testfiles/subscriberinfo2003.scd similarity index 100% rename from test/testfiles/subscriberinfo2003.scd rename to packages/open-scd/test/testfiles/subscriberinfo2003.scd diff --git a/test/testfiles/subscriberinfo2007.scd b/packages/open-scd/test/testfiles/subscriberinfo2007.scd similarity index 100% rename from test/testfiles/subscriberinfo2007.scd rename to packages/open-scd/test/testfiles/subscriberinfo2007.scd diff --git a/test/testfiles/templates/datypes.scd b/packages/open-scd/test/testfiles/templates/datypes.scd similarity index 100% rename from test/testfiles/templates/datypes.scd rename to packages/open-scd/test/testfiles/templates/datypes.scd diff --git a/test/testfiles/templates/dotypes.scd b/packages/open-scd/test/testfiles/templates/dotypes.scd similarity index 100% rename from test/testfiles/templates/dotypes.scd rename to packages/open-scd/test/testfiles/templates/dotypes.scd diff --git a/test/testfiles/templates/missingdatatypes.scd b/packages/open-scd/test/testfiles/templates/missingdatatypes.scd similarity index 100% rename from test/testfiles/templates/missingdatatypes.scd rename to packages/open-scd/test/testfiles/templates/missingdatatypes.scd diff --git a/test/testfiles/updatedesc/testSignalListComma.csv b/packages/open-scd/test/testfiles/updatedesc/testSignalListComma.csv similarity index 100% rename from test/testfiles/updatedesc/testSignalListComma.csv rename to packages/open-scd/test/testfiles/updatedesc/testSignalListComma.csv diff --git a/test/testfiles/updatedesc/testSignalListSemicolon.csv b/packages/open-scd/test/testfiles/updatedesc/testSignalListSemicolon.csv similarity index 100% rename from test/testfiles/updatedesc/testSignalListSemicolon.csv rename to packages/open-scd/test/testfiles/updatedesc/testSignalListSemicolon.csv diff --git a/test/testfiles/updatedesc/updatedescABB.scd b/packages/open-scd/test/testfiles/updatedesc/updatedescABB.scd similarity index 100% rename from test/testfiles/updatedesc/updatedescABB.scd rename to packages/open-scd/test/testfiles/updatedesc/updatedescABB.scd diff --git a/test/testfiles/updatedesc/updatedescSEL.scd b/packages/open-scd/test/testfiles/updatedesc/updatedescSEL.scd similarity index 100% rename from test/testfiles/updatedesc/updatedescSEL.scd rename to packages/open-scd/test/testfiles/updatedesc/updatedescSEL.scd diff --git a/test/testfiles/updatesubstation-ours.scd b/packages/open-scd/test/testfiles/updatesubstation-ours.scd similarity index 100% rename from test/testfiles/updatesubstation-ours.scd rename to packages/open-scd/test/testfiles/updatesubstation-ours.scd diff --git a/test/testfiles/valid2003.scd b/packages/open-scd/test/testfiles/valid2003.scd similarity index 100% rename from test/testfiles/valid2003.scd rename to packages/open-scd/test/testfiles/valid2003.scd diff --git a/test/testfiles/valid2007B.scd b/packages/open-scd/test/testfiles/valid2007B.scd similarity index 100% rename from test/testfiles/valid2007B.scd rename to packages/open-scd/test/testfiles/valid2007B.scd diff --git a/test/testfiles/valid2007B4.scd b/packages/open-scd/test/testfiles/valid2007B4.scd similarity index 100% rename from test/testfiles/valid2007B4.scd rename to packages/open-scd/test/testfiles/valid2007B4.scd diff --git a/test/testfiles/valid2007B4ForDAIValidation.scd b/packages/open-scd/test/testfiles/valid2007B4ForDAIValidation.scd similarity index 100% rename from test/testfiles/valid2007B4ForDAIValidation.scd rename to packages/open-scd/test/testfiles/valid2007B4ForDAIValidation.scd diff --git a/test/testfiles/valid2007B4withIEDModifications.scd b/packages/open-scd/test/testfiles/valid2007B4withIEDModifications.scd similarity index 100% rename from test/testfiles/valid2007B4withIEDModifications.scd rename to packages/open-scd/test/testfiles/valid2007B4withIEDModifications.scd diff --git a/test/testfiles/valid2007B4withSubstationXY.scd b/packages/open-scd/test/testfiles/valid2007B4withSubstationXY.scd similarity index 100% rename from test/testfiles/valid2007B4withSubstationXY.scd rename to packages/open-scd/test/testfiles/valid2007B4withSubstationXY.scd diff --git a/test/testfiles/validators/datatypetemplateerrors.scd b/packages/open-scd/test/testfiles/validators/datatypetemplateerrors.scd similarity index 100% rename from test/testfiles/validators/datatypetemplateerrors.scd rename to packages/open-scd/test/testfiles/validators/datatypetemplateerrors.scd diff --git a/test/testfiles/validators/doandsdotestfile.scd b/packages/open-scd/test/testfiles/validators/doandsdotestfile.scd similarity index 100% rename from test/testfiles/validators/doandsdotestfile.scd rename to packages/open-scd/test/testfiles/validators/doandsdotestfile.scd diff --git a/test/testfiles/validators/zeroissues.scd b/packages/open-scd/test/testfiles/validators/zeroissues.scd similarity index 100% rename from test/testfiles/validators/zeroissues.scd rename to packages/open-scd/test/testfiles/validators/zeroissues.scd diff --git a/test/testfiles/virtualied/specificfromfunctions.ssd b/packages/open-scd/test/testfiles/virtualied/specificfromfunctions.ssd similarity index 100% rename from test/testfiles/virtualied/specificfromfunctions.ssd rename to packages/open-scd/test/testfiles/virtualied/specificfromfunctions.ssd diff --git a/test/testfiles/wizards/abstractda.scd b/packages/open-scd/test/testfiles/wizards/abstractda.scd similarity index 100% rename from test/testfiles/wizards/abstractda.scd rename to packages/open-scd/test/testfiles/wizards/abstractda.scd diff --git a/test/testfiles/wizards/communication.scd b/packages/open-scd/test/testfiles/wizards/communication.scd similarity index 100% rename from test/testfiles/wizards/communication.scd rename to packages/open-scd/test/testfiles/wizards/communication.scd diff --git a/test/testfiles/wizards/fcda.scd b/packages/open-scd/test/testfiles/wizards/fcda.scd similarity index 100% rename from test/testfiles/wizards/fcda.scd rename to packages/open-scd/test/testfiles/wizards/fcda.scd diff --git a/test/testfiles/wizards/gsecontrol.scd b/packages/open-scd/test/testfiles/wizards/gsecontrol.scd similarity index 100% rename from test/testfiles/wizards/gsecontrol.scd rename to packages/open-scd/test/testfiles/wizards/gsecontrol.scd diff --git a/test/testfiles/wizards/ied.scd b/packages/open-scd/test/testfiles/wizards/ied.scd similarity index 100% rename from test/testfiles/wizards/ied.scd rename to packages/open-scd/test/testfiles/wizards/ied.scd diff --git a/test/testfiles/wizards/references.scd b/packages/open-scd/test/testfiles/wizards/references.scd similarity index 100% rename from test/testfiles/wizards/references.scd rename to packages/open-scd/test/testfiles/wizards/references.scd diff --git a/test/testfiles/wizards/reportcontrol.scd b/packages/open-scd/test/testfiles/wizards/reportcontrol.scd similarity index 100% rename from test/testfiles/wizards/reportcontrol.scd rename to packages/open-scd/test/testfiles/wizards/reportcontrol.scd diff --git a/test/testfiles/wizards/sampledvaluecontrol.scd b/packages/open-scd/test/testfiles/wizards/sampledvaluecontrol.scd similarity index 100% rename from test/testfiles/wizards/sampledvaluecontrol.scd rename to packages/open-scd/test/testfiles/wizards/sampledvaluecontrol.scd diff --git a/test/testfiles/wizards/settingGroups.scd b/packages/open-scd/test/testfiles/wizards/settingGroups.scd similarity index 100% rename from test/testfiles/wizards/settingGroups.scd rename to packages/open-scd/test/testfiles/wizards/settingGroups.scd diff --git a/test/testfiles/wizards/substation.scd b/packages/open-scd/test/testfiles/wizards/substation.scd similarity index 100% rename from test/testfiles/wizards/substation.scd rename to packages/open-scd/test/testfiles/wizards/substation.scd diff --git a/test/testfiles/zeroline/clone/noUnusedLNode.scd b/packages/open-scd/test/testfiles/zeroline/clone/noUnusedLNode.scd similarity index 100% rename from test/testfiles/zeroline/clone/noUnusedLNode.scd rename to packages/open-scd/test/testfiles/zeroline/clone/noUnusedLNode.scd diff --git a/test/testfiles/zeroline/clone/refMissmatch.scd b/packages/open-scd/test/testfiles/zeroline/clone/refMissmatch.scd similarity index 100% rename from test/testfiles/zeroline/clone/refMissmatch.scd rename to packages/open-scd/test/testfiles/zeroline/clone/refMissmatch.scd diff --git a/test/testfiles/zeroline/clone/specificationOnly.scd b/packages/open-scd/test/testfiles/zeroline/clone/specificationOnly.scd similarity index 100% rename from test/testfiles/zeroline/clone/specificationOnly.scd rename to packages/open-scd/test/testfiles/zeroline/clone/specificationOnly.scd diff --git a/test/testfiles/zeroline/clone/validRedirect.scd b/packages/open-scd/test/testfiles/zeroline/clone/validRedirect.scd similarity index 100% rename from test/testfiles/zeroline/clone/validRedirect.scd rename to packages/open-scd/test/testfiles/zeroline/clone/validRedirect.scd diff --git a/test/testfiles/zeroline/functions.scd b/packages/open-scd/test/testfiles/zeroline/functions.scd similarity index 100% rename from test/testfiles/zeroline/functions.scd rename to packages/open-scd/test/testfiles/zeroline/functions.scd diff --git a/test/testfiles/zeroline/iedalloctest.scd b/packages/open-scd/test/testfiles/zeroline/iedalloctest.scd similarity index 100% rename from test/testfiles/zeroline/iedalloctest.scd rename to packages/open-scd/test/testfiles/zeroline/iedalloctest.scd diff --git a/test/testfiles/zeroline/substationonly.scd b/packages/open-scd/test/testfiles/zeroline/substationonly.scd similarity index 100% rename from test/testfiles/zeroline/substationonly.scd rename to packages/open-scd/test/testfiles/zeroline/substationonly.scd diff --git a/test/unit/Editing.test.ts b/packages/open-scd/test/unit/Editing.test.ts similarity index 100% rename from test/unit/Editing.test.ts rename to packages/open-scd/test/unit/Editing.test.ts diff --git a/test/unit/Logging.test.ts b/packages/open-scd/test/unit/Logging.test.ts similarity index 100% rename from test/unit/Logging.test.ts rename to packages/open-scd/test/unit/Logging.test.ts diff --git a/test/unit/Plugging.test.ts b/packages/open-scd/test/unit/Plugging.test.ts similarity index 100% rename from test/unit/Plugging.test.ts rename to packages/open-scd/test/unit/Plugging.test.ts diff --git a/test/unit/Setting.test.ts b/packages/open-scd/test/unit/Setting.test.ts similarity index 100% rename from test/unit/Setting.test.ts rename to packages/open-scd/test/unit/Setting.test.ts diff --git a/test/unit/Waiting.test.ts b/packages/open-scd/test/unit/Waiting.test.ts similarity index 100% rename from test/unit/Waiting.test.ts rename to packages/open-scd/test/unit/Waiting.test.ts diff --git a/test/unit/Wizarding.test.ts b/packages/open-scd/test/unit/Wizarding.test.ts similarity index 100% rename from test/unit/Wizarding.test.ts rename to packages/open-scd/test/unit/Wizarding.test.ts diff --git a/test/unit/__snapshots__/Setting.test.snap.js b/packages/open-scd/test/unit/__snapshots__/Setting.test.snap.js similarity index 100% rename from test/unit/__snapshots__/Setting.test.snap.js rename to packages/open-scd/test/unit/__snapshots__/Setting.test.snap.js diff --git a/test/unit/__snapshots__/action-icon.test.snap.js b/packages/open-scd/test/unit/__snapshots__/action-icon.test.snap.js similarity index 100% rename from test/unit/__snapshots__/action-icon.test.snap.js rename to packages/open-scd/test/unit/__snapshots__/action-icon.test.snap.js diff --git a/test/unit/__snapshots__/action-pane.test.snap.js b/packages/open-scd/test/unit/__snapshots__/action-pane.test.snap.js similarity index 100% rename from test/unit/__snapshots__/action-pane.test.snap.js rename to packages/open-scd/test/unit/__snapshots__/action-pane.test.snap.js diff --git a/test/unit/__snapshots__/filtered-list.test.snap.js b/packages/open-scd/test/unit/__snapshots__/filtered-list.test.snap.js similarity index 100% rename from test/unit/__snapshots__/filtered-list.test.snap.js rename to packages/open-scd/test/unit/__snapshots__/filtered-list.test.snap.js diff --git a/test/unit/__snapshots__/finder-list.test.snap.js b/packages/open-scd/test/unit/__snapshots__/finder-list.test.snap.js similarity index 100% rename from test/unit/__snapshots__/finder-list.test.snap.js rename to packages/open-scd/test/unit/__snapshots__/finder-list.test.snap.js diff --git a/test/unit/__snapshots__/oscd-filter-button.test.snap.js b/packages/open-scd/test/unit/__snapshots__/oscd-filter-button.test.snap.js similarity index 100% rename from test/unit/__snapshots__/oscd-filter-button.test.snap.js rename to packages/open-scd/test/unit/__snapshots__/oscd-filter-button.test.snap.js diff --git a/test/unit/__snapshots__/plain-compare-list.test.snap.js b/packages/open-scd/test/unit/__snapshots__/plain-compare-list.test.snap.js similarity index 100% rename from test/unit/__snapshots__/plain-compare-list.test.snap.js rename to packages/open-scd/test/unit/__snapshots__/plain-compare-list.test.snap.js diff --git a/test/unit/__snapshots__/wizard-dialog.test.snap.js b/packages/open-scd/test/unit/__snapshots__/wizard-dialog.test.snap.js similarity index 100% rename from test/unit/__snapshots__/wizard-dialog.test.snap.js rename to packages/open-scd/test/unit/__snapshots__/wizard-dialog.test.snap.js diff --git a/test/unit/action-icon.test.ts b/packages/open-scd/test/unit/action-icon.test.ts similarity index 100% rename from test/unit/action-icon.test.ts rename to packages/open-scd/test/unit/action-icon.test.ts diff --git a/test/unit/action-pane.test.ts b/packages/open-scd/test/unit/action-pane.test.ts similarity index 100% rename from test/unit/action-pane.test.ts rename to packages/open-scd/test/unit/action-pane.test.ts diff --git a/test/unit/editors/GooseSubscriberDataBinding.test.ts b/packages/open-scd/test/unit/editors/GooseSubscriberDataBinding.test.ts similarity index 100% rename from test/unit/editors/GooseSubscriberDataBinding.test.ts rename to packages/open-scd/test/unit/editors/GooseSubscriberDataBinding.test.ts diff --git a/test/unit/editors/GooseSubscriberLaterBinding.test.ts b/packages/open-scd/test/unit/editors/GooseSubscriberLaterBinding.test.ts similarity index 100% rename from test/unit/editors/GooseSubscriberLaterBinding.test.ts rename to packages/open-scd/test/unit/editors/GooseSubscriberLaterBinding.test.ts diff --git a/test/unit/editors/Publisher.test.ts b/packages/open-scd/test/unit/editors/Publisher.test.ts similarity index 100% rename from test/unit/editors/Publisher.test.ts rename to packages/open-scd/test/unit/editors/Publisher.test.ts diff --git a/test/unit/editors/SMVSubscriberDataBinding.test.ts b/packages/open-scd/test/unit/editors/SMVSubscriberDataBinding.test.ts similarity index 100% rename from test/unit/editors/SMVSubscriberDataBinding.test.ts rename to packages/open-scd/test/unit/editors/SMVSubscriberDataBinding.test.ts diff --git a/test/unit/editors/SMVSubscriberLaterBinding.test.ts b/packages/open-scd/test/unit/editors/SMVSubscriberLaterBinding.test.ts similarity index 100% rename from test/unit/editors/SMVSubscriberLaterBinding.test.ts rename to packages/open-scd/test/unit/editors/SMVSubscriberLaterBinding.test.ts diff --git a/test/unit/editors/__snapshots__/GooseSubscriberDataBinding.test.snap.js b/packages/open-scd/test/unit/editors/__snapshots__/GooseSubscriberDataBinding.test.snap.js similarity index 100% rename from test/unit/editors/__snapshots__/GooseSubscriberDataBinding.test.snap.js rename to packages/open-scd/test/unit/editors/__snapshots__/GooseSubscriberDataBinding.test.snap.js diff --git a/test/unit/editors/__snapshots__/GooseSubscriberLaterBinding.test.snap.js b/packages/open-scd/test/unit/editors/__snapshots__/GooseSubscriberLaterBinding.test.snap.js similarity index 100% rename from test/unit/editors/__snapshots__/GooseSubscriberLaterBinding.test.snap.js rename to packages/open-scd/test/unit/editors/__snapshots__/GooseSubscriberLaterBinding.test.snap.js diff --git a/test/unit/editors/__snapshots__/Publisher.test.snap.js b/packages/open-scd/test/unit/editors/__snapshots__/Publisher.test.snap.js similarity index 100% rename from test/unit/editors/__snapshots__/Publisher.test.snap.js rename to packages/open-scd/test/unit/editors/__snapshots__/Publisher.test.snap.js diff --git a/test/unit/editors/__snapshots__/SMVSubscriberDataBinding.test.snap.js b/packages/open-scd/test/unit/editors/__snapshots__/SMVSubscriberDataBinding.test.snap.js similarity index 100% rename from test/unit/editors/__snapshots__/SMVSubscriberDataBinding.test.snap.js rename to packages/open-scd/test/unit/editors/__snapshots__/SMVSubscriberDataBinding.test.snap.js diff --git a/test/unit/editors/__snapshots__/SMVSubscriberLaterBinding.test.snap.js b/packages/open-scd/test/unit/editors/__snapshots__/SMVSubscriberLaterBinding.test.snap.js similarity index 100% rename from test/unit/editors/__snapshots__/SMVSubscriberLaterBinding.test.snap.js rename to packages/open-scd/test/unit/editors/__snapshots__/SMVSubscriberLaterBinding.test.snap.js diff --git a/test/unit/editors/cleanup/__snapshots__/control-blocks-container.test.snap.js b/packages/open-scd/test/unit/editors/cleanup/__snapshots__/control-blocks-container.test.snap.js similarity index 100% rename from test/unit/editors/cleanup/__snapshots__/control-blocks-container.test.snap.js rename to packages/open-scd/test/unit/editors/cleanup/__snapshots__/control-blocks-container.test.snap.js diff --git a/test/unit/editors/cleanup/__snapshots__/datasets-container.test.snap.js b/packages/open-scd/test/unit/editors/cleanup/__snapshots__/datasets-container.test.snap.js similarity index 100% rename from test/unit/editors/cleanup/__snapshots__/datasets-container.test.snap.js rename to packages/open-scd/test/unit/editors/cleanup/__snapshots__/datasets-container.test.snap.js diff --git a/test/unit/editors/cleanup/__snapshots__/datatypes-container.test.snap.js b/packages/open-scd/test/unit/editors/cleanup/__snapshots__/datatypes-container.test.snap.js similarity index 100% rename from test/unit/editors/cleanup/__snapshots__/datatypes-container.test.snap.js rename to packages/open-scd/test/unit/editors/cleanup/__snapshots__/datatypes-container.test.snap.js diff --git a/test/unit/editors/cleanup/control-blocks-container.test.ts b/packages/open-scd/test/unit/editors/cleanup/control-blocks-container.test.ts similarity index 100% rename from test/unit/editors/cleanup/control-blocks-container.test.ts rename to packages/open-scd/test/unit/editors/cleanup/control-blocks-container.test.ts diff --git a/test/unit/editors/cleanup/datasets-container.test.ts b/packages/open-scd/test/unit/editors/cleanup/datasets-container.test.ts similarity index 100% rename from test/unit/editors/cleanup/datasets-container.test.ts rename to packages/open-scd/test/unit/editors/cleanup/datasets-container.test.ts diff --git a/test/unit/editors/cleanup/datatypes-container.test.ts b/packages/open-scd/test/unit/editors/cleanup/datatypes-container.test.ts similarity index 100% rename from test/unit/editors/cleanup/datatypes-container.test.ts rename to packages/open-scd/test/unit/editors/cleanup/datatypes-container.test.ts diff --git a/test/unit/editors/cleanup/foundation.test.ts b/packages/open-scd/test/unit/editors/cleanup/foundation.test.ts similarity index 100% rename from test/unit/editors/cleanup/foundation.test.ts rename to packages/open-scd/test/unit/editors/cleanup/foundation.test.ts diff --git a/test/unit/editors/communication/__snapshots__/conductingap-editor.test.snap.js b/packages/open-scd/test/unit/editors/communication/__snapshots__/conductingap-editor.test.snap.js similarity index 100% rename from test/unit/editors/communication/__snapshots__/conductingap-editor.test.snap.js rename to packages/open-scd/test/unit/editors/communication/__snapshots__/conductingap-editor.test.snap.js diff --git a/test/unit/editors/communication/__snapshots__/gse-editor.test.snap.js b/packages/open-scd/test/unit/editors/communication/__snapshots__/gse-editor.test.snap.js similarity index 100% rename from test/unit/editors/communication/__snapshots__/gse-editor.test.snap.js rename to packages/open-scd/test/unit/editors/communication/__snapshots__/gse-editor.test.snap.js diff --git a/test/unit/editors/communication/__snapshots__/smv-editor.test.snap.js b/packages/open-scd/test/unit/editors/communication/__snapshots__/smv-editor.test.snap.js similarity index 100% rename from test/unit/editors/communication/__snapshots__/smv-editor.test.snap.js rename to packages/open-scd/test/unit/editors/communication/__snapshots__/smv-editor.test.snap.js diff --git a/test/unit/editors/communication/__snapshots__/subnetwork-editor.test.snap.js b/packages/open-scd/test/unit/editors/communication/__snapshots__/subnetwork-editor.test.snap.js similarity index 100% rename from test/unit/editors/communication/__snapshots__/subnetwork-editor.test.snap.js rename to packages/open-scd/test/unit/editors/communication/__snapshots__/subnetwork-editor.test.snap.js diff --git a/test/unit/editors/communication/conductingap-editor.test.ts b/packages/open-scd/test/unit/editors/communication/conductingap-editor.test.ts similarity index 100% rename from test/unit/editors/communication/conductingap-editor.test.ts rename to packages/open-scd/test/unit/editors/communication/conductingap-editor.test.ts diff --git a/test/unit/editors/communication/gse-editor.test.ts b/packages/open-scd/test/unit/editors/communication/gse-editor.test.ts similarity index 100% rename from test/unit/editors/communication/gse-editor.test.ts rename to packages/open-scd/test/unit/editors/communication/gse-editor.test.ts diff --git a/test/unit/editors/communication/smv-editor.test.ts b/packages/open-scd/test/unit/editors/communication/smv-editor.test.ts similarity index 100% rename from test/unit/editors/communication/smv-editor.test.ts rename to packages/open-scd/test/unit/editors/communication/smv-editor.test.ts diff --git a/test/unit/editors/communication/subnetwork-editor.test.ts b/packages/open-scd/test/unit/editors/communication/subnetwork-editor.test.ts similarity index 100% rename from test/unit/editors/communication/subnetwork-editor.test.ts rename to packages/open-scd/test/unit/editors/communication/subnetwork-editor.test.ts diff --git a/test/unit/editors/ied/__snapshots__/access-point-container.test.snap.js b/packages/open-scd/test/unit/editors/ied/__snapshots__/access-point-container.test.snap.js similarity index 100% rename from test/unit/editors/ied/__snapshots__/access-point-container.test.snap.js rename to packages/open-scd/test/unit/editors/ied/__snapshots__/access-point-container.test.snap.js diff --git a/test/unit/editors/ied/__snapshots__/da-container.test.snap.js b/packages/open-scd/test/unit/editors/ied/__snapshots__/da-container.test.snap.js similarity index 100% rename from test/unit/editors/ied/__snapshots__/da-container.test.snap.js rename to packages/open-scd/test/unit/editors/ied/__snapshots__/da-container.test.snap.js diff --git a/test/unit/editors/ied/__snapshots__/da-wizard.test.snap.js b/packages/open-scd/test/unit/editors/ied/__snapshots__/da-wizard.test.snap.js similarity index 100% rename from test/unit/editors/ied/__snapshots__/da-wizard.test.snap.js rename to packages/open-scd/test/unit/editors/ied/__snapshots__/da-wizard.test.snap.js diff --git a/test/unit/editors/ied/__snapshots__/do-container.test.snap.js b/packages/open-scd/test/unit/editors/ied/__snapshots__/do-container.test.snap.js similarity index 100% rename from test/unit/editors/ied/__snapshots__/do-container.test.snap.js rename to packages/open-scd/test/unit/editors/ied/__snapshots__/do-container.test.snap.js diff --git a/test/unit/editors/ied/__snapshots__/do-wizard.test.snap.js b/packages/open-scd/test/unit/editors/ied/__snapshots__/do-wizard.test.snap.js similarity index 100% rename from test/unit/editors/ied/__snapshots__/do-wizard.test.snap.js rename to packages/open-scd/test/unit/editors/ied/__snapshots__/do-wizard.test.snap.js diff --git a/test/unit/editors/ied/__snapshots__/element-path.test.snap.js b/packages/open-scd/test/unit/editors/ied/__snapshots__/element-path.test.snap.js similarity index 100% rename from test/unit/editors/ied/__snapshots__/element-path.test.snap.js rename to packages/open-scd/test/unit/editors/ied/__snapshots__/element-path.test.snap.js diff --git a/test/unit/editors/ied/__snapshots__/ied-container.test.snap.js b/packages/open-scd/test/unit/editors/ied/__snapshots__/ied-container.test.snap.js similarity index 100% rename from test/unit/editors/ied/__snapshots__/ied-container.test.snap.js rename to packages/open-scd/test/unit/editors/ied/__snapshots__/ied-container.test.snap.js diff --git a/test/unit/editors/ied/__snapshots__/ldevice-container.test.snap.js b/packages/open-scd/test/unit/editors/ied/__snapshots__/ldevice-container.test.snap.js similarity index 100% rename from test/unit/editors/ied/__snapshots__/ldevice-container.test.snap.js rename to packages/open-scd/test/unit/editors/ied/__snapshots__/ldevice-container.test.snap.js diff --git a/test/unit/editors/ied/__snapshots__/ln-container.test.snap.js b/packages/open-scd/test/unit/editors/ied/__snapshots__/ln-container.test.snap.js similarity index 100% rename from test/unit/editors/ied/__snapshots__/ln-container.test.snap.js rename to packages/open-scd/test/unit/editors/ied/__snapshots__/ln-container.test.snap.js diff --git a/test/unit/editors/ied/__snapshots__/server-container.test.snap.js b/packages/open-scd/test/unit/editors/ied/__snapshots__/server-container.test.snap.js similarity index 100% rename from test/unit/editors/ied/__snapshots__/server-container.test.snap.js rename to packages/open-scd/test/unit/editors/ied/__snapshots__/server-container.test.snap.js diff --git a/test/unit/editors/ied/access-point-container.test.ts b/packages/open-scd/test/unit/editors/ied/access-point-container.test.ts similarity index 100% rename from test/unit/editors/ied/access-point-container.test.ts rename to packages/open-scd/test/unit/editors/ied/access-point-container.test.ts diff --git a/test/unit/editors/ied/da-container.test.ts b/packages/open-scd/test/unit/editors/ied/da-container.test.ts similarity index 100% rename from test/unit/editors/ied/da-container.test.ts rename to packages/open-scd/test/unit/editors/ied/da-container.test.ts diff --git a/test/unit/editors/ied/da-wizard.test.ts b/packages/open-scd/test/unit/editors/ied/da-wizard.test.ts similarity index 100% rename from test/unit/editors/ied/da-wizard.test.ts rename to packages/open-scd/test/unit/editors/ied/da-wizard.test.ts diff --git a/test/unit/editors/ied/do-container.test.ts b/packages/open-scd/test/unit/editors/ied/do-container.test.ts similarity index 100% rename from test/unit/editors/ied/do-container.test.ts rename to packages/open-scd/test/unit/editors/ied/do-container.test.ts diff --git a/test/unit/editors/ied/do-wizard.test.ts b/packages/open-scd/test/unit/editors/ied/do-wizard.test.ts similarity index 100% rename from test/unit/editors/ied/do-wizard.test.ts rename to packages/open-scd/test/unit/editors/ied/do-wizard.test.ts diff --git a/test/unit/editors/ied/element-path.test.ts b/packages/open-scd/test/unit/editors/ied/element-path.test.ts similarity index 100% rename from test/unit/editors/ied/element-path.test.ts rename to packages/open-scd/test/unit/editors/ied/element-path.test.ts diff --git a/test/unit/editors/ied/foundation.test.ts b/packages/open-scd/test/unit/editors/ied/foundation.test.ts similarity index 100% rename from test/unit/editors/ied/foundation.test.ts rename to packages/open-scd/test/unit/editors/ied/foundation.test.ts diff --git a/test/unit/editors/ied/ied-container.test.ts b/packages/open-scd/test/unit/editors/ied/ied-container.test.ts similarity index 100% rename from test/unit/editors/ied/ied-container.test.ts rename to packages/open-scd/test/unit/editors/ied/ied-container.test.ts diff --git a/test/unit/editors/ied/ldevice-container.test.ts b/packages/open-scd/test/unit/editors/ied/ldevice-container.test.ts similarity index 100% rename from test/unit/editors/ied/ldevice-container.test.ts rename to packages/open-scd/test/unit/editors/ied/ldevice-container.test.ts diff --git a/test/unit/editors/ied/ln-container.test.ts b/packages/open-scd/test/unit/editors/ied/ln-container.test.ts similarity index 100% rename from test/unit/editors/ied/ln-container.test.ts rename to packages/open-scd/test/unit/editors/ied/ln-container.test.ts diff --git a/test/unit/editors/ied/server-container.test.ts b/packages/open-scd/test/unit/editors/ied/server-container.test.ts similarity index 100% rename from test/unit/editors/ied/server-container.test.ts rename to packages/open-scd/test/unit/editors/ied/server-container.test.ts diff --git a/test/unit/editors/ied/test-support.ts b/packages/open-scd/test/unit/editors/ied/test-support.ts similarity index 100% rename from test/unit/editors/ied/test-support.ts rename to packages/open-scd/test/unit/editors/ied/test-support.ts diff --git a/test/unit/editors/protocol104/__snapshots__/connectedap-container.test.snap.js b/packages/open-scd/test/unit/editors/protocol104/__snapshots__/connectedap-container.test.snap.js similarity index 100% rename from test/unit/editors/protocol104/__snapshots__/connectedap-container.test.snap.js rename to packages/open-scd/test/unit/editors/protocol104/__snapshots__/connectedap-container.test.snap.js diff --git a/test/unit/editors/protocol104/__snapshots__/doi-container.test.snap.js b/packages/open-scd/test/unit/editors/protocol104/__snapshots__/doi-container.test.snap.js similarity index 100% rename from test/unit/editors/protocol104/__snapshots__/doi-container.test.snap.js rename to packages/open-scd/test/unit/editors/protocol104/__snapshots__/doi-container.test.snap.js diff --git a/test/unit/editors/protocol104/__snapshots__/ied-container.test.snap.js b/packages/open-scd/test/unit/editors/protocol104/__snapshots__/ied-container.test.snap.js similarity index 100% rename from test/unit/editors/protocol104/__snapshots__/ied-container.test.snap.js rename to packages/open-scd/test/unit/editors/protocol104/__snapshots__/ied-container.test.snap.js diff --git a/test/unit/editors/protocol104/__snapshots__/network-container.test.snap.js b/packages/open-scd/test/unit/editors/protocol104/__snapshots__/network-container.test.snap.js similarity index 100% rename from test/unit/editors/protocol104/__snapshots__/network-container.test.snap.js rename to packages/open-scd/test/unit/editors/protocol104/__snapshots__/network-container.test.snap.js diff --git a/test/unit/editors/protocol104/__snapshots__/subnetwork-container.test.snap.js b/packages/open-scd/test/unit/editors/protocol104/__snapshots__/subnetwork-container.test.snap.js similarity index 100% rename from test/unit/editors/protocol104/__snapshots__/subnetwork-container.test.snap.js rename to packages/open-scd/test/unit/editors/protocol104/__snapshots__/subnetwork-container.test.snap.js diff --git a/test/unit/editors/protocol104/__snapshots__/values-container.test.snap.js b/packages/open-scd/test/unit/editors/protocol104/__snapshots__/values-container.test.snap.js similarity index 100% rename from test/unit/editors/protocol104/__snapshots__/values-container.test.snap.js rename to packages/open-scd/test/unit/editors/protocol104/__snapshots__/values-container.test.snap.js diff --git a/test/unit/editors/protocol104/connectedap-container.test.ts b/packages/open-scd/test/unit/editors/protocol104/connectedap-container.test.ts similarity index 100% rename from test/unit/editors/protocol104/connectedap-container.test.ts rename to packages/open-scd/test/unit/editors/protocol104/connectedap-container.test.ts diff --git a/test/unit/editors/protocol104/doi-container.test.ts b/packages/open-scd/test/unit/editors/protocol104/doi-container.test.ts similarity index 100% rename from test/unit/editors/protocol104/doi-container.test.ts rename to packages/open-scd/test/unit/editors/protocol104/doi-container.test.ts diff --git a/test/unit/editors/protocol104/foundation/actions.test.ts b/packages/open-scd/test/unit/editors/protocol104/foundation/actions.test.ts similarity index 100% rename from test/unit/editors/protocol104/foundation/actions.test.ts rename to packages/open-scd/test/unit/editors/protocol104/foundation/actions.test.ts diff --git a/test/unit/editors/protocol104/foundation/cdc.test.ts b/packages/open-scd/test/unit/editors/protocol104/foundation/cdc.test.ts similarity index 100% rename from test/unit/editors/protocol104/foundation/cdc.test.ts rename to packages/open-scd/test/unit/editors/protocol104/foundation/cdc.test.ts diff --git a/test/unit/editors/protocol104/foundation/foundation.test.ts b/packages/open-scd/test/unit/editors/protocol104/foundation/foundation.test.ts similarity index 100% rename from test/unit/editors/protocol104/foundation/foundation.test.ts rename to packages/open-scd/test/unit/editors/protocol104/foundation/foundation.test.ts diff --git a/test/unit/editors/protocol104/foundation/private.test.ts b/packages/open-scd/test/unit/editors/protocol104/foundation/private.test.ts similarity index 100% rename from test/unit/editors/protocol104/foundation/private.test.ts rename to packages/open-scd/test/unit/editors/protocol104/foundation/private.test.ts diff --git a/test/unit/editors/protocol104/ied-container.test.ts b/packages/open-scd/test/unit/editors/protocol104/ied-container.test.ts similarity index 100% rename from test/unit/editors/protocol104/ied-container.test.ts rename to packages/open-scd/test/unit/editors/protocol104/ied-container.test.ts diff --git a/test/unit/editors/protocol104/network-container.test.ts b/packages/open-scd/test/unit/editors/protocol104/network-container.test.ts similarity index 100% rename from test/unit/editors/protocol104/network-container.test.ts rename to packages/open-scd/test/unit/editors/protocol104/network-container.test.ts diff --git a/test/unit/editors/protocol104/subnetwork-container.test.ts b/packages/open-scd/test/unit/editors/protocol104/subnetwork-container.test.ts similarity index 100% rename from test/unit/editors/protocol104/subnetwork-container.test.ts rename to packages/open-scd/test/unit/editors/protocol104/subnetwork-container.test.ts diff --git a/test/unit/editors/protocol104/values-container.test.ts b/packages/open-scd/test/unit/editors/protocol104/values-container.test.ts similarity index 100% rename from test/unit/editors/protocol104/values-container.test.ts rename to packages/open-scd/test/unit/editors/protocol104/values-container.test.ts diff --git a/test/unit/editors/protocol104/wizards/__snapshots__/address.test.snap.js b/packages/open-scd/test/unit/editors/protocol104/wizards/__snapshots__/address.test.snap.js similarity index 100% rename from test/unit/editors/protocol104/wizards/__snapshots__/address.test.snap.js rename to packages/open-scd/test/unit/editors/protocol104/wizards/__snapshots__/address.test.snap.js diff --git a/test/unit/editors/protocol104/wizards/__snapshots__/connectedap.test.snap.js b/packages/open-scd/test/unit/editors/protocol104/wizards/__snapshots__/connectedap.test.snap.js similarity index 100% rename from test/unit/editors/protocol104/wizards/__snapshots__/connectedap.test.snap.js rename to packages/open-scd/test/unit/editors/protocol104/wizards/__snapshots__/connectedap.test.snap.js diff --git a/test/unit/editors/protocol104/wizards/__snapshots__/createAddresses.test.snap.js b/packages/open-scd/test/unit/editors/protocol104/wizards/__snapshots__/createAddresses.test.snap.js similarity index 100% rename from test/unit/editors/protocol104/wizards/__snapshots__/createAddresses.test.snap.js rename to packages/open-scd/test/unit/editors/protocol104/wizards/__snapshots__/createAddresses.test.snap.js diff --git a/test/unit/editors/protocol104/wizards/__snapshots__/doi.test.snap.js b/packages/open-scd/test/unit/editors/protocol104/wizards/__snapshots__/doi.test.snap.js similarity index 100% rename from test/unit/editors/protocol104/wizards/__snapshots__/doi.test.snap.js rename to packages/open-scd/test/unit/editors/protocol104/wizards/__snapshots__/doi.test.snap.js diff --git a/test/unit/editors/protocol104/wizards/__snapshots__/logiclink.test.snap.js b/packages/open-scd/test/unit/editors/protocol104/wizards/__snapshots__/logiclink.test.snap.js similarity index 100% rename from test/unit/editors/protocol104/wizards/__snapshots__/logiclink.test.snap.js rename to packages/open-scd/test/unit/editors/protocol104/wizards/__snapshots__/logiclink.test.snap.js diff --git a/test/unit/editors/protocol104/wizards/__snapshots__/redundancygroup.test.snap.js b/packages/open-scd/test/unit/editors/protocol104/wizards/__snapshots__/redundancygroup.test.snap.js similarity index 100% rename from test/unit/editors/protocol104/wizards/__snapshots__/redundancygroup.test.snap.js rename to packages/open-scd/test/unit/editors/protocol104/wizards/__snapshots__/redundancygroup.test.snap.js diff --git a/test/unit/editors/protocol104/wizards/__snapshots__/selectDo.test.snap.js b/packages/open-scd/test/unit/editors/protocol104/wizards/__snapshots__/selectDo.test.snap.js similarity index 100% rename from test/unit/editors/protocol104/wizards/__snapshots__/selectDo.test.snap.js rename to packages/open-scd/test/unit/editors/protocol104/wizards/__snapshots__/selectDo.test.snap.js diff --git a/test/unit/editors/protocol104/wizards/__snapshots__/selectDoi.test.snap.js b/packages/open-scd/test/unit/editors/protocol104/wizards/__snapshots__/selectDoi.test.snap.js similarity index 100% rename from test/unit/editors/protocol104/wizards/__snapshots__/selectDoi.test.snap.js rename to packages/open-scd/test/unit/editors/protocol104/wizards/__snapshots__/selectDoi.test.snap.js diff --git a/test/unit/editors/protocol104/wizards/__snapshots__/subnetwork.test.snap.js b/packages/open-scd/test/unit/editors/protocol104/wizards/__snapshots__/subnetwork.test.snap.js similarity index 100% rename from test/unit/editors/protocol104/wizards/__snapshots__/subnetwork.test.snap.js rename to packages/open-scd/test/unit/editors/protocol104/wizards/__snapshots__/subnetwork.test.snap.js diff --git a/test/unit/editors/protocol104/wizards/address.test.ts b/packages/open-scd/test/unit/editors/protocol104/wizards/address.test.ts similarity index 100% rename from test/unit/editors/protocol104/wizards/address.test.ts rename to packages/open-scd/test/unit/editors/protocol104/wizards/address.test.ts diff --git a/test/unit/editors/protocol104/wizards/connectedap.test.ts b/packages/open-scd/test/unit/editors/protocol104/wizards/connectedap.test.ts similarity index 100% rename from test/unit/editors/protocol104/wizards/connectedap.test.ts rename to packages/open-scd/test/unit/editors/protocol104/wizards/connectedap.test.ts diff --git a/test/unit/editors/protocol104/wizards/createAddresses.test.ts b/packages/open-scd/test/unit/editors/protocol104/wizards/createAddresses.test.ts similarity index 100% rename from test/unit/editors/protocol104/wizards/createAddresses.test.ts rename to packages/open-scd/test/unit/editors/protocol104/wizards/createAddresses.test.ts diff --git a/test/unit/editors/protocol104/wizards/doi.test.ts b/packages/open-scd/test/unit/editors/protocol104/wizards/doi.test.ts similarity index 100% rename from test/unit/editors/protocol104/wizards/doi.test.ts rename to packages/open-scd/test/unit/editors/protocol104/wizards/doi.test.ts diff --git a/test/unit/editors/protocol104/wizards/logiclink.test.ts b/packages/open-scd/test/unit/editors/protocol104/wizards/logiclink.test.ts similarity index 100% rename from test/unit/editors/protocol104/wizards/logiclink.test.ts rename to packages/open-scd/test/unit/editors/protocol104/wizards/logiclink.test.ts diff --git a/test/unit/editors/protocol104/wizards/redundancygroup.test.ts b/packages/open-scd/test/unit/editors/protocol104/wizards/redundancygroup.test.ts similarity index 100% rename from test/unit/editors/protocol104/wizards/redundancygroup.test.ts rename to packages/open-scd/test/unit/editors/protocol104/wizards/redundancygroup.test.ts diff --git a/test/unit/editors/protocol104/wizards/selectDo.test.ts b/packages/open-scd/test/unit/editors/protocol104/wizards/selectDo.test.ts similarity index 100% rename from test/unit/editors/protocol104/wizards/selectDo.test.ts rename to packages/open-scd/test/unit/editors/protocol104/wizards/selectDo.test.ts diff --git a/test/unit/editors/protocol104/wizards/subnetwork.test.ts b/packages/open-scd/test/unit/editors/protocol104/wizards/subnetwork.test.ts similarity index 100% rename from test/unit/editors/protocol104/wizards/subnetwork.test.ts rename to packages/open-scd/test/unit/editors/protocol104/wizards/subnetwork.test.ts diff --git a/test/unit/editors/publisher/__snapshots__/data-set-editor.test.snap.js b/packages/open-scd/test/unit/editors/publisher/__snapshots__/data-set-editor.test.snap.js similarity index 100% rename from test/unit/editors/publisher/__snapshots__/data-set-editor.test.snap.js rename to packages/open-scd/test/unit/editors/publisher/__snapshots__/data-set-editor.test.snap.js diff --git a/test/unit/editors/publisher/__snapshots__/data-set-element-editor.test.snap.js b/packages/open-scd/test/unit/editors/publisher/__snapshots__/data-set-element-editor.test.snap.js similarity index 100% rename from test/unit/editors/publisher/__snapshots__/data-set-element-editor.test.snap.js rename to packages/open-scd/test/unit/editors/publisher/__snapshots__/data-set-element-editor.test.snap.js diff --git a/test/unit/editors/publisher/__snapshots__/gse-control-editor.test.snap.js b/packages/open-scd/test/unit/editors/publisher/__snapshots__/gse-control-editor.test.snap.js similarity index 100% rename from test/unit/editors/publisher/__snapshots__/gse-control-editor.test.snap.js rename to packages/open-scd/test/unit/editors/publisher/__snapshots__/gse-control-editor.test.snap.js diff --git a/test/unit/editors/publisher/__snapshots__/gse-control-element-editor.test.snap.js b/packages/open-scd/test/unit/editors/publisher/__snapshots__/gse-control-element-editor.test.snap.js similarity index 100% rename from test/unit/editors/publisher/__snapshots__/gse-control-element-editor.test.snap.js rename to packages/open-scd/test/unit/editors/publisher/__snapshots__/gse-control-element-editor.test.snap.js diff --git a/test/unit/editors/publisher/__snapshots__/report-control-editor.test.snap.js b/packages/open-scd/test/unit/editors/publisher/__snapshots__/report-control-editor.test.snap.js similarity index 100% rename from test/unit/editors/publisher/__snapshots__/report-control-editor.test.snap.js rename to packages/open-scd/test/unit/editors/publisher/__snapshots__/report-control-editor.test.snap.js diff --git a/test/unit/editors/publisher/__snapshots__/report-control-element-editor.test.snap.js b/packages/open-scd/test/unit/editors/publisher/__snapshots__/report-control-element-editor.test.snap.js similarity index 100% rename from test/unit/editors/publisher/__snapshots__/report-control-element-editor.test.snap.js rename to packages/open-scd/test/unit/editors/publisher/__snapshots__/report-control-element-editor.test.snap.js diff --git a/test/unit/editors/publisher/__snapshots__/sampled-value-control-editor.test.snap.js b/packages/open-scd/test/unit/editors/publisher/__snapshots__/sampled-value-control-editor.test.snap.js similarity index 100% rename from test/unit/editors/publisher/__snapshots__/sampled-value-control-editor.test.snap.js rename to packages/open-scd/test/unit/editors/publisher/__snapshots__/sampled-value-control-editor.test.snap.js diff --git a/test/unit/editors/publisher/__snapshots__/sampled-value-control-element-editor.test.snap.js b/packages/open-scd/test/unit/editors/publisher/__snapshots__/sampled-value-control-element-editor.test.snap.js similarity index 100% rename from test/unit/editors/publisher/__snapshots__/sampled-value-control-element-editor.test.snap.js rename to packages/open-scd/test/unit/editors/publisher/__snapshots__/sampled-value-control-element-editor.test.snap.js diff --git a/test/unit/editors/publisher/data-set-editor.test.ts b/packages/open-scd/test/unit/editors/publisher/data-set-editor.test.ts similarity index 100% rename from test/unit/editors/publisher/data-set-editor.test.ts rename to packages/open-scd/test/unit/editors/publisher/data-set-editor.test.ts diff --git a/test/unit/editors/publisher/data-set-element-editor.test.ts b/packages/open-scd/test/unit/editors/publisher/data-set-element-editor.test.ts similarity index 100% rename from test/unit/editors/publisher/data-set-element-editor.test.ts rename to packages/open-scd/test/unit/editors/publisher/data-set-element-editor.test.ts diff --git a/test/unit/editors/publisher/foundation.test.ts b/packages/open-scd/test/unit/editors/publisher/foundation.test.ts similarity index 100% rename from test/unit/editors/publisher/foundation.test.ts rename to packages/open-scd/test/unit/editors/publisher/foundation.test.ts diff --git a/test/unit/editors/publisher/gse-control-editor.test.ts b/packages/open-scd/test/unit/editors/publisher/gse-control-editor.test.ts similarity index 100% rename from test/unit/editors/publisher/gse-control-editor.test.ts rename to packages/open-scd/test/unit/editors/publisher/gse-control-editor.test.ts diff --git a/test/unit/editors/publisher/gse-control-element-editor.test.ts b/packages/open-scd/test/unit/editors/publisher/gse-control-element-editor.test.ts similarity index 100% rename from test/unit/editors/publisher/gse-control-element-editor.test.ts rename to packages/open-scd/test/unit/editors/publisher/gse-control-element-editor.test.ts diff --git a/test/unit/editors/publisher/report-control-editor.test.ts b/packages/open-scd/test/unit/editors/publisher/report-control-editor.test.ts similarity index 100% rename from test/unit/editors/publisher/report-control-editor.test.ts rename to packages/open-scd/test/unit/editors/publisher/report-control-editor.test.ts diff --git a/test/unit/editors/publisher/report-control-element-editor.test.ts b/packages/open-scd/test/unit/editors/publisher/report-control-element-editor.test.ts similarity index 100% rename from test/unit/editors/publisher/report-control-element-editor.test.ts rename to packages/open-scd/test/unit/editors/publisher/report-control-element-editor.test.ts diff --git a/test/unit/editors/publisher/sampled-value-control-editor.test.ts b/packages/open-scd/test/unit/editors/publisher/sampled-value-control-editor.test.ts similarity index 100% rename from test/unit/editors/publisher/sampled-value-control-editor.test.ts rename to packages/open-scd/test/unit/editors/publisher/sampled-value-control-editor.test.ts diff --git a/test/unit/editors/publisher/sampled-value-control-element-editor.test.ts b/packages/open-scd/test/unit/editors/publisher/sampled-value-control-element-editor.test.ts similarity index 100% rename from test/unit/editors/publisher/sampled-value-control-element-editor.test.ts rename to packages/open-scd/test/unit/editors/publisher/sampled-value-control-element-editor.test.ts diff --git a/test/unit/editors/singlelinediagram/__snapshots__/sld-drawing.test.snap.js b/packages/open-scd/test/unit/editors/singlelinediagram/__snapshots__/sld-drawing.test.snap.js similarity index 100% rename from test/unit/editors/singlelinediagram/__snapshots__/sld-drawing.test.snap.js rename to packages/open-scd/test/unit/editors/singlelinediagram/__snapshots__/sld-drawing.test.snap.js diff --git a/test/unit/editors/singlelinediagram/foundation.test.ts b/packages/open-scd/test/unit/editors/singlelinediagram/foundation.test.ts similarity index 100% rename from test/unit/editors/singlelinediagram/foundation.test.ts rename to packages/open-scd/test/unit/editors/singlelinediagram/foundation.test.ts diff --git a/test/unit/editors/singlelinediagram/orthogonal-connector.test.ts b/packages/open-scd/test/unit/editors/singlelinediagram/orthogonal-connector.test.ts similarity index 100% rename from test/unit/editors/singlelinediagram/orthogonal-connector.test.ts rename to packages/open-scd/test/unit/editors/singlelinediagram/orthogonal-connector.test.ts diff --git a/test/unit/editors/singlelinediagram/sld-drawing.test.ts b/packages/open-scd/test/unit/editors/singlelinediagram/sld-drawing.test.ts similarity index 100% rename from test/unit/editors/singlelinediagram/sld-drawing.test.ts rename to packages/open-scd/test/unit/editors/singlelinediagram/sld-drawing.test.ts diff --git a/test/unit/editors/singlelinediagram/wizards/__snapshots__/bay.test.snap.js b/packages/open-scd/test/unit/editors/singlelinediagram/wizards/__snapshots__/bay.test.snap.js similarity index 100% rename from test/unit/editors/singlelinediagram/wizards/__snapshots__/bay.test.snap.js rename to packages/open-scd/test/unit/editors/singlelinediagram/wizards/__snapshots__/bay.test.snap.js diff --git a/test/unit/editors/singlelinediagram/wizards/__snapshots__/conductingequipment.test.snap.js b/packages/open-scd/test/unit/editors/singlelinediagram/wizards/__snapshots__/conductingequipment.test.snap.js similarity index 100% rename from test/unit/editors/singlelinediagram/wizards/__snapshots__/conductingequipment.test.snap.js rename to packages/open-scd/test/unit/editors/singlelinediagram/wizards/__snapshots__/conductingequipment.test.snap.js diff --git a/test/unit/editors/singlelinediagram/wizards/__snapshots__/powertransformer.test.snap.js b/packages/open-scd/test/unit/editors/singlelinediagram/wizards/__snapshots__/powertransformer.test.snap.js similarity index 100% rename from test/unit/editors/singlelinediagram/wizards/__snapshots__/powertransformer.test.snap.js rename to packages/open-scd/test/unit/editors/singlelinediagram/wizards/__snapshots__/powertransformer.test.snap.js diff --git a/test/unit/editors/singlelinediagram/wizards/bay.test.ts b/packages/open-scd/test/unit/editors/singlelinediagram/wizards/bay.test.ts similarity index 100% rename from test/unit/editors/singlelinediagram/wizards/bay.test.ts rename to packages/open-scd/test/unit/editors/singlelinediagram/wizards/bay.test.ts diff --git a/test/unit/editors/singlelinediagram/wizards/conductingequipment.test.ts b/packages/open-scd/test/unit/editors/singlelinediagram/wizards/conductingequipment.test.ts similarity index 100% rename from test/unit/editors/singlelinediagram/wizards/conductingequipment.test.ts rename to packages/open-scd/test/unit/editors/singlelinediagram/wizards/conductingequipment.test.ts diff --git a/test/unit/editors/singlelinediagram/wizards/foundation.test.ts b/packages/open-scd/test/unit/editors/singlelinediagram/wizards/foundation.test.ts similarity index 100% rename from test/unit/editors/singlelinediagram/wizards/foundation.test.ts rename to packages/open-scd/test/unit/editors/singlelinediagram/wizards/foundation.test.ts diff --git a/test/unit/editors/singlelinediagram/wizards/powertransformer.test.ts b/packages/open-scd/test/unit/editors/singlelinediagram/wizards/powertransformer.test.ts similarity index 100% rename from test/unit/editors/singlelinediagram/wizards/powertransformer.test.ts rename to packages/open-scd/test/unit/editors/singlelinediagram/wizards/powertransformer.test.ts diff --git a/test/unit/editors/singlelinediagram/wizards/wizard-library.test.ts b/packages/open-scd/test/unit/editors/singlelinediagram/wizards/wizard-library.test.ts similarity index 100% rename from test/unit/editors/singlelinediagram/wizards/wizard-library.test.ts rename to packages/open-scd/test/unit/editors/singlelinediagram/wizards/wizard-library.test.ts diff --git a/test/unit/editors/subscription/__snapshots__/fcda-binding-list.test.snap.js b/packages/open-scd/test/unit/editors/subscription/__snapshots__/fcda-binding-list.test.snap.js similarity index 100% rename from test/unit/editors/subscription/__snapshots__/fcda-binding-list.test.snap.js rename to packages/open-scd/test/unit/editors/subscription/__snapshots__/fcda-binding-list.test.snap.js diff --git a/test/unit/editors/subscription/__snapshots__/ied-list.test.snap.js b/packages/open-scd/test/unit/editors/subscription/__snapshots__/ied-list.test.snap.js similarity index 100% rename from test/unit/editors/subscription/__snapshots__/ied-list.test.snap.js rename to packages/open-scd/test/unit/editors/subscription/__snapshots__/ied-list.test.snap.js diff --git a/test/unit/editors/subscription/fcda-binding-list.test.ts b/packages/open-scd/test/unit/editors/subscription/fcda-binding-list.test.ts similarity index 100% rename from test/unit/editors/subscription/fcda-binding-list.test.ts rename to packages/open-scd/test/unit/editors/subscription/fcda-binding-list.test.ts diff --git a/test/unit/editors/subscription/foundation.test.ts b/packages/open-scd/test/unit/editors/subscription/foundation.test.ts similarity index 100% rename from test/unit/editors/subscription/foundation.test.ts rename to packages/open-scd/test/unit/editors/subscription/foundation.test.ts diff --git a/test/unit/editors/subscription/goose/__snapshots__/goose-list.test.snap.js b/packages/open-scd/test/unit/editors/subscription/goose/__snapshots__/goose-list.test.snap.js similarity index 100% rename from test/unit/editors/subscription/goose/__snapshots__/goose-list.test.snap.js rename to packages/open-scd/test/unit/editors/subscription/goose/__snapshots__/goose-list.test.snap.js diff --git a/test/unit/editors/subscription/goose/__snapshots__/ied-list.test.snap.js b/packages/open-scd/test/unit/editors/subscription/goose/__snapshots__/ied-list.test.snap.js similarity index 100% rename from test/unit/editors/subscription/goose/__snapshots__/ied-list.test.snap.js rename to packages/open-scd/test/unit/editors/subscription/goose/__snapshots__/ied-list.test.snap.js diff --git a/test/unit/editors/subscription/goose/__snapshots__/subscriber-list.test.snap.js b/packages/open-scd/test/unit/editors/subscription/goose/__snapshots__/subscriber-list.test.snap.js similarity index 100% rename from test/unit/editors/subscription/goose/__snapshots__/subscriber-list.test.snap.js rename to packages/open-scd/test/unit/editors/subscription/goose/__snapshots__/subscriber-list.test.snap.js diff --git a/test/unit/editors/subscription/goose/goose-list.test.ts b/packages/open-scd/test/unit/editors/subscription/goose/goose-list.test.ts similarity index 100% rename from test/unit/editors/subscription/goose/goose-list.test.ts rename to packages/open-scd/test/unit/editors/subscription/goose/goose-list.test.ts diff --git a/test/unit/editors/subscription/goose/subscriber-list.test.ts b/packages/open-scd/test/unit/editors/subscription/goose/subscriber-list.test.ts similarity index 100% rename from test/unit/editors/subscription/goose/subscriber-list.test.ts rename to packages/open-scd/test/unit/editors/subscription/goose/subscriber-list.test.ts diff --git a/test/unit/editors/subscription/ied-list.test.ts b/packages/open-scd/test/unit/editors/subscription/ied-list.test.ts similarity index 100% rename from test/unit/editors/subscription/ied-list.test.ts rename to packages/open-scd/test/unit/editors/subscription/ied-list.test.ts diff --git a/test/unit/editors/subscription/later-binding/__snapshots__/ext-ref-later-binding-list.test.snap.js b/packages/open-scd/test/unit/editors/subscription/later-binding/__snapshots__/ext-ref-later-binding-list.test.snap.js similarity index 100% rename from test/unit/editors/subscription/later-binding/__snapshots__/ext-ref-later-binding-list.test.snap.js rename to packages/open-scd/test/unit/editors/subscription/later-binding/__snapshots__/ext-ref-later-binding-list.test.snap.js diff --git a/test/unit/editors/subscription/later-binding/__snapshots__/ext-ref-ln-binding-list.test.snap.js b/packages/open-scd/test/unit/editors/subscription/later-binding/__snapshots__/ext-ref-ln-binding-list.test.snap.js similarity index 100% rename from test/unit/editors/subscription/later-binding/__snapshots__/ext-ref-ln-binding-list.test.snap.js rename to packages/open-scd/test/unit/editors/subscription/later-binding/__snapshots__/ext-ref-ln-binding-list.test.snap.js diff --git a/test/unit/editors/subscription/later-binding/ext-ref-later-binding-list.test.ts b/packages/open-scd/test/unit/editors/subscription/later-binding/ext-ref-later-binding-list.test.ts similarity index 100% rename from test/unit/editors/subscription/later-binding/ext-ref-later-binding-list.test.ts rename to packages/open-scd/test/unit/editors/subscription/later-binding/ext-ref-later-binding-list.test.ts diff --git a/test/unit/editors/subscription/later-binding/ext-ref-ln-binding-list.test.ts b/packages/open-scd/test/unit/editors/subscription/later-binding/ext-ref-ln-binding-list.test.ts similarity index 100% rename from test/unit/editors/subscription/later-binding/ext-ref-ln-binding-list.test.ts rename to packages/open-scd/test/unit/editors/subscription/later-binding/ext-ref-ln-binding-list.test.ts diff --git a/test/unit/editors/subscription/later-binding/foundation.test.ts b/packages/open-scd/test/unit/editors/subscription/later-binding/foundation.test.ts similarity index 100% rename from test/unit/editors/subscription/later-binding/foundation.test.ts rename to packages/open-scd/test/unit/editors/subscription/later-binding/foundation.test.ts diff --git a/test/unit/editors/subscription/sampledvalues/__snapshots__/ied-list.test.snap.js b/packages/open-scd/test/unit/editors/subscription/sampledvalues/__snapshots__/ied-list.test.snap.js similarity index 100% rename from test/unit/editors/subscription/sampledvalues/__snapshots__/ied-list.test.snap.js rename to packages/open-scd/test/unit/editors/subscription/sampledvalues/__snapshots__/ied-list.test.snap.js diff --git a/test/unit/editors/subscription/sampledvalues/__snapshots__/smv-list.test.snap.js b/packages/open-scd/test/unit/editors/subscription/sampledvalues/__snapshots__/smv-list.test.snap.js similarity index 100% rename from test/unit/editors/subscription/sampledvalues/__snapshots__/smv-list.test.snap.js rename to packages/open-scd/test/unit/editors/subscription/sampledvalues/__snapshots__/smv-list.test.snap.js diff --git a/test/unit/editors/subscription/sampledvalues/__snapshots__/subscriber-list.test.snap.js b/packages/open-scd/test/unit/editors/subscription/sampledvalues/__snapshots__/subscriber-list.test.snap.js similarity index 100% rename from test/unit/editors/subscription/sampledvalues/__snapshots__/subscriber-list.test.snap.js rename to packages/open-scd/test/unit/editors/subscription/sampledvalues/__snapshots__/subscriber-list.test.snap.js diff --git a/test/unit/editors/subscription/sampledvalues/smv-list.test.ts b/packages/open-scd/test/unit/editors/subscription/sampledvalues/smv-list.test.ts similarity index 100% rename from test/unit/editors/subscription/sampledvalues/smv-list.test.ts rename to packages/open-scd/test/unit/editors/subscription/sampledvalues/smv-list.test.ts diff --git a/test/unit/editors/subscription/sampledvalues/subscriber-list.test.ts b/packages/open-scd/test/unit/editors/subscription/sampledvalues/subscriber-list.test.ts similarity index 100% rename from test/unit/editors/subscription/sampledvalues/subscriber-list.test.ts rename to packages/open-scd/test/unit/editors/subscription/sampledvalues/subscriber-list.test.ts diff --git a/test/unit/editors/subscription/supervision.test.ts b/packages/open-scd/test/unit/editors/subscription/supervision.test.ts similarity index 100% rename from test/unit/editors/subscription/supervision.test.ts rename to packages/open-scd/test/unit/editors/subscription/supervision.test.ts diff --git a/test/unit/editors/substation/__snapshots__/bay-editor.test.snap.js b/packages/open-scd/test/unit/editors/substation/__snapshots__/bay-editor.test.snap.js similarity index 100% rename from test/unit/editors/substation/__snapshots__/bay-editor.test.snap.js rename to packages/open-scd/test/unit/editors/substation/__snapshots__/bay-editor.test.snap.js diff --git a/test/unit/editors/substation/__snapshots__/conducting-equipment-editor.test.snap.js b/packages/open-scd/test/unit/editors/substation/__snapshots__/conducting-equipment-editor.test.snap.js similarity index 100% rename from test/unit/editors/substation/__snapshots__/conducting-equipment-editor.test.snap.js rename to packages/open-scd/test/unit/editors/substation/__snapshots__/conducting-equipment-editor.test.snap.js diff --git a/test/unit/editors/substation/__snapshots__/eq-function-editor.test.snap.js b/packages/open-scd/test/unit/editors/substation/__snapshots__/eq-function-editor.test.snap.js similarity index 100% rename from test/unit/editors/substation/__snapshots__/eq-function-editor.test.snap.js rename to packages/open-scd/test/unit/editors/substation/__snapshots__/eq-function-editor.test.snap.js diff --git a/test/unit/editors/substation/__snapshots__/eq-sub-function-editor.test.snap.js b/packages/open-scd/test/unit/editors/substation/__snapshots__/eq-sub-function-editor.test.snap.js similarity index 100% rename from test/unit/editors/substation/__snapshots__/eq-sub-function-editor.test.snap.js rename to packages/open-scd/test/unit/editors/substation/__snapshots__/eq-sub-function-editor.test.snap.js diff --git a/test/unit/editors/substation/__snapshots__/function-editor.test.snap.js b/packages/open-scd/test/unit/editors/substation/__snapshots__/function-editor.test.snap.js similarity index 100% rename from test/unit/editors/substation/__snapshots__/function-editor.test.snap.js rename to packages/open-scd/test/unit/editors/substation/__snapshots__/function-editor.test.snap.js diff --git a/test/unit/editors/substation/__snapshots__/general-equipment-editor.test.snap.js b/packages/open-scd/test/unit/editors/substation/__snapshots__/general-equipment-editor.test.snap.js similarity index 100% rename from test/unit/editors/substation/__snapshots__/general-equipment-editor.test.snap.js rename to packages/open-scd/test/unit/editors/substation/__snapshots__/general-equipment-editor.test.snap.js diff --git a/test/unit/editors/substation/__snapshots__/ied-editor.test.snap.js b/packages/open-scd/test/unit/editors/substation/__snapshots__/ied-editor.test.snap.js similarity index 100% rename from test/unit/editors/substation/__snapshots__/ied-editor.test.snap.js rename to packages/open-scd/test/unit/editors/substation/__snapshots__/ied-editor.test.snap.js diff --git a/test/unit/editors/substation/__snapshots__/l-node-editor.test.snap.js b/packages/open-scd/test/unit/editors/substation/__snapshots__/l-node-editor.test.snap.js similarity index 100% rename from test/unit/editors/substation/__snapshots__/l-node-editor.test.snap.js rename to packages/open-scd/test/unit/editors/substation/__snapshots__/l-node-editor.test.snap.js diff --git a/test/unit/editors/substation/__snapshots__/line-editor.test.snap.js b/packages/open-scd/test/unit/editors/substation/__snapshots__/line-editor.test.snap.js similarity index 100% rename from test/unit/editors/substation/__snapshots__/line-editor.test.snap.js rename to packages/open-scd/test/unit/editors/substation/__snapshots__/line-editor.test.snap.js diff --git a/test/unit/editors/substation/__snapshots__/powertransformer-editor.test.snap.js b/packages/open-scd/test/unit/editors/substation/__snapshots__/powertransformer-editor.test.snap.js similarity index 100% rename from test/unit/editors/substation/__snapshots__/powertransformer-editor.test.snap.js rename to packages/open-scd/test/unit/editors/substation/__snapshots__/powertransformer-editor.test.snap.js diff --git a/test/unit/editors/substation/__snapshots__/process-editor.test.snap.js b/packages/open-scd/test/unit/editors/substation/__snapshots__/process-editor.test.snap.js similarity index 100% rename from test/unit/editors/substation/__snapshots__/process-editor.test.snap.js rename to packages/open-scd/test/unit/editors/substation/__snapshots__/process-editor.test.snap.js diff --git a/test/unit/editors/substation/__snapshots__/redirectionUI.test.snap.js b/packages/open-scd/test/unit/editors/substation/__snapshots__/redirectionUI.test.snap.js similarity index 100% rename from test/unit/editors/substation/__snapshots__/redirectionUI.test.snap.js rename to packages/open-scd/test/unit/editors/substation/__snapshots__/redirectionUI.test.snap.js diff --git a/test/unit/editors/substation/__snapshots__/sub-equipment-editor.test.snap.js b/packages/open-scd/test/unit/editors/substation/__snapshots__/sub-equipment-editor.test.snap.js similarity index 100% rename from test/unit/editors/substation/__snapshots__/sub-equipment-editor.test.snap.js rename to packages/open-scd/test/unit/editors/substation/__snapshots__/sub-equipment-editor.test.snap.js diff --git a/test/unit/editors/substation/__snapshots__/sub-function-editor.test.snap.js b/packages/open-scd/test/unit/editors/substation/__snapshots__/sub-function-editor.test.snap.js similarity index 100% rename from test/unit/editors/substation/__snapshots__/sub-function-editor.test.snap.js rename to packages/open-scd/test/unit/editors/substation/__snapshots__/sub-function-editor.test.snap.js diff --git a/test/unit/editors/substation/__snapshots__/substation-editor.test.snap.js b/packages/open-scd/test/unit/editors/substation/__snapshots__/substation-editor.test.snap.js similarity index 100% rename from test/unit/editors/substation/__snapshots__/substation-editor.test.snap.js rename to packages/open-scd/test/unit/editors/substation/__snapshots__/substation-editor.test.snap.js diff --git a/test/unit/editors/substation/__snapshots__/tapchanger-editor.test.snap.js b/packages/open-scd/test/unit/editors/substation/__snapshots__/tapchanger-editor.test.snap.js similarity index 100% rename from test/unit/editors/substation/__snapshots__/tapchanger-editor.test.snap.js rename to packages/open-scd/test/unit/editors/substation/__snapshots__/tapchanger-editor.test.snap.js diff --git a/test/unit/editors/substation/__snapshots__/transformer-winding-editor.test.snap.js b/packages/open-scd/test/unit/editors/substation/__snapshots__/transformer-winding-editor.test.snap.js similarity index 100% rename from test/unit/editors/substation/__snapshots__/transformer-winding-editor.test.snap.js rename to packages/open-scd/test/unit/editors/substation/__snapshots__/transformer-winding-editor.test.snap.js diff --git a/test/unit/editors/substation/__snapshots__/voltage-level-editor.test.snap.js b/packages/open-scd/test/unit/editors/substation/__snapshots__/voltage-level-editor.test.snap.js similarity index 100% rename from test/unit/editors/substation/__snapshots__/voltage-level-editor.test.snap.js rename to packages/open-scd/test/unit/editors/substation/__snapshots__/voltage-level-editor.test.snap.js diff --git a/test/unit/editors/substation/__snapshots__/zeroline-pane.test.snap.js b/packages/open-scd/test/unit/editors/substation/__snapshots__/zeroline-pane.test.snap.js similarity index 100% rename from test/unit/editors/substation/__snapshots__/zeroline-pane.test.snap.js rename to packages/open-scd/test/unit/editors/substation/__snapshots__/zeroline-pane.test.snap.js diff --git a/test/unit/editors/substation/bay-editor.test.ts b/packages/open-scd/test/unit/editors/substation/bay-editor.test.ts similarity index 100% rename from test/unit/editors/substation/bay-editor.test.ts rename to packages/open-scd/test/unit/editors/substation/bay-editor.test.ts diff --git a/test/unit/editors/substation/conducting-equipment-editor.test.ts b/packages/open-scd/test/unit/editors/substation/conducting-equipment-editor.test.ts similarity index 100% rename from test/unit/editors/substation/conducting-equipment-editor.test.ts rename to packages/open-scd/test/unit/editors/substation/conducting-equipment-editor.test.ts diff --git a/test/unit/editors/substation/conductingequipmentwizard.test.ts b/packages/open-scd/test/unit/editors/substation/conductingequipmentwizard.test.ts similarity index 100% rename from test/unit/editors/substation/conductingequipmentwizard.test.ts rename to packages/open-scd/test/unit/editors/substation/conductingequipmentwizard.test.ts diff --git a/test/unit/editors/substation/eq-function-editor.test.ts b/packages/open-scd/test/unit/editors/substation/eq-function-editor.test.ts similarity index 100% rename from test/unit/editors/substation/eq-function-editor.test.ts rename to packages/open-scd/test/unit/editors/substation/eq-function-editor.test.ts diff --git a/test/unit/editors/substation/eq-sub-function-editor.test.ts b/packages/open-scd/test/unit/editors/substation/eq-sub-function-editor.test.ts similarity index 100% rename from test/unit/editors/substation/eq-sub-function-editor.test.ts rename to packages/open-scd/test/unit/editors/substation/eq-sub-function-editor.test.ts diff --git a/test/unit/editors/substation/function-editor.test.ts b/packages/open-scd/test/unit/editors/substation/function-editor.test.ts similarity index 100% rename from test/unit/editors/substation/function-editor.test.ts rename to packages/open-scd/test/unit/editors/substation/function-editor.test.ts diff --git a/test/unit/editors/substation/general-equipment-editor.test.ts b/packages/open-scd/test/unit/editors/substation/general-equipment-editor.test.ts similarity index 100% rename from test/unit/editors/substation/general-equipment-editor.test.ts rename to packages/open-scd/test/unit/editors/substation/general-equipment-editor.test.ts diff --git a/test/unit/editors/substation/ied-editor.test.ts b/packages/open-scd/test/unit/editors/substation/ied-editor.test.ts similarity index 100% rename from test/unit/editors/substation/ied-editor.test.ts rename to packages/open-scd/test/unit/editors/substation/ied-editor.test.ts diff --git a/test/unit/editors/substation/l-node-editor.test.ts b/packages/open-scd/test/unit/editors/substation/l-node-editor.test.ts similarity index 100% rename from test/unit/editors/substation/l-node-editor.test.ts rename to packages/open-scd/test/unit/editors/substation/l-node-editor.test.ts diff --git a/test/unit/editors/substation/line-editor.test.ts b/packages/open-scd/test/unit/editors/substation/line-editor.test.ts similarity index 100% rename from test/unit/editors/substation/line-editor.test.ts rename to packages/open-scd/test/unit/editors/substation/line-editor.test.ts diff --git a/test/unit/editors/substation/lnodewizard.test.ts b/packages/open-scd/test/unit/editors/substation/lnodewizard.test.ts similarity index 100% rename from test/unit/editors/substation/lnodewizard.test.ts rename to packages/open-scd/test/unit/editors/substation/lnodewizard.test.ts diff --git a/test/unit/editors/substation/powertransformer-editor.test.ts b/packages/open-scd/test/unit/editors/substation/powertransformer-editor.test.ts similarity index 100% rename from test/unit/editors/substation/powertransformer-editor.test.ts rename to packages/open-scd/test/unit/editors/substation/powertransformer-editor.test.ts diff --git a/test/unit/editors/substation/process-editor.test.ts b/packages/open-scd/test/unit/editors/substation/process-editor.test.ts similarity index 100% rename from test/unit/editors/substation/process-editor.test.ts rename to packages/open-scd/test/unit/editors/substation/process-editor.test.ts diff --git a/test/unit/editors/substation/redirectionUI.test.ts b/packages/open-scd/test/unit/editors/substation/redirectionUI.test.ts similarity index 100% rename from test/unit/editors/substation/redirectionUI.test.ts rename to packages/open-scd/test/unit/editors/substation/redirectionUI.test.ts diff --git a/test/unit/editors/substation/sub-equipment-editor.test.ts b/packages/open-scd/test/unit/editors/substation/sub-equipment-editor.test.ts similarity index 100% rename from test/unit/editors/substation/sub-equipment-editor.test.ts rename to packages/open-scd/test/unit/editors/substation/sub-equipment-editor.test.ts diff --git a/test/unit/editors/substation/sub-function-editor.test.ts b/packages/open-scd/test/unit/editors/substation/sub-function-editor.test.ts similarity index 100% rename from test/unit/editors/substation/sub-function-editor.test.ts rename to packages/open-scd/test/unit/editors/substation/sub-function-editor.test.ts diff --git a/test/unit/editors/substation/substation-editor.test.ts b/packages/open-scd/test/unit/editors/substation/substation-editor.test.ts similarity index 100% rename from test/unit/editors/substation/substation-editor.test.ts rename to packages/open-scd/test/unit/editors/substation/substation-editor.test.ts diff --git a/test/unit/editors/substation/tapchanger-editor.test.ts b/packages/open-scd/test/unit/editors/substation/tapchanger-editor.test.ts similarity index 100% rename from test/unit/editors/substation/tapchanger-editor.test.ts rename to packages/open-scd/test/unit/editors/substation/tapchanger-editor.test.ts diff --git a/test/unit/editors/substation/transformer-winding-editor.test.ts b/packages/open-scd/test/unit/editors/substation/transformer-winding-editor.test.ts similarity index 100% rename from test/unit/editors/substation/transformer-winding-editor.test.ts rename to packages/open-scd/test/unit/editors/substation/transformer-winding-editor.test.ts diff --git a/test/unit/editors/substation/voltage-level-editor.test.ts b/packages/open-scd/test/unit/editors/substation/voltage-level-editor.test.ts similarity index 100% rename from test/unit/editors/substation/voltage-level-editor.test.ts rename to packages/open-scd/test/unit/editors/substation/voltage-level-editor.test.ts diff --git a/test/unit/editors/substation/zeroline-pane.test.ts b/packages/open-scd/test/unit/editors/substation/zeroline-pane.test.ts similarity index 100% rename from test/unit/editors/substation/zeroline-pane.test.ts rename to packages/open-scd/test/unit/editors/substation/zeroline-pane.test.ts diff --git a/test/unit/editors/templates/datype.test.ts b/packages/open-scd/test/unit/editors/templates/datype.test.ts similarity index 100% rename from test/unit/editors/templates/datype.test.ts rename to packages/open-scd/test/unit/editors/templates/datype.test.ts diff --git a/test/unit/editors/templates/dotype.test.ts b/packages/open-scd/test/unit/editors/templates/dotype.test.ts similarity index 100% rename from test/unit/editors/templates/dotype.test.ts rename to packages/open-scd/test/unit/editors/templates/dotype.test.ts diff --git a/test/unit/editors/templates/enumtype.test.ts b/packages/open-scd/test/unit/editors/templates/enumtype.test.ts similarity index 100% rename from test/unit/editors/templates/enumtype.test.ts rename to packages/open-scd/test/unit/editors/templates/enumtype.test.ts diff --git a/test/unit/editors/templates/lnodetype-wizard.test.ts b/packages/open-scd/test/unit/editors/templates/lnodetype-wizard.test.ts similarity index 100% rename from test/unit/editors/templates/lnodetype-wizard.test.ts rename to packages/open-scd/test/unit/editors/templates/lnodetype-wizard.test.ts diff --git a/test/unit/filtered-list.test.ts b/packages/open-scd/test/unit/filtered-list.test.ts similarity index 100% rename from test/unit/filtered-list.test.ts rename to packages/open-scd/test/unit/filtered-list.test.ts diff --git a/test/unit/finder-list.test.ts b/packages/open-scd/test/unit/finder-list.test.ts similarity index 100% rename from test/unit/finder-list.test.ts rename to packages/open-scd/test/unit/finder-list.test.ts diff --git a/test/unit/foundation.test.ts b/packages/open-scd/test/unit/foundation.test.ts similarity index 100% rename from test/unit/foundation.test.ts rename to packages/open-scd/test/unit/foundation.test.ts diff --git a/test/unit/foundation/__snapshots__/compare.test.snap.js b/packages/open-scd/test/unit/foundation/__snapshots__/compare.test.snap.js similarity index 100% rename from test/unit/foundation/__snapshots__/compare.test.snap.js rename to packages/open-scd/test/unit/foundation/__snapshots__/compare.test.snap.js diff --git a/test/unit/foundation/compare.test.ts b/packages/open-scd/test/unit/foundation/compare.test.ts similarity index 100% rename from test/unit/foundation/compare.test.ts rename to packages/open-scd/test/unit/foundation/compare.test.ts diff --git a/test/unit/foundation/dai.test.ts b/packages/open-scd/test/unit/foundation/dai.test.ts similarity index 100% rename from test/unit/foundation/dai.test.ts rename to packages/open-scd/test/unit/foundation/dai.test.ts diff --git a/test/unit/foundation/generators.test.ts b/packages/open-scd/test/unit/foundation/generators.test.ts similarity index 100% rename from test/unit/foundation/generators.test.ts rename to packages/open-scd/test/unit/foundation/generators.test.ts diff --git a/test/unit/foundation/nsdoc.test.ts b/packages/open-scd/test/unit/foundation/nsdoc.test.ts similarity index 100% rename from test/unit/foundation/nsdoc.test.ts rename to packages/open-scd/test/unit/foundation/nsdoc.test.ts diff --git a/test/unit/foundation/scl.test.ts b/packages/open-scd/test/unit/foundation/scl.test.ts similarity index 100% rename from test/unit/foundation/scl.test.ts rename to packages/open-scd/test/unit/foundation/scl.test.ts diff --git a/test/unit/menu/CompareIED.test.ts b/packages/open-scd/test/unit/menu/CompareIED.test.ts similarity index 100% rename from test/unit/menu/CompareIED.test.ts rename to packages/open-scd/test/unit/menu/CompareIED.test.ts diff --git a/test/unit/menu/SclHistory.test.ts b/packages/open-scd/test/unit/menu/SclHistory.test.ts similarity index 100% rename from test/unit/menu/SclHistory.test.ts rename to packages/open-scd/test/unit/menu/SclHistory.test.ts diff --git a/test/unit/menu/SubscriberInfo.test.ts b/packages/open-scd/test/unit/menu/SubscriberInfo.test.ts similarity index 100% rename from test/unit/menu/SubscriberInfo.test.ts rename to packages/open-scd/test/unit/menu/SubscriberInfo.test.ts diff --git a/test/unit/menu/UpdateDescriptionSEL.test.ts b/packages/open-scd/test/unit/menu/UpdateDescriptionSEL.test.ts similarity index 100% rename from test/unit/menu/UpdateDescriptionSEL.test.ts rename to packages/open-scd/test/unit/menu/UpdateDescriptionSEL.test.ts diff --git a/test/unit/menu/UpdateDescritionABB.test.ts b/packages/open-scd/test/unit/menu/UpdateDescritionABB.test.ts similarity index 100% rename from test/unit/menu/UpdateDescritionABB.test.ts rename to packages/open-scd/test/unit/menu/UpdateDescritionABB.test.ts diff --git a/test/unit/menu/VirtualTemplateIED.test.ts b/packages/open-scd/test/unit/menu/VirtualTemplateIED.test.ts similarity index 100% rename from test/unit/menu/VirtualTemplateIED.test.ts rename to packages/open-scd/test/unit/menu/VirtualTemplateIED.test.ts diff --git a/test/unit/menu/__snapshots__/CompareIED.test.snap.js b/packages/open-scd/test/unit/menu/__snapshots__/CompareIED.test.snap.js similarity index 100% rename from test/unit/menu/__snapshots__/CompareIED.test.snap.js rename to packages/open-scd/test/unit/menu/__snapshots__/CompareIED.test.snap.js diff --git a/test/unit/menu/__snapshots__/SclHistory.test.snap.js b/packages/open-scd/test/unit/menu/__snapshots__/SclHistory.test.snap.js similarity index 100% rename from test/unit/menu/__snapshots__/SclHistory.test.snap.js rename to packages/open-scd/test/unit/menu/__snapshots__/SclHistory.test.snap.js diff --git a/test/unit/menu/__snapshots__/UpdateDescriptionSEL.test.snap.js b/packages/open-scd/test/unit/menu/__snapshots__/UpdateDescriptionSEL.test.snap.js similarity index 100% rename from test/unit/menu/__snapshots__/UpdateDescriptionSEL.test.snap.js rename to packages/open-scd/test/unit/menu/__snapshots__/UpdateDescriptionSEL.test.snap.js diff --git a/test/unit/menu/__snapshots__/UpdateDescritionABB.test.snap.js b/packages/open-scd/test/unit/menu/__snapshots__/UpdateDescritionABB.test.snap.js similarity index 100% rename from test/unit/menu/__snapshots__/UpdateDescritionABB.test.snap.js rename to packages/open-scd/test/unit/menu/__snapshots__/UpdateDescritionABB.test.snap.js diff --git a/test/unit/menu/__snapshots__/VirtualTemplateIED.test.snap.js b/packages/open-scd/test/unit/menu/__snapshots__/VirtualTemplateIED.test.snap.js similarity index 100% rename from test/unit/menu/__snapshots__/VirtualTemplateIED.test.snap.js rename to packages/open-scd/test/unit/menu/__snapshots__/VirtualTemplateIED.test.snap.js diff --git a/test/unit/menu/updatesubstation.test.ts b/packages/open-scd/test/unit/menu/updatesubstation.test.ts similarity index 100% rename from test/unit/menu/updatesubstation.test.ts rename to packages/open-scd/test/unit/menu/updatesubstation.test.ts diff --git a/test/unit/menu/virtualtemplateied/__snapshots__/foundation.test.snap.js b/packages/open-scd/test/unit/menu/virtualtemplateied/__snapshots__/foundation.test.snap.js similarity index 100% rename from test/unit/menu/virtualtemplateied/__snapshots__/foundation.test.snap.js rename to packages/open-scd/test/unit/menu/virtualtemplateied/__snapshots__/foundation.test.snap.js diff --git a/test/unit/menu/virtualtemplateied/foundation.test.ts b/packages/open-scd/test/unit/menu/virtualtemplateied/foundation.test.ts similarity index 100% rename from test/unit/menu/virtualtemplateied/foundation.test.ts rename to packages/open-scd/test/unit/menu/virtualtemplateied/foundation.test.ts diff --git a/test/unit/mock-actions.ts b/packages/open-scd/test/unit/mock-actions.ts similarity index 100% rename from test/unit/mock-actions.ts rename to packages/open-scd/test/unit/mock-actions.ts diff --git a/test/unit/mock-document.ts b/packages/open-scd/test/unit/mock-document.ts similarity index 100% rename from test/unit/mock-document.ts rename to packages/open-scd/test/unit/mock-document.ts diff --git a/test/unit/mock-editor.ts b/packages/open-scd/test/unit/mock-editor.ts similarity index 100% rename from test/unit/mock-editor.ts rename to packages/open-scd/test/unit/mock-editor.ts diff --git a/test/unit/mock-logger.ts b/packages/open-scd/test/unit/mock-logger.ts similarity index 100% rename from test/unit/mock-logger.ts rename to packages/open-scd/test/unit/mock-logger.ts diff --git a/test/unit/mock-plugger.ts b/packages/open-scd/test/unit/mock-plugger.ts similarity index 100% rename from test/unit/mock-plugger.ts rename to packages/open-scd/test/unit/mock-plugger.ts diff --git a/test/unit/mock-setter.ts b/packages/open-scd/test/unit/mock-setter.ts similarity index 100% rename from test/unit/mock-setter.ts rename to packages/open-scd/test/unit/mock-setter.ts diff --git a/test/unit/mock-waiter.ts b/packages/open-scd/test/unit/mock-waiter.ts similarity index 100% rename from test/unit/mock-waiter.ts rename to packages/open-scd/test/unit/mock-waiter.ts diff --git a/test/unit/oscd-filter-button.test.ts b/packages/open-scd/test/unit/oscd-filter-button.test.ts similarity index 100% rename from test/unit/oscd-filter-button.test.ts rename to packages/open-scd/test/unit/oscd-filter-button.test.ts diff --git a/test/unit/plain-compare-list.test.ts b/packages/open-scd/test/unit/plain-compare-list.test.ts similarity index 100% rename from test/unit/plain-compare-list.test.ts rename to packages/open-scd/test/unit/plain-compare-list.test.ts diff --git a/test/unit/schema.test.ts b/packages/open-scd/test/unit/schema.test.ts similarity index 100% rename from test/unit/schema.test.ts rename to packages/open-scd/test/unit/schema.test.ts diff --git a/test/unit/validators/ValidateTemplates.test.ts b/packages/open-scd/test/unit/validators/ValidateTemplates.test.ts similarity index 100% rename from test/unit/validators/ValidateTemplates.test.ts rename to packages/open-scd/test/unit/validators/ValidateTemplates.test.ts diff --git a/test/unit/validators/templates/dabda.test.ts b/packages/open-scd/test/unit/validators/templates/dabda.test.ts similarity index 100% rename from test/unit/validators/templates/dabda.test.ts rename to packages/open-scd/test/unit/validators/templates/dabda.test.ts diff --git a/test/unit/validators/templates/datype.test.ts b/packages/open-scd/test/unit/validators/templates/datype.test.ts similarity index 100% rename from test/unit/validators/templates/datype.test.ts rename to packages/open-scd/test/unit/validators/templates/datype.test.ts diff --git a/test/unit/validators/templates/doorsdo.test.ts b/packages/open-scd/test/unit/validators/templates/doorsdo.test.ts similarity index 100% rename from test/unit/validators/templates/doorsdo.test.ts rename to packages/open-scd/test/unit/validators/templates/doorsdo.test.ts diff --git a/test/unit/validators/templates/dotype.test.ts b/packages/open-scd/test/unit/validators/templates/dotype.test.ts similarity index 100% rename from test/unit/validators/templates/dotype.test.ts rename to packages/open-scd/test/unit/validators/templates/dotype.test.ts diff --git a/test/unit/validators/templates/foundation.test.ts b/packages/open-scd/test/unit/validators/templates/foundation.test.ts similarity index 100% rename from test/unit/validators/templates/foundation.test.ts rename to packages/open-scd/test/unit/validators/templates/foundation.test.ts diff --git a/test/unit/validators/templates/lnodetype.test.ts b/packages/open-scd/test/unit/validators/templates/lnodetype.test.ts similarity index 100% rename from test/unit/validators/templates/lnodetype.test.ts rename to packages/open-scd/test/unit/validators/templates/lnodetype.test.ts diff --git a/test/unit/wizard-checkbox.test.ts b/packages/open-scd/test/unit/wizard-checkbox.test.ts similarity index 100% rename from test/unit/wizard-checkbox.test.ts rename to packages/open-scd/test/unit/wizard-checkbox.test.ts diff --git a/test/unit/wizard-dialog.test.ts b/packages/open-scd/test/unit/wizard-dialog.test.ts similarity index 100% rename from test/unit/wizard-dialog.test.ts rename to packages/open-scd/test/unit/wizard-dialog.test.ts diff --git a/test/unit/wizard-select.test.ts b/packages/open-scd/test/unit/wizard-select.test.ts similarity index 100% rename from test/unit/wizard-select.test.ts rename to packages/open-scd/test/unit/wizard-select.test.ts diff --git a/test/unit/wizard-textfield.test.ts b/packages/open-scd/test/unit/wizard-textfield.test.ts similarity index 100% rename from test/unit/wizard-textfield.test.ts rename to packages/open-scd/test/unit/wizard-textfield.test.ts diff --git a/test/unit/wizards/__snapshots__/abstractda.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/abstractda.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/abstractda.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/abstractda.test.snap.js diff --git a/test/unit/wizards/__snapshots__/address.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/address.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/address.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/address.test.snap.js diff --git a/test/unit/wizards/__snapshots__/clientln.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/clientln.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/clientln.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/clientln.test.snap.js diff --git a/test/unit/wizards/__snapshots__/commmap.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/commmap.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/commmap.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/commmap.test.snap.js diff --git a/test/unit/wizards/__snapshots__/connectedap-c.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/connectedap-c.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/connectedap-c.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/connectedap-c.test.snap.js diff --git a/test/unit/wizards/__snapshots__/connectedap-pattern.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/connectedap-pattern.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/connectedap-pattern.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/connectedap-pattern.test.snap.js diff --git a/test/unit/wizards/__snapshots__/connectivitynode.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/connectivitynode.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/connectivitynode.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/connectivitynode.test.snap.js diff --git a/test/unit/wizards/__snapshots__/controlwithiedname.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/controlwithiedname.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/controlwithiedname.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/controlwithiedname.test.snap.js diff --git a/test/unit/wizards/__snapshots__/dai.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/dai.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/dai.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/dai.test.snap.js diff --git a/test/unit/wizards/__snapshots__/dataset.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/dataset.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/dataset.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/dataset.test.snap.js diff --git a/test/unit/wizards/__snapshots__/eqfunction.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/eqfunction.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/eqfunction.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/eqfunction.test.snap.js diff --git a/test/unit/wizards/__snapshots__/eqsubfunction.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/eqsubfunction.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/eqsubfunction.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/eqsubfunction.test.snap.js diff --git a/test/unit/wizards/__snapshots__/fcda.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/fcda.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/fcda.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/fcda.test.snap.js diff --git a/test/unit/wizards/__snapshots__/function.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/function.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/function.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/function.test.snap.js diff --git a/test/unit/wizards/__snapshots__/generalequipment.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/generalequipment.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/generalequipment.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/generalequipment.test.snap.js diff --git a/test/unit/wizards/__snapshots__/gse.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/gse.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/gse.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/gse.test.snap.js diff --git a/test/unit/wizards/__snapshots__/gsecontrol.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/gsecontrol.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/gsecontrol.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/gsecontrol.test.snap.js diff --git a/test/unit/wizards/__snapshots__/ied.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/ied.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/ied.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/ied.test.snap.js diff --git a/test/unit/wizards/__snapshots__/line.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/line.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/line.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/line.test.snap.js diff --git a/test/unit/wizards/__snapshots__/lnode.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/lnode.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/lnode.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/lnode.test.snap.js diff --git a/test/unit/wizards/__snapshots__/optfields.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/optfields.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/optfields.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/optfields.test.snap.js diff --git a/test/unit/wizards/__snapshots__/powertransformer.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/powertransformer.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/powertransformer.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/powertransformer.test.snap.js diff --git a/test/unit/wizards/__snapshots__/process.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/process.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/process.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/process.test.snap.js diff --git a/test/unit/wizards/__snapshots__/reportcontrol.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/reportcontrol.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/reportcontrol.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/reportcontrol.test.snap.js diff --git a/test/unit/wizards/__snapshots__/sampledvaluecontrol.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/sampledvaluecontrol.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/sampledvaluecontrol.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/sampledvaluecontrol.test.snap.js diff --git a/test/unit/wizards/__snapshots__/smv.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/smv.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/smv.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/smv.test.snap.js diff --git a/test/unit/wizards/__snapshots__/smvopts.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/smvopts.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/smvopts.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/smvopts.test.snap.js diff --git a/test/unit/wizards/__snapshots__/sub-equipment.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/sub-equipment.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/sub-equipment.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/sub-equipment.test.snap.js diff --git a/test/unit/wizards/__snapshots__/subfunction.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/subfunction.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/subfunction.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/subfunction.test.snap.js diff --git a/test/unit/wizards/__snapshots__/subnetwork.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/subnetwork.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/subnetwork.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/subnetwork.test.snap.js diff --git a/test/unit/wizards/__snapshots__/substation.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/substation.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/substation.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/substation.test.snap.js diff --git a/test/unit/wizards/__snapshots__/tapchanger.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/tapchanger.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/tapchanger.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/tapchanger.test.snap.js diff --git a/test/unit/wizards/__snapshots__/terminal.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/terminal.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/terminal.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/terminal.test.snap.js diff --git a/test/unit/wizards/__snapshots__/transformerwinding.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/transformerwinding.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/transformerwinding.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/transformerwinding.test.snap.js diff --git a/test/unit/wizards/__snapshots__/trgops.test.snap.js b/packages/open-scd/test/unit/wizards/__snapshots__/trgops.test.snap.js similarity index 100% rename from test/unit/wizards/__snapshots__/trgops.test.snap.js rename to packages/open-scd/test/unit/wizards/__snapshots__/trgops.test.snap.js diff --git a/test/unit/wizards/abstractda.test.ts b/packages/open-scd/test/unit/wizards/abstractda.test.ts similarity index 100% rename from test/unit/wizards/abstractda.test.ts rename to packages/open-scd/test/unit/wizards/abstractda.test.ts diff --git a/test/unit/wizards/address.test.ts b/packages/open-scd/test/unit/wizards/address.test.ts similarity index 100% rename from test/unit/wizards/address.test.ts rename to packages/open-scd/test/unit/wizards/address.test.ts diff --git a/test/unit/wizards/bay.test.ts b/packages/open-scd/test/unit/wizards/bay.test.ts similarity index 100% rename from test/unit/wizards/bay.test.ts rename to packages/open-scd/test/unit/wizards/bay.test.ts diff --git a/test/unit/wizards/bda.test.ts b/packages/open-scd/test/unit/wizards/bda.test.ts similarity index 100% rename from test/unit/wizards/bda.test.ts rename to packages/open-scd/test/unit/wizards/bda.test.ts diff --git a/test/unit/wizards/clientln.test.ts b/packages/open-scd/test/unit/wizards/clientln.test.ts similarity index 100% rename from test/unit/wizards/clientln.test.ts rename to packages/open-scd/test/unit/wizards/clientln.test.ts diff --git a/test/unit/wizards/commmap.test.ts b/packages/open-scd/test/unit/wizards/commmap.test.ts similarity index 100% rename from test/unit/wizards/commmap.test.ts rename to packages/open-scd/test/unit/wizards/commmap.test.ts diff --git a/test/unit/wizards/conductingequipment.test.ts b/packages/open-scd/test/unit/wizards/conductingequipment.test.ts similarity index 100% rename from test/unit/wizards/conductingequipment.test.ts rename to packages/open-scd/test/unit/wizards/conductingequipment.test.ts diff --git a/test/unit/wizards/connectedap-c.test.ts b/packages/open-scd/test/unit/wizards/connectedap-c.test.ts similarity index 100% rename from test/unit/wizards/connectedap-c.test.ts rename to packages/open-scd/test/unit/wizards/connectedap-c.test.ts diff --git a/test/unit/wizards/connectedap-pattern.test.ts b/packages/open-scd/test/unit/wizards/connectedap-pattern.test.ts similarity index 100% rename from test/unit/wizards/connectedap-pattern.test.ts rename to packages/open-scd/test/unit/wizards/connectedap-pattern.test.ts diff --git a/test/unit/wizards/connectedap.test.ts b/packages/open-scd/test/unit/wizards/connectedap.test.ts similarity index 100% rename from test/unit/wizards/connectedap.test.ts rename to packages/open-scd/test/unit/wizards/connectedap.test.ts diff --git a/test/unit/wizards/connectivitynode.test.ts b/packages/open-scd/test/unit/wizards/connectivitynode.test.ts similarity index 100% rename from test/unit/wizards/connectivitynode.test.ts rename to packages/open-scd/test/unit/wizards/connectivitynode.test.ts diff --git a/test/unit/wizards/controlwithiedname.test.ts b/packages/open-scd/test/unit/wizards/controlwithiedname.test.ts similarity index 100% rename from test/unit/wizards/controlwithiedname.test.ts rename to packages/open-scd/test/unit/wizards/controlwithiedname.test.ts diff --git a/test/unit/wizards/da.test.ts b/packages/open-scd/test/unit/wizards/da.test.ts similarity index 100% rename from test/unit/wizards/da.test.ts rename to packages/open-scd/test/unit/wizards/da.test.ts diff --git a/test/unit/wizards/dai.test.ts b/packages/open-scd/test/unit/wizards/dai.test.ts similarity index 100% rename from test/unit/wizards/dai.test.ts rename to packages/open-scd/test/unit/wizards/dai.test.ts diff --git a/test/unit/wizards/dataset.test.ts b/packages/open-scd/test/unit/wizards/dataset.test.ts similarity index 100% rename from test/unit/wizards/dataset.test.ts rename to packages/open-scd/test/unit/wizards/dataset.test.ts diff --git a/test/unit/wizards/eqfunction.test.ts b/packages/open-scd/test/unit/wizards/eqfunction.test.ts similarity index 100% rename from test/unit/wizards/eqfunction.test.ts rename to packages/open-scd/test/unit/wizards/eqfunction.test.ts diff --git a/test/unit/wizards/eqsubfunction.test.ts b/packages/open-scd/test/unit/wizards/eqsubfunction.test.ts similarity index 100% rename from test/unit/wizards/eqsubfunction.test.ts rename to packages/open-scd/test/unit/wizards/eqsubfunction.test.ts diff --git a/test/unit/wizards/fcda.test.ts b/packages/open-scd/test/unit/wizards/fcda.test.ts similarity index 100% rename from test/unit/wizards/fcda.test.ts rename to packages/open-scd/test/unit/wizards/fcda.test.ts diff --git a/test/unit/wizards/foundation/__snapshots__/dai-field-type.test.snap.js b/packages/open-scd/test/unit/wizards/foundation/__snapshots__/dai-field-type.test.snap.js similarity index 100% rename from test/unit/wizards/foundation/__snapshots__/dai-field-type.test.snap.js rename to packages/open-scd/test/unit/wizards/foundation/__snapshots__/dai-field-type.test.snap.js diff --git a/test/unit/wizards/foundation/dai-field-type.test.ts b/packages/open-scd/test/unit/wizards/foundation/dai-field-type.test.ts similarity index 100% rename from test/unit/wizards/foundation/dai-field-type.test.ts rename to packages/open-scd/test/unit/wizards/foundation/dai-field-type.test.ts diff --git a/test/unit/wizards/foundation/finder.test.ts b/packages/open-scd/test/unit/wizards/foundation/finder.test.ts similarity index 100% rename from test/unit/wizards/foundation/finder.test.ts rename to packages/open-scd/test/unit/wizards/foundation/finder.test.ts diff --git a/test/unit/wizards/foundation/references.test.ts b/packages/open-scd/test/unit/wizards/foundation/references.test.ts similarity index 100% rename from test/unit/wizards/foundation/references.test.ts rename to packages/open-scd/test/unit/wizards/foundation/references.test.ts diff --git a/test/unit/wizards/foundation/scl.test.ts b/packages/open-scd/test/unit/wizards/foundation/scl.test.ts similarity index 100% rename from test/unit/wizards/foundation/scl.test.ts rename to packages/open-scd/test/unit/wizards/foundation/scl.test.ts diff --git a/test/unit/wizards/function.test.ts b/packages/open-scd/test/unit/wizards/function.test.ts similarity index 100% rename from test/unit/wizards/function.test.ts rename to packages/open-scd/test/unit/wizards/function.test.ts diff --git a/test/unit/wizards/generalequipment.test.ts b/packages/open-scd/test/unit/wizards/generalequipment.test.ts similarity index 100% rename from test/unit/wizards/generalequipment.test.ts rename to packages/open-scd/test/unit/wizards/generalequipment.test.ts diff --git a/test/unit/wizards/gse.test.ts b/packages/open-scd/test/unit/wizards/gse.test.ts similarity index 100% rename from test/unit/wizards/gse.test.ts rename to packages/open-scd/test/unit/wizards/gse.test.ts diff --git a/test/unit/wizards/gsecontrol.test.ts b/packages/open-scd/test/unit/wizards/gsecontrol.test.ts similarity index 100% rename from test/unit/wizards/gsecontrol.test.ts rename to packages/open-scd/test/unit/wizards/gsecontrol.test.ts diff --git a/test/unit/wizards/ied.test.ts b/packages/open-scd/test/unit/wizards/ied.test.ts similarity index 100% rename from test/unit/wizards/ied.test.ts rename to packages/open-scd/test/unit/wizards/ied.test.ts diff --git a/test/unit/wizards/line.test.ts b/packages/open-scd/test/unit/wizards/line.test.ts similarity index 100% rename from test/unit/wizards/line.test.ts rename to packages/open-scd/test/unit/wizards/line.test.ts diff --git a/test/unit/wizards/lnode.test.ts b/packages/open-scd/test/unit/wizards/lnode.test.ts similarity index 100% rename from test/unit/wizards/lnode.test.ts rename to packages/open-scd/test/unit/wizards/lnode.test.ts diff --git a/test/unit/wizards/optfields.test.ts b/packages/open-scd/test/unit/wizards/optfields.test.ts similarity index 100% rename from test/unit/wizards/optfields.test.ts rename to packages/open-scd/test/unit/wizards/optfields.test.ts diff --git a/test/unit/wizards/powertransformer.test.ts b/packages/open-scd/test/unit/wizards/powertransformer.test.ts similarity index 100% rename from test/unit/wizards/powertransformer.test.ts rename to packages/open-scd/test/unit/wizards/powertransformer.test.ts diff --git a/test/unit/wizards/process.test.ts b/packages/open-scd/test/unit/wizards/process.test.ts similarity index 100% rename from test/unit/wizards/process.test.ts rename to packages/open-scd/test/unit/wizards/process.test.ts diff --git a/test/unit/wizards/reportcontrol.test.ts b/packages/open-scd/test/unit/wizards/reportcontrol.test.ts similarity index 100% rename from test/unit/wizards/reportcontrol.test.ts rename to packages/open-scd/test/unit/wizards/reportcontrol.test.ts diff --git a/test/unit/wizards/sampledvaluecontrol.test.ts b/packages/open-scd/test/unit/wizards/sampledvaluecontrol.test.ts similarity index 100% rename from test/unit/wizards/sampledvaluecontrol.test.ts rename to packages/open-scd/test/unit/wizards/sampledvaluecontrol.test.ts diff --git a/test/unit/wizards/services.test.ts b/packages/open-scd/test/unit/wizards/services.test.ts similarity index 100% rename from test/unit/wizards/services.test.ts rename to packages/open-scd/test/unit/wizards/services.test.ts diff --git a/test/unit/wizards/smv.test.ts b/packages/open-scd/test/unit/wizards/smv.test.ts similarity index 100% rename from test/unit/wizards/smv.test.ts rename to packages/open-scd/test/unit/wizards/smv.test.ts diff --git a/test/unit/wizards/smvopts.test.ts b/packages/open-scd/test/unit/wizards/smvopts.test.ts similarity index 100% rename from test/unit/wizards/smvopts.test.ts rename to packages/open-scd/test/unit/wizards/smvopts.test.ts diff --git a/test/unit/wizards/sub-equipment.test.ts b/packages/open-scd/test/unit/wizards/sub-equipment.test.ts similarity index 100% rename from test/unit/wizards/sub-equipment.test.ts rename to packages/open-scd/test/unit/wizards/sub-equipment.test.ts diff --git a/test/unit/wizards/subfunction.test.ts b/packages/open-scd/test/unit/wizards/subfunction.test.ts similarity index 100% rename from test/unit/wizards/subfunction.test.ts rename to packages/open-scd/test/unit/wizards/subfunction.test.ts diff --git a/test/unit/wizards/subnetwork.test.ts b/packages/open-scd/test/unit/wizards/subnetwork.test.ts similarity index 100% rename from test/unit/wizards/subnetwork.test.ts rename to packages/open-scd/test/unit/wizards/subnetwork.test.ts diff --git a/test/unit/wizards/substation.test.ts b/packages/open-scd/test/unit/wizards/substation.test.ts similarity index 100% rename from test/unit/wizards/substation.test.ts rename to packages/open-scd/test/unit/wizards/substation.test.ts diff --git a/test/unit/wizards/tapchanger.test.ts b/packages/open-scd/test/unit/wizards/tapchanger.test.ts similarity index 100% rename from test/unit/wizards/tapchanger.test.ts rename to packages/open-scd/test/unit/wizards/tapchanger.test.ts diff --git a/test/unit/wizards/terminal.test.ts b/packages/open-scd/test/unit/wizards/terminal.test.ts similarity index 100% rename from test/unit/wizards/terminal.test.ts rename to packages/open-scd/test/unit/wizards/terminal.test.ts diff --git a/test/unit/wizards/test-support.ts b/packages/open-scd/test/unit/wizards/test-support.ts similarity index 100% rename from test/unit/wizards/test-support.ts rename to packages/open-scd/test/unit/wizards/test-support.ts diff --git a/test/unit/wizards/transformerwinding.test.ts b/packages/open-scd/test/unit/wizards/transformerwinding.test.ts similarity index 100% rename from test/unit/wizards/transformerwinding.test.ts rename to packages/open-scd/test/unit/wizards/transformerwinding.test.ts diff --git a/test/unit/wizards/trgops.test.ts b/packages/open-scd/test/unit/wizards/trgops.test.ts similarity index 100% rename from test/unit/wizards/trgops.test.ts rename to packages/open-scd/test/unit/wizards/trgops.test.ts diff --git a/test/unit/wizards/voltagelevel.test.ts b/packages/open-scd/test/unit/wizards/voltagelevel.test.ts similarity index 100% rename from test/unit/wizards/voltagelevel.test.ts rename to packages/open-scd/test/unit/wizards/voltagelevel.test.ts diff --git a/tsconfig.json b/packages/open-scd/tsconfig.json similarity index 100% rename from tsconfig.json rename to packages/open-scd/tsconfig.json diff --git a/web-test-runner.config.mjs b/packages/open-scd/web-test-runner.config.mjs similarity index 100% rename from web-test-runner.config.mjs rename to packages/open-scd/web-test-runner.config.mjs diff --git a/workbox-config.cjs b/packages/open-scd/workbox-config.cjs similarity index 100% rename from workbox-config.cjs rename to packages/open-scd/workbox-config.cjs From 2ae1cd316743b912551c245da15533bcb9ec2426 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20Russ?= Date: Mon, 25 Sep 2023 10:31:28 +0200 Subject: [PATCH 02/19] fix(action): correct source folder --- .github/workflows/build-and-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index 01eb051b11..e4656ade74 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -29,6 +29,6 @@ jobs: uses: JamesIves/github-pages-deploy-action@4.1.5 with: branch: master - folder: build + folder: packages/open-scd/build repository-name: openscd/openscd.github.io ssh-key: ${{ secrets.DEPLOY_KEY }} From e5bc0b8509a40950188e2f4bcf52569932309c69 Mon Sep 17 00:00:00 2001 From: danyill Date: Tue, 26 Sep 2023 07:18:32 +1300 Subject: [PATCH 03/19] feat(editors/ied): Improve IED editor UI for IED and LN selection (#1288) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat(editors/ied): Improve IED editor UI for IED and LN selection, closes #1287 --------- Co-authored-by: Tamás Russ --- packages/open-scd/src/editors/IED.ts | 66 +++++++++++++++---- .../test/integration/editors/IED.test.ts | 58 +++++++++++++++- .../editors/__snapshots__/IED.test.snap.js | 25 +++---- 3 files changed, 120 insertions(+), 29 deletions(-) diff --git a/packages/open-scd/src/editors/IED.ts b/packages/open-scd/src/editors/IED.ts index 1965877510..296411a0d4 100644 --- a/packages/open-scd/src/editors/IED.ts +++ b/packages/open-scd/src/editors/IED.ts @@ -32,6 +32,7 @@ export default class IedPlugin extends LitElement { /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ @property() doc!: XMLDocument; + @property({ type: Number }) editCount = -1; @@ -69,6 +70,12 @@ export default class IedPlugin extends LitElement { uniqueLNClassList.push(lnClass); return true; }) + .sort((a, b) => { + const aLnClass = a.getAttribute('lnClass') ?? ''; + const bLnClass = b.getAttribute('lnClass') ?? ''; + + return aLnClass.localeCompare(bLnClass); + }) .map(element => { const lnClass = element.getAttribute('lnClass'); const label = this.nsdoc.getDataDescription(element).label; @@ -92,17 +99,28 @@ export default class IedPlugin extends LitElement { return undefined; } + lNClassListOpenedOnce = false; + protected updated(_changedProperties: PropertyValues): void { super.updated(_changedProperties); - // When the document is updated, we reset the selected IED. - if ( + // When the document is updated, we reset the selected IED if it no longer exists + const isDocumentUpdated = _changedProperties.has('doc') || _changedProperties.has('editCount') || - _changedProperties.has('nsdoc') - ) { + _changedProperties.has('nsdoc'); + + if (isDocumentUpdated) { + // if the IED exists, retain selection + const iedExists = this.doc?.querySelector( + `IED[name="${this.selectedIEDs[0]}"]` + ); + + if (iedExists) return; + this.selectedIEDs = []; this.selectedLNClasses = []; + this.lNClassListOpenedOnce = false; const iedList = this.iedList; if (iedList.length > 0) { @@ -111,12 +129,22 @@ export default class IedPlugin extends LitElement { this.selectedIEDs = [iedName]; } } - this.selectedLNClasses = this.lnClassList.map( - lnClassInfo => lnClassInfo[0] - ); } } + private calcSelectedLNClasses(): string[] { + const somethingSelected = this.selectedLNClasses.length > 0; + const lnClasses = this.lnClassList.map( lnClassInfo => lnClassInfo[0] ); + + let selectedLNClasses = lnClasses; + + if(somethingSelected){ + selectedLNClasses = lnClasses.filter( lnClass => this.selectedLNClasses.includes(lnClass)); + } + + return selectedLNClasses; + } + render(): TemplateResult { const iedList = this.iedList; if (iedList.length > 0) { @@ -129,10 +157,25 @@ export default class IedPlugin extends LitElement { icon="developer_board" .header=${translate('iededitor.iedSelector')} @selected-items-changed="${(e: SelectedItemsChangedEvent) => { - this.selectedIEDs = e.detail.selectedItems; - this.selectedLNClasses = this.lnClassList.map( - lnClassInfo => lnClassInfo[0] + const equalArrays = (first: T[], second: T[]): boolean => { + return ( + first.length === second.length && + first.every((val, index) => val === second[index]) + ); + }; + + const selectionChanged = !equalArrays( + this.selectedIEDs, + e.detail.selectedItems ); + + if (!selectionChanged) { + return; + } + + this.lNClassListOpenedOnce = false; + this.selectedIEDs = e.detail.selectedItems; + this.selectedLNClasses = []; this.requestUpdate('selectedIed'); }}" > @@ -160,6 +203,7 @@ export default class IedPlugin extends LitElement { multi="true" .header="${translate('iededitor.lnFilter')}" @selected-items-changed="${(e: SelectedItemsChangedEvent) => { + this.selectedLNClasses = e.detail.selectedItems; this.requestUpdate('selectedIed'); }}" @@ -184,7 +228,7 @@ export default class IedPlugin extends LitElement { .editCount=${this.editCount} .doc=${this.doc} .element=${this.selectedIed} - .selectedLNClasses=${this.selectedLNClasses} + .selectedLNClasses=${this.calcSelectedLNClasses()} .nsdoc=${this.nsdoc} > `; diff --git a/packages/open-scd/test/integration/editors/IED.test.ts b/packages/open-scd/test/integration/editors/IED.test.ts index a83eb038d8..e8c7f47cea 100644 --- a/packages/open-scd/test/integration/editors/IED.test.ts +++ b/packages/open-scd/test/integration/editors/IED.test.ts @@ -145,14 +145,66 @@ describe('IED Plugin', () => { ).length ).to.eql(5); - await deselectLNClasses('CSWI'); + await selectLNClasses('CSWI'); await new Promise(resolve => setTimeout(resolve, 100)); // await animation expect( getLDeviceContainer(getIedContainer()).shadowRoot!.querySelectorAll( 'ln-container' ).length - ).to.eql(3); + ).to.eql(2); + }); + + it('when other IED selected, all LNs are selected by default', async () => { + await selectLNClasses('XCBR'); + + await selectIed('IED3'); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + expect( + element.shadowRoot?.querySelectorAll('ied-container').length + ).to.eql(1); + expect( + getIedContainer().shadowRoot?.querySelector('action-pane')!.shadowRoot + ?.innerHTML + ).to.include('IED3'); + + expect( + getLDeviceContainer(getIedContainer()).shadowRoot!.querySelectorAll( + 'ln-container' + ).length + ).to.eql(9); + }); + + it('when filtering LNs, if none are selected, all are selected', async () => { + await selectIed('IED3'); + + const oscdFilterButton = ( + element.shadowRoot!.querySelector( + 'oscd-filter-button[id="lnClassesFilter"]' + ) + ); + const filterButton = ( + oscdFilterButton!.shadowRoot!.querySelector('mwc-icon-button') + ); + filterButton.click(); + await element.updateComplete; + + const primaryButton = ( + oscdFilterButton!.shadowRoot!.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + primaryButton.click(); + await element.updateComplete; + + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + expect( + getLDeviceContainer(getIedContainer()).shadowRoot!.querySelectorAll( + 'ln-container' + ).length + ).to.eql(9); }); it('then renders the path of elements correctly', async () => { @@ -277,7 +329,7 @@ describe('IED Plugin', () => { ); } - async function deselectLNClasses(lnClass: string): Promise { + async function selectLNClasses(lnClass: string): Promise { const oscdFilterButton = ( element.shadowRoot!.querySelector( 'oscd-filter-button[id="lnClassesFilter"]' diff --git a/packages/open-scd/test/integration/editors/__snapshots__/IED.test.snap.js b/packages/open-scd/test/integration/editors/__snapshots__/IED.test.snap.js index 0ed73255dd..b07ca79296 100644 --- a/packages/open-scd/test/integration/editors/__snapshots__/IED.test.snap.js +++ b/packages/open-scd/test/integration/editors/__snapshots__/IED.test.snap.js @@ -116,51 +116,46 @@ snapshots["IED Plugin with a doc loaded containing IEDs looks like the latest sn aria-disabled="false" graphic="control" mwc-list-item="" - selected="" tabindex="0" - value="LLN0" + value="CILO" > - LLN0 + CILO - XCBR + CSWI - CSWI + LLN0 - XSWI + XCBR - CILO + XSWI From a737c4211360d2d93d44d1e89e731ac8e4c873f2 Mon Sep 17 00:00:00 2001 From: Juan Munoz Date: Wed, 27 Sep 2023 09:52:29 +0200 Subject: [PATCH 04/19] chore: adds pr to overview board (#1319) splitted into 2 workflows as a workaround to account for prs from forks --- .github/workflows/add-pr-to-board.yml | 103 +++++++++++++++++++++ .github/workflows/save-pr-data-to-file.yml | 37 ++++++++ 2 files changed, 140 insertions(+) create mode 100644 .github/workflows/add-pr-to-board.yml create mode 100644 .github/workflows/save-pr-data-to-file.yml diff --git a/.github/workflows/add-pr-to-board.yml b/.github/workflows/add-pr-to-board.yml new file mode 100644 index 0000000000..c94c91c40e --- /dev/null +++ b/.github/workflows/add-pr-to-board.yml @@ -0,0 +1,103 @@ +# SPDX-FileCopyrightText: 2023 Alliander N.V. +# +# SPDX-License-Identifier: Apache-2.0 + +name: Add pull requests to the overview board + +on: + workflow_run: + workflows: [Prepare PR data] + types: [completed] + +env: + todo: Pending + changes_requested: Changes Requested + approved: Approved + +jobs: + read-data-and-automate: + runs-on: ubuntu-latest + if: github.event.workflow_run.conclusion == 'success' + outputs: + pr_node_id: ${{ steps.pr_node_id.outputs.content }} + event_action: ${{ steps.event_action.outputs.content }} + review_pr_node_id: ${{ steps.review_pr_node_id.outputs.content }} + review_state: ${{ steps.review_state.outputs.content }} + steps: + # Data retrieval steps in case of a PR event + - name: Download PR data artifact + if: github.event.workflow_run.event == 'pull_request' || github.event.workflow_run.event == 'pull_request_target' + uses: dawidd6/action-download-artifact@v2 + with: + workflow: Prepare PR data + run_id: ${{ github.event.workflow_run.id }} + name: PR_DATA + - name: Read PR event's PR_NODE_ID.txt + if: github.event.workflow_run.event == 'pull_request' || github.event.workflow_run.event == 'pull_request_target' + id: pr_node_id + uses: juliangruber/read-file-action@v1 + with: + path: ./PR_NODE_ID.txt + trim: true + - name: Read PR event's EVENT_ACTION.txt + if: github.event.workflow_run.event == 'pull_request' || github.event.workflow_run.event == 'pull_request_target' + id: event_action + uses: juliangruber/read-file-action@v1 + with: + path: ./EVENT_ACTION.txt + trim: true + # Data retrieval steps in case of a PR review event + - name: Download PR review data artifact + if: github.event.workflow_run.event == 'pull_request_review' + uses: dawidd6/action-download-artifact@v2 + with: + workflow: Prepare PR data + run_id: ${{ github.event.workflow_run.id }} + name: REVIEW_DATA + - name: Read PR review event's PR_NODE_ID.txt + if: github.event.workflow_run.event == 'pull_request_review' + id: review_pr_node_id + uses: juliangruber/read-file-action@v1 + with: + path: ./PR_NODE_ID.txt + trim: true + - name: Read PR review event's REVIEW_STATE.txt + if: github.event.workflow_run.event == 'pull_request_review' + id: review_state + uses: juliangruber/read-file-action@v1 + with: + path: ./REVIEW_STATE.txt + trim: true + # Project automation steps + - name: Move PR to ${{ env.todo }} + if: ((github.event.workflow_run.event == 'pull_request' || + github.event.workflow_run.event == 'pull_request_target') && + (steps.event_action.outputs.content == 'opened' || + steps.event_action.outputs.content == 'reopened')) || + (github.event.workflow_run.event == 'pull_request_review' && + steps.review_state.outputs.content == 'dismissed') + uses: leonsteinhaeuser/project-beta-automations@v2.1.0 + with: + project_id: 7 + gh_token: ${{ secrets.ORG_GITHUB_ACTION_SECRET }} + organization: openscd + resource_node_id: ${{ github.event.workflow_run.event == 'pull_request_review' && steps.review_pr_node_id.outputs.content || steps.pr_node_id.outputs.content }} + status_value: ${{ env.todo }} + - name: Move PR to ${{env.approved}} + if: github.event.workflow_run.event == 'pull_request_review' && steps.review_state.outputs.content == 'approved' + uses: leonsteinhaeuser/project-beta-automations@v2.1.0 + with: + project_id: 7 + gh_token: ${{ secrets.ORG_GITHUB_ACTION_SECRET }} + organization: openscd + resource_node_id: ${{ steps.review_pr_node_id.outputs.content }} + status_value: ${{ env.approved }} + - name: Move PR to ${{env.changes_requested}} + if: github.event.workflow_run.event == 'pull_request_review' && steps.review_state.outputs.content == 'changes_requested' + uses: leonsteinhaeuser/project-beta-automations@v2.1.0 + with: + project_id: 7 + gh_token: ${{ secrets.ORG_GITHUB_ACTION_SECRET }} + organization: openscd + resource_node_id: ${{ steps.review_pr_node_id.outputs.content }} + status_value: ${{ env.changes_requested }} diff --git a/.github/workflows/save-pr-data-to-file.yml b/.github/workflows/save-pr-data-to-file.yml new file mode 100644 index 0000000000..e216eeef2b --- /dev/null +++ b/.github/workflows/save-pr-data-to-file.yml @@ -0,0 +1,37 @@ +# SPDX-FileCopyrightText: 2023 Alliander N.V. +# +# SPDX-License-Identifier: Apache-2.0 + +name: Prepare PR data +# Necessary step to allow adding external PRs to the project board + +on: [pull_request, pull_request_target, pull_request_review] + +jobs: + save-pr-data: + name: Save PR data to file + runs-on: ubuntu-latest + if: ${{ github.event.pull_request.user.login != 'github-actions[bot]' }} + steps: + - name: Save PR node_id and event_action to files + if: github.event_name == 'pull_request' || github.event_name == 'pull_request_target' + run: echo ${{ github.event.pull_request.node_id }} > PR_NODE_ID.txt && echo ${{ github.event.action }} > EVENT_ACTION.txt + - name: Archive PR node_id and event_action + if: github.event_name == 'pull_request' || github.event_name == 'pull_request_target' + uses: actions/upload-artifact@v3 + with: + name: PR_DATA + path: | + PR_NODE_ID.txt + EVENT_ACTION.txt + - name: Save PR node_id and review_state to files + if: github.event_name == 'pull_request_review' + run: echo ${{ github.event.pull_request.node_id }} > PR_NODE_ID.txt && echo ${{ github.event.review.state }} > REVIEW_STATE.txt + - name: Archive PR and review_state + if: github.event_name == 'pull_request_review' + uses: actions/upload-artifact@v3 + with: + name: REVIEW_DATA + path: | + PR_NODE_ID.txt + REVIEW_STATE.txt From 00e23b010db59671570be8d6a041dc27c00a23d3 Mon Sep 17 00:00:00 2001 From: Pascal Wilbrink Date: Mon, 23 Oct 2023 11:58:22 +0200 Subject: [PATCH 05/19] Chore: Moved mergeSubstation function outside the UpdateSubstation plugin, so it can be reused (#1337) --- .../open-scd/src/menu/UpdateSubstation.ts | 74 ++++++++++--------- 1 file changed, 41 insertions(+), 33 deletions(-) diff --git a/packages/open-scd/src/menu/UpdateSubstation.ts b/packages/open-scd/src/menu/UpdateSubstation.ts index 71d00e4750..ba7a1b26f6 100644 --- a/packages/open-scd/src/menu/UpdateSubstation.ts +++ b/packages/open-scd/src/menu/UpdateSubstation.ts @@ -79,46 +79,54 @@ export function isValidReference( ); } +export function mergeSubstation( + element: Element, + currentDoc: Document, + docWithSubstation: Document +): void { + element.dispatchEvent( + newWizardEvent( + mergeWizard( + // FIXME: doesn't work with multiple Substations! + currentDoc.documentElement, + docWithSubstation.documentElement, + { + title: get('updatesubstation.title'), + selected: (diff: Diff): boolean => + diff.theirs instanceof Element + ? diff.theirs.tagName === 'LNode' + ? find(currentDoc, 'LNode', identity(diff.theirs)) === null && + isValidReference(docWithSubstation, identity(diff.theirs)) + : diff.theirs.tagName === 'Substation' || + !tags['SCL'].children.includes(diff.theirs.tagName) + : diff.theirs !== null, + disabled: (diff: Diff): boolean => + diff.theirs instanceof Element && + diff.theirs.tagName === 'LNode' && + (find(currentDoc, 'LNode', identity(diff.theirs)) !== null || + !isValidReference(docWithSubstation, identity(diff.theirs))), + auto: (): boolean => true, + } + ) + ) + ); +} + export default class UpdateSubstationPlugin extends LitElement { doc!: XMLDocument; @query('#update-substation-plugin-input') pluginFileUI!: HTMLInputElement; - updateSubstation(event: Event): void { + async updateSubstation(event: Event): Promise { const file = (event.target)?.files?.item(0) ?? false; - if (file) - file.text().then(text => { - const doc = new DOMParser().parseFromString(text, 'application/xml'); - this.dispatchEvent( - newWizardEvent( - mergeWizard( - // FIXME: doesn't work with multiple Substations! - this.doc.documentElement, - doc.documentElement, - { - title: get('updatesubstation.title'), - selected: (diff: Diff): boolean => - diff.theirs instanceof Element - ? diff.theirs.tagName === 'LNode' - ? find(this.doc, 'LNode', identity(diff.theirs)) === - null && isValidReference(doc, identity(diff.theirs)) - : diff.theirs.tagName === 'Substation' || - !tags['SCL'].children.includes( - diff.theirs.tagName - ) - : diff.theirs !== null, - disabled: (diff: Diff): boolean => - diff.theirs instanceof Element && - diff.theirs.tagName === 'LNode' && - (find(this.doc, 'LNode', identity(diff.theirs)) !== null || - !isValidReference(doc, identity(diff.theirs))), - auto: (): boolean => true, - } - ) - ) - ); - }); + if (!file) { + return; + } + const text = await file.text(); + const doc = new DOMParser().parseFromString(text, 'application/xml'); + + mergeSubstation(this, this.doc, doc); this.pluginFileUI.onchange = null; } From 74fa4688e3e496ee2360af5371a9d7631b114428 Mon Sep 17 00:00:00 2001 From: Pascal Wilbrink Date: Thu, 26 Oct 2023 01:35:21 +0200 Subject: [PATCH 06/19] Update foundation.ts (#1340) --- packages/open-scd/src/foundation.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/open-scd/src/foundation.ts b/packages/open-scd/src/foundation.ts index a956ca87f8..a06c460498 100644 --- a/packages/open-scd/src/foundation.ts +++ b/packages/open-scd/src/foundation.ts @@ -404,6 +404,7 @@ export function newLogEvent( export interface IssueDetail extends LogDetailBase { validatorId: string; + element?: Element; } export type IssueEvent = CustomEvent; export function newIssueEvent( From 370f47ac62400e2372a63574ff73eaa0a5fb2605 Mon Sep 17 00:00:00 2001 From: Pascal Wilbrink Date: Tue, 31 Oct 2023 09:08:30 +0100 Subject: [PATCH 07/19] Split logging (#1334) * Chore: Renamed Logging to Historing * Fixed tests * Fixed german translation * Update packages/open-scd/src/Historing.ts Co-authored-by: Juan Munoz --------- Co-authored-by: Juan Munoz --- .../open-scd/src/{Logging.ts => Historing.ts} | 198 +++++++++++++----- packages/open-scd/src/Hosting.ts | 15 +- packages/open-scd/src/Plugging.ts | 4 +- packages/open-scd/src/open-scd.ts | 4 +- packages/open-scd/src/translations/de.ts | 1 + packages/open-scd/src/translations/en.ts | 3 +- .../open-scd/test/integration/Setting.test.ts | 8 +- .../__snapshots__/open-scd.test.snap.js | 43 +++- .../GooseSubscriberDataBinding.test.ts | 4 +- .../GooseSubscriberLaterBinding.test.ts | 4 +- .../GooseSubscriberMessageBinding.test.ts | 4 +- .../editors/SMVSubscriberDataBinding.test.ts | 4 +- .../editors/SMVSubscriberLaterBinding.test.ts | 4 +- .../SMVSubscriberMessageBinding.test.ts | 4 +- ...GooseSubscriberMessageBinding.test.snap.js | 70 ++++++- .../SMVSubscriberMessageBinding.test.snap.js | 70 ++++++- .../triggered/ImportIedsPlugin.test.ts | 12 +- .../test/integration/open-scd.test.ts | 10 +- .../validators/ValidateSchema.test.ts | 4 +- packages/open-scd/test/mock-editor-logger.ts | 4 +- packages/open-scd/test/mock-setter-logger.ts | 4 +- .../{Logging.test.ts => Historing.test.ts} | 30 +-- packages/open-scd/test/unit/mock-logger.ts | 4 +- packages/open-scd/test/unit/mock-plugger.ts | 4 +- 24 files changed, 372 insertions(+), 140 deletions(-) rename packages/open-scd/src/{Logging.ts => Historing.ts} (73%) rename packages/open-scd/test/unit/{Logging.test.ts => Historing.test.ts} (90%) diff --git a/packages/open-scd/src/Logging.ts b/packages/open-scd/src/Historing.ts similarity index 73% rename from packages/open-scd/src/Logging.ts rename to packages/open-scd/src/Historing.ts index b2f5b2ebb8..5b0ef07f2b 100644 --- a/packages/open-scd/src/Logging.ts +++ b/packages/open-scd/src/Historing.ts @@ -21,8 +21,11 @@ import { Snackbar } from '@material/mwc-snackbar'; import './filtered-list.js'; import { + CommitDetail, CommitEntry, ifImplemented, + InfoDetail, + InfoEntry, invert, IssueDetail, IssueEvent, @@ -40,7 +43,6 @@ const icons = { info: 'info', warning: 'warning', error: 'report', - action: 'history', }; function getPluginName(src: string): string { @@ -66,13 +68,18 @@ function getPluginName(src: string): string { * Renders the `history` to `logUI` and the latest `'error'` [[`LogEntry`]] to * `messageUI`. */ -export type LoggingElement = Mixin; +export type HistoringElement = Mixin; -export function Logging(Base: TBase) { - class LoggingElement extends Base { +export function Historing(Base: TBase) { + class HistoringElement extends Base { /** All [[`LogEntry`]]s received so far through [[`LogEvent`]]s. */ @property({ type: Array }) - history: LogEntry[] = []; + log: InfoEntry[] = []; + + /** All [[`CommitEntry`]]s received so far through [[`LogEvent`]]s */ + @property({ type: Array }) + history: CommitEntry[] = []; + /** Index of the last [[`EditorAction`]] applied. */ @property({ type: Number }) editCount = -1; @@ -82,6 +89,7 @@ export function Logging(Base: TBase) { latestIssue!: IssueDetail; @query('#log') logUI!: Dialog; + @query('#history') historyUI!: Dialog; @query('#diagnostic') diagnosticUI!: Dialog; @query('#error') errorUI!: Snackbar; @query('#warning') warningUI!: Snackbar; @@ -140,16 +148,10 @@ export function Logging(Base: TBase) { return true; } - private onLog(le: LogEvent): void { - if (le.detail.kind === 'reset') { - this.history = []; - this.editCount = -1; - return; - } - - const entry: LogEntry = { + private onHistory(detail: CommitDetail) { + const entry: CommitEntry = { time: new Date(), - ...le.detail, + ...detail, }; if (entry.kind === 'action') { @@ -160,22 +162,51 @@ export function Logging(Base: TBase) { } this.history.push(entry); + this.requestUpdate('history', []); + } + + private onReset() { + this.log = []; + this.history = []; + this.editCount = -1; + } + + private onInfo(detail: InfoDetail) { + const entry: InfoEntry = { + time: new Date(), + ...detail, + }; + + this.log.push(entry); if (!this.logUI.open) { const ui = { error: this.errorUI, warning: this.warningUI, info: this.infoUI, - action: this.infoUI, - }[le.detail.kind]; + }[detail.kind]; ui.close(); ui.show(); } - if (le.detail.kind == 'error') { + if (detail.kind == 'error') { this.errorUI.close(); // hack to reset timeout this.errorUI.show(); } - this.requestUpdate('history', []); + this.requestUpdate('log', []); + } + + private onLog(le: LogEvent): void { + switch (le.detail.kind) { + case 'reset': + this.onReset(); + break; + case 'action': + this.onHistory(le.detail); + break; + default: + this.onInfo(le.detail); + break; + } } async performUpdate() { @@ -197,7 +228,36 @@ export function Logging(Base: TBase) { } renderLogEntry( - entry: LogEntry, + entry: InfoEntry, + index: number, + log: LogEntry[] + ): TemplateResult { + return html` + + + + ${entry.time?.toLocaleString()} + ${entry.title} + ${entry.message} + ${icons[entry.kind]} + `; + } + + renderHistoryEntry( + entry: CommitEntry, index: number, history: LogEntry[] ): TemplateResult { @@ -219,18 +279,31 @@ export function Logging(Base: TBase) { style="--mdc-theme-text-icon-on-background:var(${ifDefined( iconColors[entry.kind] )})" - >${icons[entry.kind]}history `; } + private renderLog(): TemplateResult[] | TemplateResult { + if (this.log.length > 0) + return this.log.slice().reverse().map(this.renderLogEntry, this); + else + return html` + ${translate('log.placeholder')} + info + `; + } + private renderHistory(): TemplateResult[] | TemplateResult { if (this.history.length > 0) - return this.history.slice().reverse().map(this.renderLogEntry, this); + return this.history + .slice() + .reverse() + .map(this.renderHistoryEntry, this); else return html` - ${translate('log.placeholder')} + ${translate('history.placeholder')} info `; } @@ -281,6 +354,42 @@ export function Logging(Base: TBase) { ); } + private renderLogDialog(): TemplateResult { + return html` + ${this.renderFilterButtons()} + ${this.renderLog()} + ${translate('close')} + `; + } + + private renderHistoryDialog(): TemplateResult { + return html` + ${this.renderHistory()} + + + ${translate('close')} + `; + } + render(): TemplateResult { return html`${ifImplemented(super.render())} - - ${this.renderFilterButtons()} - ${this.renderHistory()} - - - ${translate('close')} - - + ${this.renderLogDialog()} ${this.renderHistoryDialog()} ${this.renderIssues()}(Base: TBase) { le.kind === 'info' || le.kind === 'action')?.title ?? + .find(le => le.kind === 'info')?.title ?? get('log.snackbar.placeholder')}" > @@ -391,7 +473,7 @@ export function Logging(Base: TBase) { le.kind === 'warning')?.title ?? @@ -408,7 +490,7 @@ export function Logging(Base: TBase) { le.kind === 'error')?.title ?? @@ -439,5 +521,5 @@ export function Logging(Base: TBase) { } } - return LoggingElement; + return HistoringElement; } diff --git a/packages/open-scd/src/Hosting.ts b/packages/open-scd/src/Hosting.ts index bdfa7ced91..33701eee00 100644 --- a/packages/open-scd/src/Hosting.ts +++ b/packages/open-scd/src/Hosting.ts @@ -16,7 +16,7 @@ import { ActionDetail, List } from '@material/mwc-list'; import { ListItem } from '@material/mwc-list/mwc-list-item'; import { Mixin, newPendingStateEvent } from './foundation.js'; -import { LoggingElement } from './Logging.js'; +import { HistoringElement } from './Historing.js'; import { Plugin, PluggingElement, pluginIcons } from './Plugging.js'; import { SettingElement } from './Setting.js'; @@ -39,12 +39,12 @@ interface MenuPlugin { run: () => Promise; } -/** Mixin that hosts the UI for Plugins, Settings and Logging */ +/** Mixin that hosts the UI for Plugins, Settings and Historing */ export type HostingElement = Mixin; export function Hosting< TBase extends new (...args: any[]) => PluggingElement & - LoggingElement & + HistoringElement & SettingElement >(Base: TBase) { class HostingElement extends Base { @@ -176,12 +176,19 @@ export function Hosting< }, ...validators, { - icon: 'history', + icon: 'list', name: 'menu.viewLog', actionItem: true, action: (): void => this.logUI.show(), kind: 'static', }, + { + icon: 'history', + name: 'menu.viewHistory', + actionItem: true, + action: (): void => this.historyUI.show(), + kind: 'static', + }, { icon: 'rule', name: 'menu.viewDiag', diff --git a/packages/open-scd/src/Plugging.ts b/packages/open-scd/src/Plugging.ts index 1b0f86d5b4..781da6cac2 100644 --- a/packages/open-scd/src/Plugging.ts +++ b/packages/open-scd/src/Plugging.ts @@ -25,7 +25,7 @@ import { ifImplemented, Mixin } from './foundation.js'; import { EditingElement } from './Editing.js'; import { officialPlugins } from '../public/js/plugins.js'; import { Nsdoc } from './foundation/nsdoc.js'; -import { LoggingElement } from './Logging.js'; +import { HistoringElement } from './Historing.js'; const pluginTags = new Map(); /** * Hashes `uri` using cyrb64 analogous to @@ -177,7 +177,7 @@ const loadedPlugins = new Set(); export type PluggingElement = Mixin; export function Plugging< - TBase extends new (...args: any[]) => EditingElement & LoggingElement + TBase extends new (...args: any[]) => EditingElement & HistoringElement >(Base: TBase) { class PluggingElement extends Base { // DIRTY HACK: will refactored with open-scd-core diff --git a/packages/open-scd/src/open-scd.ts b/packages/open-scd/src/open-scd.ts index 3afa2c8616..aa463098c7 100644 --- a/packages/open-scd/src/open-scd.ts +++ b/packages/open-scd/src/open-scd.ts @@ -14,7 +14,7 @@ import { getTheme } from './themes.js'; import { Editing } from './Editing.js'; import { Hosting } from './Hosting.js'; -import { Logging } from './Logging.js'; +import { Historing } from './Historing.js'; import { Plugging } from './Plugging.js'; import { Setting } from './Setting.js'; import { Waiting } from './Waiting.js'; @@ -24,7 +24,7 @@ import { Wizarding } from './Wizarding.js'; * Open Substation Configuration Designer. */ @customElement('open-scd') export class OpenSCD extends Waiting( - Hosting(Setting(Wizarding(Plugging(Editing(Logging(LitElement)))))) + Hosting(Setting(Wizarding(Plugging(Editing(Historing(LitElement)))))) ) { private currentSrc = ''; /** The current file's URL. `blob:` URLs are *revoked after parsing*! */ diff --git a/packages/open-scd/src/translations/de.ts b/packages/open-scd/src/translations/de.ts index 0b47737633..e77ef35c0c 100644 --- a/packages/open-scd/src/translations/de.ts +++ b/packages/open-scd/src/translations/de.ts @@ -170,6 +170,7 @@ export const de: Translations = { }, history: { name: 'SCL History', + placeholder: 'Keine History', noEntries: 'Keine Einträge in der SCL History', }, diag: { diff --git a/packages/open-scd/src/translations/en.ts b/packages/open-scd/src/translations/en.ts index fe8463f38c..6affea53b0 100644 --- a/packages/open-scd/src/translations/en.ts +++ b/packages/open-scd/src/translations/en.ts @@ -139,7 +139,7 @@ export const en = { }, log: { name: 'Log', - placeholder: 'Edits, errors, and other notifications will show up here.', + placeholder: 'Errors, warnings and other notifications will show up here.', snackbar: { show: 'Show', placeholder: 'No errors', @@ -147,6 +147,7 @@ export const en = { }, history: { name: 'SCL History', + placeholder: 'Edits will show up here', noEntries: 'No SCL history entries', }, diag: { diff --git a/packages/open-scd/test/integration/Setting.test.ts b/packages/open-scd/test/integration/Setting.test.ts index 3ecea09328..e0c40ccb45 100644 --- a/packages/open-scd/test/integration/Setting.test.ts +++ b/packages/open-scd/test/integration/Setting.test.ts @@ -47,8 +47,8 @@ describe('Setting', () => { await element.requestUpdate(); await element.updateComplete; - expect(element.history.length).to.be.equal(1); - expect(element.history[0].title).to.be.equal( + expect(element.log.length).to.be.equal(1); + expect(element.log[0].title).to.be.equal( "Invalid NSDoc (invalid.nsdoc); no 'id' attribute found in file" ); }); @@ -66,8 +66,8 @@ describe('Setting', () => { await element.requestUpdate(); await element.updateComplete; - expect(element.history.length).to.be.equal(1); - expect(element.history[0].title).to.be.equal( + expect(element.log.length).to.be.equal(1); + expect(element.log[0].title).to.be.equal( 'The version of IEC 61850-7-3 NSD (2007B3) does not correlate ' + 'with the version of the corresponding NSDoc (wrong-version.nsdoc, 2007B4)' ); diff --git a/packages/open-scd/test/integration/__snapshots__/open-scd.test.snap.js b/packages/open-scd/test/integration/__snapshots__/open-scd.test.snap.js index 94b10ad8a0..ea1848c844 100644 --- a/packages/open-scd/test/integration/__snapshots__/open-scd.test.snap.js +++ b/packages/open-scd/test/integration/__snapshots__/open-scd.test.snap.js @@ -313,11 +313,17 @@ snapshots["open-scd looks like its snapshot"] = > + + - - + + + Errors, warnings and other notifications will show up here. + + + info + + + + + Close + + + - Edits, errors, and other notifications will show up here. + Edits will show up here info diff --git a/packages/open-scd/test/integration/editors/GooseSubscriberDataBinding.test.ts b/packages/open-scd/test/integration/editors/GooseSubscriberDataBinding.test.ts index eae5c221da..33825d49e3 100644 --- a/packages/open-scd/test/integration/editors/GooseSubscriberDataBinding.test.ts +++ b/packages/open-scd/test/integration/editors/GooseSubscriberDataBinding.test.ts @@ -1,7 +1,7 @@ import { expect, fixture, html } from '@open-wc/testing'; import { Wizarding } from '../../../src/Wizarding.js'; import { Editing } from '../../../src/Editing.js'; -import { Logging } from '../../../src/Logging.js'; +import { Historing } from '../../../src/Historing.js'; import { initializeNsdoc } from '../../../src/foundation/nsdoc.js'; import GooseSubscriberDataBinding from '../../../src/editors/GooseSubscriberDataBinding.js'; @@ -16,7 +16,7 @@ import { describe('GOOSE Subscribe Data Binding Plugin', async () => { customElements.define( 'goose-subscriber-data-binding-plugin', - Wizarding(Editing(Logging(GooseSubscriberDataBinding))) + Wizarding(Editing(Historing(GooseSubscriberDataBinding))) ); let element: GooseSubscriberDataBinding; diff --git a/packages/open-scd/test/integration/editors/GooseSubscriberLaterBinding.test.ts b/packages/open-scd/test/integration/editors/GooseSubscriberLaterBinding.test.ts index ac3961d19a..9528cb4e06 100644 --- a/packages/open-scd/test/integration/editors/GooseSubscriberLaterBinding.test.ts +++ b/packages/open-scd/test/integration/editors/GooseSubscriberLaterBinding.test.ts @@ -1,7 +1,7 @@ import { expect, fixture, html } from '@open-wc/testing'; import { Wizarding } from '../../../src/Wizarding.js'; import { Editing } from '../../../src/Editing.js'; -import { Logging } from '../../../src/Logging.js'; +import { Historing } from '../../../src/Historing.js'; import GooseSubscriberLaterBinding from '../../../src/editors/GooseSubscriberLaterBinding.js'; import { @@ -15,7 +15,7 @@ import { ExtRefLaterBindingList } from '../../../src/editors/subscription/later- describe('GOOSE Subscribe Later Binding Plugin', () => { customElements.define( 'goose-subscriber-later-binding-plugin', - Wizarding(Editing(Logging(GooseSubscriberLaterBinding))) + Wizarding(Editing(Historing(GooseSubscriberLaterBinding))) ); let element: GooseSubscriberLaterBinding; diff --git a/packages/open-scd/test/integration/editors/GooseSubscriberMessageBinding.test.ts b/packages/open-scd/test/integration/editors/GooseSubscriberMessageBinding.test.ts index c3c7e15ae9..f047e3335d 100644 --- a/packages/open-scd/test/integration/editors/GooseSubscriberMessageBinding.test.ts +++ b/packages/open-scd/test/integration/editors/GooseSubscriberMessageBinding.test.ts @@ -6,13 +6,13 @@ import { ListItem } from '@material/mwc-list/mwc-list-item.js'; import { Editing } from '../../../src/Editing.js'; import { Wizarding } from '../../../src/Wizarding.js'; -import { Logging } from '../../../src/Logging.js'; +import { Historing } from '../../../src/Historing.js'; import GooseSubscriberMessageBindingPlugin from '../../../src/editors/GooseSubscriberMessageBinding.js'; describe('GOOSE subscriber plugin', () => { customElements.define( 'subscription-plugin', - Wizarding(Editing(Logging(GooseSubscriberMessageBindingPlugin))) + Wizarding(Editing(Historing(GooseSubscriberMessageBindingPlugin))) ); let element: GooseSubscriberMessageBindingPlugin; let doc: XMLDocument; diff --git a/packages/open-scd/test/integration/editors/SMVSubscriberDataBinding.test.ts b/packages/open-scd/test/integration/editors/SMVSubscriberDataBinding.test.ts index 3e8d80d481..1410840532 100644 --- a/packages/open-scd/test/integration/editors/SMVSubscriberDataBinding.test.ts +++ b/packages/open-scd/test/integration/editors/SMVSubscriberDataBinding.test.ts @@ -11,11 +11,11 @@ import { getSelectedSubItemValue, selectFCDAItem, } from './test-support.js'; -import { Logging } from '../../../src/Logging.js'; +import { Historing } from '../../../src/Historing.js'; describe('SMV Subscribe Data Binding Plugin', async () => { customElements.define( 'smv-subscriber-data-binding-plugin', - Wizarding(Editing(Logging(SMVSubscriberDataBinding))) + Wizarding(Editing(Historing(SMVSubscriberDataBinding))) ); let element: SMVSubscriberDataBinding; diff --git a/packages/open-scd/test/integration/editors/SMVSubscriberLaterBinding.test.ts b/packages/open-scd/test/integration/editors/SMVSubscriberLaterBinding.test.ts index 2f69700d20..40e8b7e5dd 100644 --- a/packages/open-scd/test/integration/editors/SMVSubscriberLaterBinding.test.ts +++ b/packages/open-scd/test/integration/editors/SMVSubscriberLaterBinding.test.ts @@ -2,7 +2,7 @@ import { expect, fixture, html } from '@open-wc/testing'; import { Wizarding } from '../../../src/Wizarding.js'; import { Editing } from '../../../src/Editing.js'; -import { Logging } from '../../../src/Logging.js'; +import { Historing } from '../../../src/Historing.js'; import SMVSubscribeLaterBindingPlugin from '../../../src/editors/SMVSubscriberLaterBinding.js'; import { @@ -16,7 +16,7 @@ import { ExtRefLaterBindingList } from '../../../src/editors/subscription/later- describe('SMV Subscribe Later Binding plugin', () => { customElements.define( 'smv-subscribe-later-binding-plugin', - Wizarding(Editing(Logging(SMVSubscribeLaterBindingPlugin))) + Wizarding(Editing(Historing(SMVSubscribeLaterBindingPlugin))) ); let element: SMVSubscribeLaterBindingPlugin; let doc: XMLDocument; diff --git a/packages/open-scd/test/integration/editors/SMVSubscriberMessageBinding.test.ts b/packages/open-scd/test/integration/editors/SMVSubscriberMessageBinding.test.ts index 5d16b54654..e6f9f1d225 100644 --- a/packages/open-scd/test/integration/editors/SMVSubscriberMessageBinding.test.ts +++ b/packages/open-scd/test/integration/editors/SMVSubscriberMessageBinding.test.ts @@ -4,14 +4,14 @@ import '../../mock-wizard.js'; import SMVSubscriberMessageBindingPlugin from '../../../src/editors/SMVSubscriberMessageBinding.js'; import { Editing } from '../../../src/Editing.js'; -import { Logging } from '../../../src/Logging.js'; +import { Historing } from '../../../src/Historing.js'; import { Wizarding } from '../../../src/Wizarding.js'; import { ListItem } from '@material/mwc-list/mwc-list-item.js'; describe('Sampled Values Plugin', () => { customElements.define( 'smv-plugin', - Wizarding(Editing(Logging(SMVSubscriberMessageBindingPlugin))) + Wizarding(Editing(Historing(SMVSubscriberMessageBindingPlugin))) ); let element: SMVSubscriberMessageBindingPlugin; let doc: XMLDocument; diff --git a/packages/open-scd/test/integration/editors/__snapshots__/GooseSubscriberMessageBinding.test.snap.js b/packages/open-scd/test/integration/editors/__snapshots__/GooseSubscriberMessageBinding.test.snap.js index 2d3c512d97..5b60496600 100644 --- a/packages/open-scd/test/integration/editors/__snapshots__/GooseSubscriberMessageBinding.test.snap.js +++ b/packages/open-scd/test/integration/editors/__snapshots__/GooseSubscriberMessageBinding.test.snap.js @@ -46,11 +46,6 @@ snapshots["GOOSE subscriber plugin in Publisher view per default the plugin itse on="" > - - + + [close] + + + + + + + [history.placeholder] + + + info + + + - - + + [close] + + + + + + + [history.placeholder] + + + info + + + - - + + [close] + + + + + + + [history.placeholder] + + + info + + + - - + + [close] + + + + + + + [history.placeholder] + + + info + + + { .then(str => new DOMParser().parseFromString(str, 'application/xml')); element.prepareImport(importDoc, 'invalid.iid'); - expect(parent.history[0].kind).to.equal('error'); - expect(parent.history[0].title).to.equal('[import.log.missingied]'); + expect(parent.log[0].kind).to.equal('error'); + expect(parent.log[0].title).to.equal('[import.log.missingied]'); }); it('throws duplicate ied name error', async () => { @@ -423,8 +423,8 @@ describe('ImportIedsPlugin', () => { .then(str => new DOMParser().parseFromString(str, 'application/xml')); element.prepareImport(importDoc, 'duplicate.iid'); - expect(parent.history[0].kind).to.equal('error'); - expect(parent.history[0].title).to.equal('[import.log.nouniqueied]'); + expect(parent.log[0].kind).to.equal('error'); + expect(parent.log[0].title).to.equal('[import.log.nouniqueied]'); }); it('throws parser error', async () => { @@ -435,8 +435,8 @@ describe('ImportIedsPlugin', () => { element.prepareImport(importDoc, 'parsererror.iid'); - expect(parent.history[0].kind).to.equal('error'); - expect(parent.history[0].title).to.equal('[import.log.parsererror]'); + expect(parent.log[0].kind).to.equal('error'); + expect(parent.log[0].title).to.equal('[import.log.parsererror]'); }); }); }); diff --git a/packages/open-scd/test/integration/open-scd.test.ts b/packages/open-scd/test/integration/open-scd.test.ts index 02645d51b4..4354785629 100644 --- a/packages/open-scd/test/integration/open-scd.test.ts +++ b/packages/open-scd/test/integration/open-scd.test.ts @@ -42,11 +42,19 @@ describe('open-scd', () => { it('opens the log on log icon click', async () => { expect(element.logUI).to.have.property('open', false); await (( - element.shadowRoot!.querySelector('mwc-icon-button[icon="history"]')! + element.shadowRoot!.querySelector('mwc-icon-button[icon="list"]')! )).click(); expect(element.logUI).to.have.property('open', true); }); + it('opens the history on history icon click', async () => { + expect(element.historyUI).to.have.property('open', false); + await (( + element.shadowRoot!.querySelector('mwc-icon-button[icon="history"]')! + )).click(); + expect(element.historyUI).to.have.property('open', true); + }); + it('opens the log on snackbar button click', async () => { expect(element.logUI).to.have.property('open', false); await element.errorUI.querySelector('mwc-button')!.click(); diff --git a/packages/open-scd/test/integration/validators/ValidateSchema.test.ts b/packages/open-scd/test/integration/validators/ValidateSchema.test.ts index ba68861031..4b2b55d546 100644 --- a/packages/open-scd/test/integration/validators/ValidateSchema.test.ts +++ b/packages/open-scd/test/integration/validators/ValidateSchema.test.ts @@ -58,7 +58,7 @@ describe('ValidateSchema plugin', () => { }); it('indicates successful schema validation in the log', async () => { - const lastEntry = parent.history.pop(); + const lastEntry = parent.log.pop(); expect(lastEntry.kind).to.equal('info'); expect(lastEntry.title).to.contain('[validator.schema.valid]'); }); @@ -92,7 +92,7 @@ describe('ValidateSchema plugin', () => { .be.undefined); it('generates error messages in the log', async () => { - const lastLogEntry = parent.history.pop(); + const lastLogEntry = parent.log.pop(); expect(lastLogEntry.kind).to.equal('warning'); expect(lastLogEntry.title).to.contain('[validator.schema.invalid]'); }); diff --git a/packages/open-scd/test/mock-editor-logger.ts b/packages/open-scd/test/mock-editor-logger.ts index fe99e943ac..63f1e9aae1 100644 --- a/packages/open-scd/test/mock-editor-logger.ts +++ b/packages/open-scd/test/mock-editor-logger.ts @@ -1,7 +1,7 @@ import { LitElement, customElement } from 'lit-element'; import { Editing } from '../src/Editing.js'; -import { Logging } from '../src/Logging.js'; +import { Historing } from '../src/Historing.js'; @customElement('mock-editor-logger') -export class MockEditorLogger extends Editing(Logging(LitElement)) {} +export class MockEditorLogger extends Editing(Historing(LitElement)) {} diff --git a/packages/open-scd/test/mock-setter-logger.ts b/packages/open-scd/test/mock-setter-logger.ts index e371586e95..a7bfc22318 100644 --- a/packages/open-scd/test/mock-setter-logger.ts +++ b/packages/open-scd/test/mock-setter-logger.ts @@ -1,7 +1,7 @@ import { LitElement, customElement } from 'lit-element'; import { Setting } from '../src/Setting.js'; import { Editing } from '../src/Editing.js'; -import { Logging } from '../src/Logging.js'; +import { Historing } from '../src/Historing.js'; @customElement('mock-setter-logger') -export class MockSetterLogger extends Setting(Editing(Logging(LitElement))) {} +export class MockSetterLogger extends Setting(Editing(Historing(LitElement))) {} diff --git a/packages/open-scd/test/unit/Logging.test.ts b/packages/open-scd/test/unit/Historing.test.ts similarity index 90% rename from packages/open-scd/test/unit/Logging.test.ts rename to packages/open-scd/test/unit/Historing.test.ts index 5331aa193d..ea4a5155ac 100644 --- a/packages/open-scd/test/unit/Logging.test.ts +++ b/packages/open-scd/test/unit/Historing.test.ts @@ -10,21 +10,21 @@ import { newLogEvent, } from '../../src/foundation.js'; -describe('LoggingElement', () => { +describe('HistoringElement', () => { let element: MockLogger; beforeEach(async () => { element = await fixture(html``); }); - it('starts out with an empty history', () => - expect(element).property('history').to.be.empty); + it('starts out with an empty log', () => + expect(element).property('log').to.be.empty); it('cannot undo', () => expect(element).property('canUndo').to.be.false); it('cannot redo', () => expect(element).property('canRedo').to.be.false); it('cannot undo info messages', () => { element.dispatchEvent(newLogEvent({ kind: 'info', title: 'test info' })); - expect(element).property('history').to.have.lengthOf(1); + expect(element).property('log').to.have.lengthOf(1); expect(element).property('canUndo').to.be.false; }); @@ -32,13 +32,13 @@ describe('LoggingElement', () => { element.dispatchEvent( newLogEvent({ kind: 'warning', title: 'test warning' }) ); - expect(element).property('history').to.have.lengthOf(1); + expect(element).property('log').to.have.lengthOf(1); expect(element).property('canUndo').to.be.false; }); it('cannot undo error messages', () => { element.dispatchEvent(newLogEvent({ kind: 'error', title: 'test error' })); - expect(element).property('history').to.have.lengthOf(1); + expect(element).property('log').to.have.lengthOf(1); expect(element).property('canUndo').to.be.false; }); @@ -135,14 +135,15 @@ describe('LoggingElement', () => { expect(element).property('history').to.have.lengthOf(1); }); - it('can reset its history', () => { + it('can reset its log', () => { element.dispatchEvent(newLogEvent({ kind: 'reset' })); + expect(element).property('log').to.be.empty; expect(element).property('history').to.be.empty; expect(element).to.have.property('editCount', -1); }); - it('renders a log message for the action', () => - expect(element.logUI).to.contain.text('test')); + it('renders a history message for the action', () => + expect(element.historyUI).to.contain.text('test')); describe('with a second action logged', () => { beforeEach(() => { @@ -164,7 +165,7 @@ describe('LoggingElement', () => { it('has a previous action', () => expect(element).to.have.property('previousAction', 0)); it('has an edit count', () => - expect(element).to.have.property('editCount', 2)); + expect(element).to.have.property('editCount', 1)); it('has no next action', () => expect(element).to.have.property('nextAction', -1)); @@ -176,7 +177,7 @@ describe('LoggingElement', () => { it('has an edit count', () => expect(element).to.have.property('editCount', 0)); it('has a next action', () => - expect(element).to.have.property('nextAction', 2)); + expect(element).to.have.property('nextAction', 1)); it('can redo', () => expect(element).property('canRedo').to.be.true); @@ -188,8 +189,9 @@ describe('LoggingElement', () => { action: MockAction.mov, }) ); - expect(element).property('history').to.have.lengthOf(3); - expect(element).to.have.property('editCount', 2); + expect(element).property('log').to.have.lengthOf(1); + expect(element).property('history').to.have.lengthOf(2); + expect(element).to.have.property('editCount', 1); expect(element).to.have.property('nextAction', -1); }); @@ -206,7 +208,7 @@ describe('LoggingElement', () => { it('has a previous action', () => expect(element).to.have.property('previousAction', 0)); it('has an edit count', () => - expect(element).to.have.property('editCount', 2)); + expect(element).to.have.property('editCount', 1)); it('has no next action', () => expect(element).to.have.property('nextAction', -1)); diff --git a/packages/open-scd/test/unit/mock-logger.ts b/packages/open-scd/test/unit/mock-logger.ts index 29ea74d4bb..6fa6586823 100644 --- a/packages/open-scd/test/unit/mock-logger.ts +++ b/packages/open-scd/test/unit/mock-logger.ts @@ -1,5 +1,5 @@ import { LitElement, customElement } from 'lit-element'; -import { Logging } from '../../src/Logging.js'; +import { Historing } from '../../src/Historing.js'; @customElement('mock-logger') -export class MockLogger extends Logging(LitElement) {} +export class MockLogger extends Historing(LitElement) {} diff --git a/packages/open-scd/test/unit/mock-plugger.ts b/packages/open-scd/test/unit/mock-plugger.ts index 656d3d5b0b..72c3637771 100644 --- a/packages/open-scd/test/unit/mock-plugger.ts +++ b/packages/open-scd/test/unit/mock-plugger.ts @@ -1,7 +1,7 @@ import { LitElement, customElement } from 'lit-element'; import { Plugging } from '../../src/Plugging.js'; import { Editing } from '../../src/Editing.js'; -import { Logging } from '../../src/Logging.js'; +import { Historing } from '../../src/Historing.js'; @customElement('mock-plugger') -export class MockPlugger extends Plugging(Editing(Logging(LitElement))) {} +export class MockPlugger extends Plugging(Editing(Historing(LitElement))) {} From 83d1d611eeeb79082c7f0eb7934ee045b25fe0c2 Mon Sep 17 00:00:00 2001 From: Juan Munoz Date: Tue, 31 Oct 2023 13:23:34 +0100 Subject: [PATCH 08/19] feat: Provide ability to see Services section XML (#1346) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: ability to see `Services` section's XML Signed-off-by: Juan Muñoz * chore: update outdated services snapshot test file Signed-off-by: Juan Muñoz * test: added integration test Signed-off-by: Juan Muñoz * chore: fix type error in services.ts Signed-off-by: Juan Muñoz --------- Signed-off-by: Juan Muñoz --- .../src/wizards/service-GSEControl.ts | 1 + .../service-clientServer-configurations.ts | 1 + .../src/wizards/service-log-settingsgroup.ts | 1 + .../src/wizards/service-networking.ts | 1 + .../wizards/service-report-configurations.ts | 1 + .../src/wizards/service-sampled-values.ts | 1 + packages/open-scd/src/wizards/services.ts | 2 +- .../services-wizard.test.snap.js | 1933 +++-------------- .../wizards/services-wizard.test.ts | 18 + 9 files changed, 287 insertions(+), 1672 deletions(-) diff --git a/packages/open-scd/src/wizards/service-GSEControl.ts b/packages/open-scd/src/wizards/service-GSEControl.ts index b34c8b5606..f313a5e30b 100644 --- a/packages/open-scd/src/wizards/service-GSEControl.ts +++ b/packages/open-scd/src/wizards/service-GSEControl.ts @@ -58,6 +58,7 @@ export function createGSEControlWizardPage( ? { title: get('wizard.title.edit', { tagName: 'GSE Control' }), content: [...content], + element: services, } : null; } diff --git a/packages/open-scd/src/wizards/service-clientServer-configurations.ts b/packages/open-scd/src/wizards/service-clientServer-configurations.ts index 076929c8d6..8443c0a9d2 100644 --- a/packages/open-scd/src/wizards/service-clientServer-configurations.ts +++ b/packages/open-scd/src/wizards/service-clientServer-configurations.ts @@ -61,6 +61,7 @@ export function createClientServerConfigurationsWizardPage( ? { title: get('wizard.title.edit', { tagName: 'Client Server Services' }), content: [...content], + element: services, } : null; } diff --git a/packages/open-scd/src/wizards/service-log-settingsgroup.ts b/packages/open-scd/src/wizards/service-log-settingsgroup.ts index 398aae4bca..a74096272b 100644 --- a/packages/open-scd/src/wizards/service-log-settingsgroup.ts +++ b/packages/open-scd/src/wizards/service-log-settingsgroup.ts @@ -49,6 +49,7 @@ export function createLogSettingsGroupServicesWizardPage( ? { title: get('wizard.title.edit', { tagName: 'Services' }), content: [...content], + element: services, } : null; } diff --git a/packages/open-scd/src/wizards/service-networking.ts b/packages/open-scd/src/wizards/service-networking.ts index 6043245b57..b732eab4bf 100644 --- a/packages/open-scd/src/wizards/service-networking.ts +++ b/packages/open-scd/src/wizards/service-networking.ts @@ -61,6 +61,7 @@ export function createNetworkingWizardPage( ? { title: get('wizard.title.edit', { tagName: 'Networking' }), content: [...content], + element: services, } : null; } diff --git a/packages/open-scd/src/wizards/service-report-configurations.ts b/packages/open-scd/src/wizards/service-report-configurations.ts index 7781249f01..a5c465d73b 100644 --- a/packages/open-scd/src/wizards/service-report-configurations.ts +++ b/packages/open-scd/src/wizards/service-report-configurations.ts @@ -55,6 +55,7 @@ export function createReportConfigurationsWizardPage( ? { title: get('wizard.title.edit', { tagName: 'Report Settings' }), content: [...content], + element: services, } : null; } diff --git a/packages/open-scd/src/wizards/service-sampled-values.ts b/packages/open-scd/src/wizards/service-sampled-values.ts index d8523c73b5..70d3c850fc 100644 --- a/packages/open-scd/src/wizards/service-sampled-values.ts +++ b/packages/open-scd/src/wizards/service-sampled-values.ts @@ -60,6 +60,7 @@ export function createSampledValuesWizardPage( ? { title: get('wizard.title.edit', { tagName: 'Sampled Values' }), content: [...content], + element: services, } : null; } diff --git a/packages/open-scd/src/wizards/services.ts b/packages/open-scd/src/wizards/services.ts index b0e113d95c..73ac2b2f2d 100644 --- a/packages/open-scd/src/wizards/services.ts +++ b/packages/open-scd/src/wizards/services.ts @@ -17,7 +17,7 @@ export function isEmptyObject( return ( target === null ? [false] - : Object.keys(target).flatMap(key => { + : Object.keys(target as Object).flatMap(key => { const value: any = (target as any)[key]; if (typeof value === 'object') { return isEmptyObject(value); diff --git a/packages/open-scd/test/integration/wizards/__snapshots__/services-wizard.test.snap.js b/packages/open-scd/test/integration/wizards/__snapshots__/services-wizard.test.snap.js index 0382a08410..439d2a78f8 100644 --- a/packages/open-scd/test/integration/wizards/__snapshots__/services-wizard.test.snap.js +++ b/packages/open-scd/test/integration/wizards/__snapshots__/services-wizard.test.snap.js @@ -1,7 +1,7 @@ /* @web/test-runner snapshot v1 */ export const snapshots = {}; -snapshots["Wizards for SCL element Services define a Services wizards Wizard 1 looks like snapshot"] = +snapshots["Wizards for SCL element Services define a Services wizards Wizard 1 should look like snapshot"] = ` `; -/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 1 looks like snapshot */ +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 1 should look like snapshot */ -snapshots["Wizards for SCL element Services define a Services wizards Wizard 2 looks like snapshot"] = +snapshots["Wizards for SCL element Services define a Services wizards Wizard 2 should look like snapshot"] = ` `; -/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 2 looks like snapshot */ +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 2 should look like snapshot */ -snapshots["Wizards for SCL element Services define a Services wizards Wizard 3 looks like snapshot"] = +snapshots["Wizards for SCL element Services define a Services wizards Wizard 3 should look like snapshot"] = ` `; -/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 3 looks like snapshot */ +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 3 should look like snapshot */ + +snapshots["Wizards for SCL element Services define a Services wizards Wizard 4 should look like snapshot"] = +` +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+`; +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 4 should look like snapshot */ -snapshots["Wizards for SCL element Services define a Services wizards Wizard 4 looks like snapshot"] = +snapshots["Wizards for SCL element Services define a Services wizards Wizard 5 should look like snapshot"] = `
+ +
`; -/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 4 looks like snapshot */ +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 5 should look like snapshot */ -snapshots["Wizards for SCL element Services define a Services wizards Wizard 1 should look like snapshot"] = +snapshots["Wizards for SCL element Services define a Services wizards Wizard 6 should look like snapshot"] = `
- - - Conf - - - Fix - - - + + + - - Dyn - - - Conf - - - Fix - - - + - - Dyn - - - Conf - - - Fix - - - + - - Dyn - - - Conf - - - Fix - - - + - - Dyn - - - Conf - - - Fix - - - - - + - + + + + + + + + + + + + + + + + + + +
`; -/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 1 should look like snapshot */ +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 6 should look like snapshot */ -snapshots["Wizards for SCL element Services define a Services wizards Wizard 2 should look like snapshot"] = +snapshots["Wizards for SCL element Services AccessPoint wizards for Scl element Services should look like snapshot"] = `
@@ -1407,20 +1484,15 @@ snapshots["Wizards for SCL element Services define a Services wizards Wizard 2 nullable="" > Conf Fix @@ -1431,54 +1503,16 @@ snapshots["Wizards for SCL element Services define a Services wizards Wizard 2 label="datSet" nullable="" > - - Dyn - - - Conf - - Fix - - - - Dyn Conf @@ -1486,7 +1520,6 @@ snapshots["Wizards for SCL element Services define a Services wizards Wizard 2 Fix @@ -1494,57 +1527,19 @@ snapshots["Wizards for SCL element Services define a Services wizards Wizard 2 - - Dyn - - - Conf - - Fix - - - - Dyn Conf @@ -1552,7 +1547,6 @@ snapshots["Wizards for SCL element Services define a Services wizards Wizard 2 Fix @@ -1566,15 +1560,13 @@ snapshots["Wizards for SCL element Services define a Services wizards Wizard 2 Dyn Conf @@ -1582,7 +1574,6 @@ snapshots["Wizards for SCL element Services define a Services wizards Wizard 2 Fix @@ -1594,20 +1585,15 @@ snapshots["Wizards for SCL element Services define a Services wizards Wizard 2 nullable="" > Dyn Conf @@ -1615,1303 +1601,42 @@ snapshots["Wizards for SCL element Services define a Services wizards Wizard 2 Fix - + + - + + + - - - - - unbuffered - - - buffered - - - both - - - - - - - - - - - - - - - - - - - - -
- - - - - - -
-`; -/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 2 should look like snapshot */ - -snapshots["Wizards for SCL element Services define a Services wizards Wizard 3 should look like snapshot"] = -` -
- - - - - Conf - - - Fix - - - - - Dyn - - - Conf - - - Fix - - - - - Dyn - - - Conf - - - Fix - - - - - Dyn - - - Conf - - - Fix - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - -
-`; -/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 3 should look like snapshot */ - -snapshots["Wizards for SCL element Services define a Services wizards Wizard 4 should look like snapshot"] = -` -
- - - - - Conf - - - Fix - - - - - Dyn - - - Conf - - - Fix - - - - - Dyn - - - Conf - - - Fix - - - - - Dyn - - - Conf - - - Fix - - - - - Dyn - - - Conf - - - Fix - - - - - Conf - - - Fix - - - - - - - - - - - - - - - - - - - - - - - - - - - unicast - - - multicast - - - both - - - - - - - - - - - - - - - - - - - - -
- - - - -
-`; -/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 4 should look like snapshot */ - -snapshots["Wizards for SCL element Services AccessPoint wizards for Scl element Services should look like snapshot"] = -` -
- - - - - Conf - - - Fix - - - - - Dyn - - - Conf - - - Fix - - - - - Dyn - - - Conf - - - Fix - - - - - Dyn - - - Conf - - - Fix - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-`; -/* end snapshot Wizards for SCL element Services AccessPoint wizards for Scl element Services should look like snapshot */ - -snapshots["Wizards for SCL element Services define a Services wizards Wizard 5 should look like snapshot"] = -` -
- - - - - Conf - - - Fix - - - - - Dyn - - - Conf - - - Fix - - - - - Dyn - - - Conf - - - Fix - - - - - Dyn - - - Conf - - - Fix - - - - - Dyn - - - Conf - - - Fix - - - - - Conf - - - Fix - - - - - - - - - - - - - - - - - - - - - - - - - - - unicast - - - multicast - - - both - - - - - - - - - - - - - - - - -
- -
`; -/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 5 should look like snapshot */ - -snapshots["Wizards for SCL element Services define a Services wizards Wizard 6 should look like snapshot"] = -` -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
-`; -/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 6 should look like snapshot */ +/* end snapshot Wizards for SCL element Services AccessPoint wizards for Scl element Services should look like snapshot */ diff --git a/packages/open-scd/test/integration/wizards/services-wizard.test.ts b/packages/open-scd/test/integration/wizards/services-wizard.test.ts index f2ab7906e7..fa340f5841 100644 --- a/packages/open-scd/test/integration/wizards/services-wizard.test.ts +++ b/packages/open-scd/test/integration/wizards/services-wizard.test.ts @@ -4,6 +4,7 @@ import { editServicesWizard } from '../../../src/wizards/services.js'; import '../../mock-wizard-editor.js'; import { MockWizardEditor } from '../../mock-wizard-editor.js'; +import { WizardDialog } from '../../../src/wizard-dialog.js'; describe('Wizards for SCL element Services', () => { let doc: XMLDocument; @@ -45,6 +46,23 @@ describe('Wizards for SCL element Services', () => { expect(element.wizardUI.dialogs[idx]).to.equalSnapshot(); }); }); + + describe('> when pro mode is enabled', () => { + let elm: WizardDialog; + beforeEach(async () => { + elm = element.shadowRoot!.querySelector('wizard-dialog')!; + localStorage.setItem('mode', 'pro'); + elm.requestUpdate(); + await elm.updateComplete; + }); + [0, 1, 2, 3, 4, 5].forEach(idx => { + it(`Wizard ${idx + 1} should contain the code icon button`, () => { + expect(element.wizardUI.dialogs[idx].querySelector('mwc-icon-button-toggle')).to.have.attribute('onicon', 'code'); + }); + }); + }); + after(() => localStorage.removeItem('mode')); + }); ['AP2', 'AP3', 'AP4', 'AP5', 'AP6'].forEach(accessPointName => { From 1c2ef606a64f1af75af1c88dcdd3a5659b35d2aa Mon Sep 17 00:00:00 2001 From: Pascal Wilbrink Date: Thu, 2 Nov 2023 13:06:29 +0100 Subject: [PATCH 09/19] feat: add ISD file extension (#1351) * Feat: Added ISD file extensions * Feat: Added ISD File extensions --- packages/open-scd/src/menu/ImportIEDs.ts | 2 +- packages/open-scd/src/menu/Merge.ts | 2 +- packages/open-scd/src/menu/OpenProject.ts | 2 +- packages/open-scd/src/menu/UpdateSubstation.ts | 7 +++---- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/open-scd/src/menu/ImportIEDs.ts b/packages/open-scd/src/menu/ImportIEDs.ts index 5c511af3be..a0163951ec 100644 --- a/packages/open-scd/src/menu/ImportIEDs.ts +++ b/packages/open-scd/src/menu/ImportIEDs.ts @@ -547,7 +547,7 @@ export default class ImportingIedPlugin extends LitElement { return html` { this.onLoadFiles(event); (event.target).value = ''; - }} id="importied-plugin-input" accept=".sed,.scd,.ssd,.iid,.cid,.icd" type="file">`; + }} id="importied-plugin-input" accept=".sed,.scd,.ssd,.isd,.iid,.cid,.icd" type="file">`; } protected buildIedSelection(importDoc: XMLDocument, fileName: string): void { diff --git a/packages/open-scd/src/menu/Merge.ts b/packages/open-scd/src/menu/Merge.ts index 25a623b659..b5c3afa91f 100644 --- a/packages/open-scd/src/menu/Merge.ts +++ b/packages/open-scd/src/menu/Merge.ts @@ -31,7 +31,7 @@ export default class MergePlugin extends LitElement { return html` ((event.target).value = '')} @change=${ this.mergeDoc - } id="merge-plugin-input" accept=".sed,.scd,.ssd,.iid,.cid,.icd" type="file">`; + } id="merge-plugin-input" accept=".sed,.scd,.ssd,.isd,.iid,.cid,.icd" type="file">`; } static styles = css` diff --git a/packages/open-scd/src/menu/OpenProject.ts b/packages/open-scd/src/menu/OpenProject.ts index 24f8b6650b..915ae50a2a 100644 --- a/packages/open-scd/src/menu/OpenProject.ts +++ b/packages/open-scd/src/menu/OpenProject.ts @@ -37,7 +37,7 @@ export default class OpenProjectPlugin extends LitElement { return html` ((event.target).value = '')} @change=${ this.openDoc - } id="open-plugin-input" accept=".sed,.scd,.ssd,.iid,.cid,.icd" type="file">`; + } id="open-plugin-input" accept=".sed,.scd,.ssd,.isd,.iid,.cid,.icd" type="file">`; } static styles = css` diff --git a/packages/open-scd/src/menu/UpdateSubstation.ts b/packages/open-scd/src/menu/UpdateSubstation.ts index ba7a1b26f6..f05bfb53e5 100644 --- a/packages/open-scd/src/menu/UpdateSubstation.ts +++ b/packages/open-scd/src/menu/UpdateSubstation.ts @@ -136,10 +136,9 @@ export default class UpdateSubstationPlugin extends LitElement { render(): TemplateResult { return html` - ((event.target).value = '')} @change=${(e: Event) => - this.updateSubstation( - e - )} id="update-substation-plugin-input" accept=".sed,.scd,.ssd,.iid,.cid" type="file">`; + ((event.target).value = '')} + @change=${this.updateSubstation} + id="update-substation-plugin-input" accept=".sed,.scd,.ssd,.iid,.cid" type="file">`; } static styles = css` From 2066e4c71d8ab888cc04f1628c30b39582033fcb Mon Sep 17 00:00:00 2001 From: Steffen van den Driest <35229971+Stef3st@users.noreply.github.com> Date: Thu, 2 Nov 2023 14:11:29 +0100 Subject: [PATCH 10/19] fix: supervision updates after ied rename (#1338) * fix: supervision updates after ied rename Signed-off-by: Stef3st * chore: improve efficiency and tidy up Signed-off-by: Stef3st --------- Signed-off-by: Stef3st --- .../src/wizards/foundation/references.ts | 246 +++++++++++++----- .../open-scd/test/testfiles/wizards/ied.scd | 79 ++++++ .../wizards/foundation/references.test.ts | 66 ++++- 3 files changed, 315 insertions(+), 76 deletions(-) diff --git a/packages/open-scd/src/wizards/foundation/references.ts b/packages/open-scd/src/wizards/foundation/references.ts index e23a2019ff..d166d43871 100644 --- a/packages/open-scd/src/wizards/foundation/references.ts +++ b/packages/open-scd/src/wizards/foundation/references.ts @@ -2,13 +2,17 @@ import { Delete, getNameAttribute, isPublic, - Replace -} from "../../foundation.js"; + Replace, +} from '../../foundation.js'; const referenceInfoTags = ['IED', 'Substation', 'VoltageLevel', 'Bay'] as const; type ReferencesInfoTag = typeof referenceInfoTags[number]; -type FilterFunction = (element: Element, attributeName: string | null, oldName: string | null) => string; +type FilterFunction = ( + element: Element, + attributeName: string | null, + oldName: string | null +) => string; /* * For every supported tag a list of information about which elements to search for and which attribute value @@ -23,50 +27,68 @@ const referenceInfos: Record< filter: FilterFunction; }[] > = { - IED: - [{ + IED: [ + { attributeName: 'iedName', - filter: simpleAttributeFilter(`Association`) - }, { + filter: simpleAttributeFilter(`Association`), + }, + { attributeName: 'iedName', - filter: simpleAttributeFilter(`ClientLN`) - }, { + filter: simpleAttributeFilter(`ClientLN`), + }, + { attributeName: 'iedName', - filter: simpleAttributeFilter(`ConnectedAP`) - }, { + filter: simpleAttributeFilter(`ConnectedAP`), + }, + { attributeName: 'iedName', - filter: simpleAttributeFilter(`ExtRef`) - }, { + filter: simpleAttributeFilter(`ExtRef`), + }, + { attributeName: 'iedName', - filter: simpleAttributeFilter(`KDC`) - }, { + filter: simpleAttributeFilter(`KDC`), + }, + { attributeName: 'iedName', - filter: simpleAttributeFilter(`LNode`) - }, { + filter: simpleAttributeFilter(`LNode`), + }, + { attributeName: null, - filter: simpleTextContentFilter(`GSEControl > IEDName`) - }, { + filter: simpleTextContentFilter(`GSEControl > IEDName`), + }, + { attributeName: null, - filter: simpleTextContentFilter(`SampledValueControl > IEDName`) - }], - Substation: - [{ + filter: simpleTextContentFilter(`SampledValueControl > IEDName`), + }, + { + attributeName: null, + filter: simpleTextContentFilter(`LN > DOI > DAI > Val`), + }, + ], + Substation: [ + { attributeName: 'substationName', - filter: simpleAttributeFilter(`Terminal`) - }], - VoltageLevel: - [{ + filter: simpleAttributeFilter(`Terminal`), + }, + ], + VoltageLevel: [ + { attributeName: 'voltageLevelName', - filter: attributeFilterWithParentNameAttribute(`Terminal`, - {'Substation': 'substationName'}) - }], - Bay: - [{ + filter: attributeFilterWithParentNameAttribute(`Terminal`, { + Substation: 'substationName', + }), + }, + ], + Bay: [ + { attributeName: 'bayName', - filter: attributeFilterWithParentNameAttribute(`Terminal`, - {'Substation': 'substationName', 'VoltageLevel': 'voltageLevelName'}) - }], -} + filter: attributeFilterWithParentNameAttribute(`Terminal`, { + Substation: 'substationName', + VoltageLevel: 'voltageLevelName', + }), + }, + ], +}; /** * Simple function to create a filter to find Elements where the value of an attribute equals the old name. @@ -74,9 +96,13 @@ const referenceInfos: Record< * @param tagName - The tagName of the elements to search for. */ function simpleAttributeFilter(tagName: string) { - return function filter(element: Element, attributeName: string | null, oldName: string | null): string { + return function filter( + element: Element, + attributeName: string | null, + oldName: string | null + ): string { return `${tagName}[${attributeName}="${oldName}"]`; - } + }; } /** @@ -88,7 +114,7 @@ function simpleAttributeFilter(tagName: string) { function simpleTextContentFilter(elementQuery: string) { return function filter(): string { return `${elementQuery}`; - } + }; } /** @@ -105,19 +131,28 @@ function simpleTextContentFilter(elementQuery: string) { * @param parentInfo - The records of parent to search for, the key is the tagName of the parent, the value * is the name of the attribuet to use in the query. */ -function attributeFilterWithParentNameAttribute(tagName: string, parentInfo: Record) { - return function filter(element: Element, attributeName: string | null, oldName: string | null): string { - return `${tagName}${Object.entries(parentInfo) - .map(([parentTag, parentAttribute]) => { - const parentElement = element.closest(parentTag); - if (parentElement && parentElement.hasAttribute('name')) { - const name = parentElement.getAttribute('name'); - return `[${parentAttribute}="${name}"]`; - } - return null; - }).join('') // Join the strings to 1 string without a separator. +function attributeFilterWithParentNameAttribute( + tagName: string, + parentInfo: Record +) { + return function filter( + element: Element, + attributeName: string | null, + oldName: string | null + ): string { + return `${tagName}${ + Object.entries(parentInfo) + .map(([parentTag, parentAttribute]) => { + const parentElement = element.closest(parentTag); + if (parentElement && parentElement.hasAttribute('name')) { + const name = parentElement.getAttribute('name'); + return `[${parentAttribute}="${name}"]`; + } + return null; + }) + .join('') // Join the strings to 1 string without a separator. }[${attributeName}="${oldName}"]`; - } + }; } /** @@ -129,7 +164,11 @@ function attributeFilterWithParentNameAttribute(tagName: string, parentInfo: Rec * @param value - The value to set on the cloned element or if null remove the attribute. * @returns Returns the cloned element. */ -function cloneElement(element: Element, attributeName: string, value: string): Element { +function cloneElement( + element: Element, + attributeName: string, + value: string +): Element { const newElement = element.cloneNode(false); newElement.setAttribute(attributeName, value); return newElement; @@ -142,7 +181,10 @@ function cloneElement(element: Element, attributeName: string, value: string): E * @param value - The value to set. * @returns Returns the cloned element. */ -function cloneElementAndTextContent(element: Element, value: string | null): Element { +function cloneElementAndTextContent( + element: Element, + value: string | null +): Element { const newElement = element.cloneNode(false); newElement.textContent = value; return newElement; @@ -160,7 +202,11 @@ function cloneElementAndTextContent(element: Element, value: string | null): Ele * @param newName - The new name of the element. * @returns Returns a list of Replace Actions that can be added to a Complex Action or returned directly for execution. */ -export function updateReferences(element: Element, oldName: string | null, newName: string): Replace[] { +export function updateReferences( + element: Element, + oldName: string | null, + newName: string +): Replace[] { if (oldName === null || oldName === newName) { return []; } @@ -179,9 +225,13 @@ export function updateReferences(element: Element, oldName: string | null, newNa Array.from(element.ownerDocument.querySelectorAll(`${filter}`)) .filter(isPublic) .forEach(element => { - const newElement = cloneElement(element, info.attributeName!, newName); - actions.push({old: {element}, new: {element: newElement}}); - }) + const newElement = cloneElement( + element, + info.attributeName!, + newName + ); + actions.push({ old: { element }, new: { element: newElement } }); + }); } else { // If the text content needs to be updated, filter on the text content can't be done in a CSS Selector. // So we query all elements the may need to be updated and filter them afterwards. @@ -190,10 +240,71 @@ export function updateReferences(element: Element, oldName: string | null, newNa .filter(isPublic) .forEach(element => { const newElement = cloneElementAndTextContent(element, newName); - actions.push({old: {element}, new: {element: newElement}}); - }) + actions.push({ old: { element }, new: { element: newElement } }); + }); } - }) + }); + + if (element.tagName === 'IED') + actions.push(...updateVals(element, oldName, newName)); + return actions; +} + +/** + * Adds Replace actions to update supervision references. + * Only a maximum of one Val element per IED with ExtRef elements that contain src attributes will be altered. + * The Val element that needs to be altered will be found by checking if the controlBlockReference complies with this element. + * The controlBlockReference needs to contain the IED that gets renamed. + * + * @param element - The element for which the name is updated. + * @param oldName - The old name of the element. + * @param newName - The new name of the element. + */ +function updateVals(element: Element, oldName: string | null, newName: string) { + const actions: Replace[] = []; + const ieds = element.ownerDocument.querySelectorAll('IED'); + ieds.forEach(ied => { + // All Val elements inside LGOS and LSVS lnClasses that starts with the IED name that needs to be changed will be gathered. + // Because of a very rare case where multiple IED start with the same name, all will be gathered. + // If none are found continue to the next IED. + const valValues: Element[] = Array.from( + ied.querySelectorAll( + `:scope > AccessPoint > Server > LDevice > LN[lnClass="LGOS"] > DOI > DAI > Val, :scope > AccessPoint > Server > LDevice > LN[lnClass="LSVS"] > DOI > DAI > Val` + ) + ); + + if (valValues.length === 0) return; + + // If atleast one extRef element contains the to-be-changed IED name and has a srcCBName, one will be gathered. + // From that extRef element a controlblockreferences will be created and compared to the Val elements. + // If a match is found, the name of that Val element will be changed accordingly and the loop will be broken, as only 1 Val element need to be changed. + + const ref = ied.querySelector( + `:scope > AccessPoint > Server > LDevice > LN0 > Inputs > ExtRef[iedName="${oldName}"][srcCBName]` + ); + + const suffixCBReference = + ref?.getAttribute('srcLDInst') + + '/' + + ref?.getAttribute('srcLNClass') + + '.' + + ref?.getAttribute('srcCBName'); + + for (let value of valValues) { + if (oldName + suffixCBReference === value.textContent!.trim()) { + const newElement = cloneElementAndTextContent( + value, + newName + suffixCBReference + ); + actions.push({ + old: { element: value }, + new: { element: newElement }, + }); + break; + } + } + }); + return actions; } @@ -225,8 +336,8 @@ export function deleteReferences(element: Element): Delete[] { Array.from(element.ownerDocument.querySelectorAll(`${filter}`)) .filter(isPublic) .forEach(element => { - actions.push({old: { parent: element.parentElement!, element }}); - }) + actions.push({ old: { parent: element.parentElement!, element } }); + }); } else { // If the text content needs to be used for filtering, filter on the text content can't be done in a CSS Selector. // So we query all elements the may need to be deleted and filter them afterwards. @@ -236,10 +347,15 @@ export function deleteReferences(element: Element): Delete[] { .forEach(element => { // We not only need to remove the element containing the text content, but the parent of this element. if (element.parentElement) { - actions.push({old: {parent: element.parentElement.parentElement!, element: element.parentElement}}); + actions.push({ + old: { + parent: element.parentElement.parentElement!, + element: element.parentElement, + }, + }); } - }) + }); } - }) + }); return actions; } diff --git a/packages/open-scd/test/testfiles/wizards/ied.scd b/packages/open-scd/test/testfiles/wizards/ied.scd index 74c2b87215..753b1c2131 100644 --- a/packages/open-scd/test/testfiles/wizards/ied.scd +++ b/packages/open-scd/test/testfiles/wizards/ied.scd @@ -416,6 +416,85 @@ + + + + + + + + + + + + + + Publisher/LLN0.cb1 + + + + + + + + + + + + + + + + + + + + + + + Publisher/LLN0.cb1 + + + + + + + Publisher/LLN0.cb1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/open-scd/test/unit/wizards/foundation/references.test.ts b/packages/open-scd/test/unit/wizards/foundation/references.test.ts index fa80c1683e..3f8c1f8c3a 100644 --- a/packages/open-scd/test/unit/wizards/foundation/references.test.ts +++ b/packages/open-scd/test/unit/wizards/foundation/references.test.ts @@ -6,7 +6,7 @@ import { } from '../test-support.js'; import { deleteReferences, - updateReferences + updateReferences, } from '../../../../src/wizards/foundation/references.js'; import { expect } from '@open-wc/testing'; @@ -19,11 +19,17 @@ describe('Update reference for ', () => { beforeEach(async () => { doc = await fetchDoc('/test/testfiles/wizards/ied.scd'); - conductingEquipment = doc.querySelector(`ConductingEquipment[name="${ceName}"]`)!; + conductingEquipment = doc.querySelector( + `ConductingEquipment[name="${ceName}"]` + )!; }); it('will update no references to ConductingEquipment', function () { - const updateActions = updateReferences(conductingEquipment, ceName, 'Other CE Name'); + const updateActions = updateReferences( + conductingEquipment, + ceName, + 'Other CE Name' + ); expect(updateActions.length).to.equal(0); }); @@ -38,7 +44,9 @@ describe('Update reference for ', () => { beforeEach(async () => { doc = await fetchDoc('/test/testfiles/wizards/ied.scd'); - connectAP = doc.querySelector(`ConnectedAP[iedName="IED1"][apName="P1"]`)!; + connectAP = doc.querySelector( + `ConnectedAP[iedName="IED1"][apName="P1"]` + )!; }); it('will update no references to ConnectedAP', function () { @@ -52,6 +60,12 @@ describe('Update reference for ', () => { }); }); + describe('IED update Val element', () => { + beforeEach(async () => { + doc = await fetchDoc('/test/testfiles/wizards/iedRename.scd'); + }); + }); + describe('IED', () => { beforeEach(async () => { doc = await fetchDoc('/test/testfiles/wizards/ied.scd'); @@ -89,12 +103,7 @@ describe('Update reference for ', () => { const updateActions = updateReferences(ied, oldName, newName); expect(updateActions.length).to.equal(8); - expectUpdateTextValue( - updateActions[6], - 'GSEControl', - oldName, - newName - ); + expectUpdateTextValue(updateActions[6], 'GSEControl', oldName, newName); expectUpdateTextValue( updateActions[7], 'SampledValueControl', @@ -103,6 +112,39 @@ describe('Update reference for ', () => { ); }); + it('will update all references to IED Pub and checks for correct Val elements', function () { + const oldName = 'Pub'; + const newName = 'NewPub'; + const ied = doc.querySelector(`IED[name="${oldName}"]`)!; + + const updateActions = updateReferences(ied, oldName, newName); + expect(updateActions.length).to.equal(5); + + const input1 = updateActions[0].old.element; + const input2 = updateActions[1].old.element; + const input3 = updateActions[2].old.element; + const input4 = updateActions[3].old.element; + + expect(input1.getAttribute('srcCBName')).to.be.equal(null); + expect(input2.getAttribute('srcCBName')).to.be.equal(null); + expect(input3.getAttribute('srcCBName')).to.be.equal('cb1'); + expect(input4.getAttribute('srcCBName')).to.be.equal('cb1'); + + const valSuffix3 = + input3.getAttribute('srcLDInst') + + '/' + + input3.getAttribute('srcLNClass') + + '.' + + input3.getAttribute('srcCBName'); + + expectUpdateTextValue( + updateActions[4], + 'DAI', + oldName + valSuffix3, + newName + valSuffix3 + ); + }); + it('will delete all references to IED IED1', function () { const name = 'IED1'; const ied = doc.querySelector(`IED[name="${name}"]`)!; @@ -157,7 +199,9 @@ describe('Update reference for ', () => { it('will update all references to VoltageLevel "J1"', function () { const oldName = 'J1'; const newName = 'J1 UPD'; - const voltageLevel = doc.querySelector(`VoltageLevel[name="${oldName}"]`)!; + const voltageLevel = doc.querySelector( + `VoltageLevel[name="${oldName}"]` + )!; const updateActions = updateReferences(voltageLevel, oldName, newName); expect(updateActions.length).to.equal(48); From 76e002da00b17a63a1117f5263cab546aec07c2b Mon Sep 17 00:00:00 2001 From: Stef3st Date: Mon, 6 Nov 2023 10:45:30 +0100 Subject: [PATCH 11/19] chore: tidy up merge Signed-off-by: Stef3st --- .github/workflows/add-pr-to-board.yml | 103 - .github/workflows/build-and-deploy.yml | 34 - .github/workflows/save-pr-data-to-file.yml | 37 - packages/compas-open-scd/package.json | 4 +- packages/compas-open-scd/src/Hosting.ts | 18 +- packages/compas-open-scd/src/Logging.ts | 198 +- packages/compas-open-scd/src/Plugging.ts | 4 +- packages/compas-open-scd/src/editors/IED.ts | 66 +- .../src/menu/UpdateSubstation.ts | 4 - packages/compas-open-scd/src/open-scd.ts | 7 +- .../compas-open-scd/src/translations/de.ts | 1 - .../compas-open-scd/src/translations/en.ts | 3 +- .../src/wizards/foundation/references.ts | 246 +-- .../src/wizards/service-GSEControl.ts | 1 - .../service-clientServer-configurations.ts | 1 - .../src/wizards/service-log-settingsgroup.ts | 1 - .../src/wizards/service-networking.ts | 1 - .../wizards/service-report-configurations.ts | 1 - .../src/wizards/service-sampled-values.ts | 1 - .../compas-open-scd/src/wizards/services.ts | 2 +- .../test/integration/Setting.test.ts | 8 +- .../__snapshots__/open-scd.test.snap.js | 43 +- .../GooseSubscriberDataBinding.test.ts | 4 +- .../GooseSubscriberLaterBinding.test.ts | 4 +- .../GooseSubscriberMessageBinding.test.ts | 4 +- .../test/integration/editors/IED.test.ts | 58 +- .../editors/SMVSubscriberDataBinding.test.ts | 4 +- .../editors/SMVSubscriberLaterBinding.test.ts | 4 +- .../SMVSubscriberMessageBinding.test.ts | 4 +- ...GooseSubscriberMessageBinding.test.snap.js | 70 +- .../editors/__snapshots__/IED.test.snap.js | 25 +- .../SMVSubscriberMessageBinding.test.snap.js | 70 +- .../triggered/ImportIedsPlugin.test.ts | 12 +- .../test/integration/open-scd.test.ts | 10 +- .../validators/ValidateSchema.test.ts | 4 +- .../services-wizard.test.snap.js | 1941 ++++++++++++++--- .../wizards/services-wizard.test.ts | 18 - .../test/mock-editor-logger.ts | 4 +- .../test/mock-setter-logger.ts | 4 +- .../test/testfiles/wizards/ied.scd | 79 - .../compas-open-scd/test/unit/Logging.test.ts | 30 +- .../compas-open-scd/test/unit/mock-plugger.ts | 4 +- .../wizards/foundation/references.test.ts | 66 +- packages/open-scd/index.html | 18 +- packages/open-scd/manifest.json | 6 +- packages/open-scd/public/js/plugins.js | 120 +- packages/open-scd/public/md/Home.md | 3 - packages/open-scd/public/md/_Sidebar.md | 4 +- packages/open-scd/snowpack.config.mjs | 26 +- packages/open-scd/src/Editing.ts | 2 +- packages/open-scd/src/Historing.ts | 43 +- packages/open-scd/src/Hosting.ts | 41 +- packages/open-scd/src/Plugging.ts | 5 +- packages/open-scd/src/Setting.ts | 41 + .../substation/general-equipment-editor.ts | 4 +- packages/open-scd/src/foundation.ts | 2 +- .../open-scd/src/menu/UpdateSubstation.ts | 3 - packages/open-scd/src/open-scd.ts | 6 - packages/open-scd/src/translations/de.ts | 165 -- packages/open-scd/src/translations/en.ts | 182 -- packages/open-scd/src/wizard-dialog.ts | 17 +- packages/open-scd/src/wizard-textfield.ts | 11 +- packages/open-scd/src/wizards/dai.ts | 2 +- .../src/wizards/foundation/dai-field-type.ts | 4 +- packages/open-scd/sw.js | 4 +- .../__snapshots__/Setting.test.snap.js | 13 + .../__snapshots__/open-scd.test.snap.js | 362 +-- .../datasets-container.test.snap.js | 126 ++ .../triggered/ImportIedsPlugin.test.ts | 1 + .../validators/ValidateTemplates.test.ts | 2 - packages/open-scd/test/unit/Historing.test.ts | 38 - packages/open-scd/test/unit/Plugging.test.ts | 10 +- .../unit/__snapshots__/Setting.test.snap.js | 108 +- .../__snapshots__/do-container.test.snap.js | 60 +- .../__snapshots__/ln-container.test.snap.js | 70 +- .../unit/menu/UpdateDescriptionSEL.test.ts | 19 +- .../__snapshots__/clientln.test.snap.js | 1 - .../controlwithiedname.test.snap.js | 1 - .../test/unit/wizards/test-support.ts | 13 - packages/open-scd/tsconfig.json | 2 +- packages/open-scd/web-test-runner.config.mjs | 27 +- packages/open-scd/workbox-config.cjs | 13 +- 82 files changed, 2365 insertions(+), 2413 deletions(-) delete mode 100644 .github/workflows/add-pr-to-board.yml delete mode 100644 .github/workflows/build-and-deploy.yml delete mode 100644 .github/workflows/save-pr-data-to-file.yml diff --git a/.github/workflows/add-pr-to-board.yml b/.github/workflows/add-pr-to-board.yml deleted file mode 100644 index c94c91c40e..0000000000 --- a/.github/workflows/add-pr-to-board.yml +++ /dev/null @@ -1,103 +0,0 @@ -# SPDX-FileCopyrightText: 2023 Alliander N.V. -# -# SPDX-License-Identifier: Apache-2.0 - -name: Add pull requests to the overview board - -on: - workflow_run: - workflows: [Prepare PR data] - types: [completed] - -env: - todo: Pending - changes_requested: Changes Requested - approved: Approved - -jobs: - read-data-and-automate: - runs-on: ubuntu-latest - if: github.event.workflow_run.conclusion == 'success' - outputs: - pr_node_id: ${{ steps.pr_node_id.outputs.content }} - event_action: ${{ steps.event_action.outputs.content }} - review_pr_node_id: ${{ steps.review_pr_node_id.outputs.content }} - review_state: ${{ steps.review_state.outputs.content }} - steps: - # Data retrieval steps in case of a PR event - - name: Download PR data artifact - if: github.event.workflow_run.event == 'pull_request' || github.event.workflow_run.event == 'pull_request_target' - uses: dawidd6/action-download-artifact@v2 - with: - workflow: Prepare PR data - run_id: ${{ github.event.workflow_run.id }} - name: PR_DATA - - name: Read PR event's PR_NODE_ID.txt - if: github.event.workflow_run.event == 'pull_request' || github.event.workflow_run.event == 'pull_request_target' - id: pr_node_id - uses: juliangruber/read-file-action@v1 - with: - path: ./PR_NODE_ID.txt - trim: true - - name: Read PR event's EVENT_ACTION.txt - if: github.event.workflow_run.event == 'pull_request' || github.event.workflow_run.event == 'pull_request_target' - id: event_action - uses: juliangruber/read-file-action@v1 - with: - path: ./EVENT_ACTION.txt - trim: true - # Data retrieval steps in case of a PR review event - - name: Download PR review data artifact - if: github.event.workflow_run.event == 'pull_request_review' - uses: dawidd6/action-download-artifact@v2 - with: - workflow: Prepare PR data - run_id: ${{ github.event.workflow_run.id }} - name: REVIEW_DATA - - name: Read PR review event's PR_NODE_ID.txt - if: github.event.workflow_run.event == 'pull_request_review' - id: review_pr_node_id - uses: juliangruber/read-file-action@v1 - with: - path: ./PR_NODE_ID.txt - trim: true - - name: Read PR review event's REVIEW_STATE.txt - if: github.event.workflow_run.event == 'pull_request_review' - id: review_state - uses: juliangruber/read-file-action@v1 - with: - path: ./REVIEW_STATE.txt - trim: true - # Project automation steps - - name: Move PR to ${{ env.todo }} - if: ((github.event.workflow_run.event == 'pull_request' || - github.event.workflow_run.event == 'pull_request_target') && - (steps.event_action.outputs.content == 'opened' || - steps.event_action.outputs.content == 'reopened')) || - (github.event.workflow_run.event == 'pull_request_review' && - steps.review_state.outputs.content == 'dismissed') - uses: leonsteinhaeuser/project-beta-automations@v2.1.0 - with: - project_id: 7 - gh_token: ${{ secrets.ORG_GITHUB_ACTION_SECRET }} - organization: openscd - resource_node_id: ${{ github.event.workflow_run.event == 'pull_request_review' && steps.review_pr_node_id.outputs.content || steps.pr_node_id.outputs.content }} - status_value: ${{ env.todo }} - - name: Move PR to ${{env.approved}} - if: github.event.workflow_run.event == 'pull_request_review' && steps.review_state.outputs.content == 'approved' - uses: leonsteinhaeuser/project-beta-automations@v2.1.0 - with: - project_id: 7 - gh_token: ${{ secrets.ORG_GITHUB_ACTION_SECRET }} - organization: openscd - resource_node_id: ${{ steps.review_pr_node_id.outputs.content }} - status_value: ${{ env.approved }} - - name: Move PR to ${{env.changes_requested}} - if: github.event.workflow_run.event == 'pull_request_review' && steps.review_state.outputs.content == 'changes_requested' - uses: leonsteinhaeuser/project-beta-automations@v2.1.0 - with: - project_id: 7 - gh_token: ${{ secrets.ORG_GITHUB_ACTION_SECRET }} - organization: openscd - resource_node_id: ${{ steps.review_pr_node_id.outputs.content }} - status_value: ${{ env.changes_requested }} diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml deleted file mode 100644 index e4656ade74..0000000000 --- a/.github/workflows/build-and-deploy.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: Build and Deploy -on: - push: - branches: - - main - -jobs: - build-and-deploy: - runs-on: ubuntu-latest - defaults: - run: - shell: bash - working-directory: packages/open-scd - steps: - - name: Checkout - uses: actions/checkout@v2.3.1 - - - name: Use Node.js 18.x - uses: actions/setup-node@v1 - with: - node-version: '18.x' - - - name: Install and Build - run: | - npm clean-install - npm run-script build - - - name: Deploy - uses: JamesIves/github-pages-deploy-action@4.1.5 - with: - branch: master - folder: packages/open-scd/build - repository-name: openscd/openscd.github.io - ssh-key: ${{ secrets.DEPLOY_KEY }} diff --git a/.github/workflows/save-pr-data-to-file.yml b/.github/workflows/save-pr-data-to-file.yml deleted file mode 100644 index e216eeef2b..0000000000 --- a/.github/workflows/save-pr-data-to-file.yml +++ /dev/null @@ -1,37 +0,0 @@ -# SPDX-FileCopyrightText: 2023 Alliander N.V. -# -# SPDX-License-Identifier: Apache-2.0 - -name: Prepare PR data -# Necessary step to allow adding external PRs to the project board - -on: [pull_request, pull_request_target, pull_request_review] - -jobs: - save-pr-data: - name: Save PR data to file - runs-on: ubuntu-latest - if: ${{ github.event.pull_request.user.login != 'github-actions[bot]' }} - steps: - - name: Save PR node_id and event_action to files - if: github.event_name == 'pull_request' || github.event_name == 'pull_request_target' - run: echo ${{ github.event.pull_request.node_id }} > PR_NODE_ID.txt && echo ${{ github.event.action }} > EVENT_ACTION.txt - - name: Archive PR node_id and event_action - if: github.event_name == 'pull_request' || github.event_name == 'pull_request_target' - uses: actions/upload-artifact@v3 - with: - name: PR_DATA - path: | - PR_NODE_ID.txt - EVENT_ACTION.txt - - name: Save PR node_id and review_state to files - if: github.event_name == 'pull_request_review' - run: echo ${{ github.event.pull_request.node_id }} > PR_NODE_ID.txt && echo ${{ github.event.review.state }} > REVIEW_STATE.txt - - name: Archive PR and review_state - if: github.event_name == 'pull_request_review' - uses: actions/upload-artifact@v3 - with: - name: REVIEW_DATA - path: | - PR_NODE_ID.txt - REVIEW_STATE.txt diff --git a/packages/compas-open-scd/package.json b/packages/compas-open-scd/package.json index 9238aa93ed..d21faa8e53 100644 --- a/packages/compas-open-scd/package.json +++ b/packages/compas-open-scd/package.json @@ -1,6 +1,6 @@ { - "name": "open-scd", - "version": "0.33.0", + "name": "compas-open-scd", + "version": "0.33.6", "repository": "https://github.com/openscd/open-scd.git", "description": "A bottom-up substation configuration designer for projects described using SCL `IEC 61850-6` Edition 2 or greater.", "keywords": [ diff --git a/packages/compas-open-scd/src/Hosting.ts b/packages/compas-open-scd/src/Hosting.ts index 43cd0386ba..6a21f97b65 100644 --- a/packages/compas-open-scd/src/Hosting.ts +++ b/packages/compas-open-scd/src/Hosting.ts @@ -16,14 +16,9 @@ import { ActionDetail, List } from '@material/mwc-list'; import { ListItem } from '@material/mwc-list/mwc-list-item'; import { Mixin, newPendingStateEvent } from './foundation.js'; -<<<<<<< HEAD:packages/open-scd/src/Hosting.ts -import { HistoringElement } from './Historing.js'; -import { Plugin, PluggingElement, pluginIcons } from './Plugging.js'; -======= import { UserInfoEvent } from './compas/foundation.js'; import { LoggingElement } from './Logging.js'; import { PluggingElement, Plugin, pluginIcons } from './Plugging.js'; ->>>>>>> main:packages/compas-open-scd/src/Hosting.ts import { SettingElement } from './Setting.js'; interface MenuItem { @@ -45,12 +40,12 @@ interface MenuPlugin { run: () => Promise; } -/** Mixin that hosts the UI for Plugins, Settings and Historing */ +/** Mixin that hosts the UI for Plugins, Settings and Logging */ export type HostingElement = Mixin; export function Hosting< TBase extends new (...args: any[]) => PluggingElement & - HistoringElement & + LoggingElement & SettingElement >(Base: TBase) { class HostingElement extends Base { @@ -185,19 +180,12 @@ export function Hosting< }, ...validators, { - icon: 'list', + icon: 'history', name: 'menu.viewLog', actionItem: true, action: (): void => this.logUI.show(), kind: 'static', }, - { - icon: 'history', - name: 'menu.viewHistory', - actionItem: true, - action: (): void => this.historyUI.show(), - kind: 'static', - }, { icon: 'rule', name: 'menu.viewDiag', diff --git a/packages/compas-open-scd/src/Logging.ts b/packages/compas-open-scd/src/Logging.ts index 1423896092..ca955343e0 100644 --- a/packages/compas-open-scd/src/Logging.ts +++ b/packages/compas-open-scd/src/Logging.ts @@ -21,11 +21,8 @@ import { Snackbar } from '@material/mwc-snackbar'; import './filtered-list.js'; import { - CommitDetail, CommitEntry, ifImplemented, - InfoDetail, - InfoEntry, invert, IssueDetail, IssueEvent, @@ -47,6 +44,7 @@ const icons = { info: 'info', warning: 'warning', error: 'report', + action: 'history', }; function getPluginName(src: string): string { @@ -72,18 +70,13 @@ function getPluginName(src: string): string { * Renders the `history` to `logUI` and the latest `'error'` [[`LogEntry`]] to * `messageUI`. */ -export type HistoringElement = Mixin; +export type LoggingElement = Mixin; -export function Historing(Base: TBase) { - class HistoringElement extends Base { +export function Logging(Base: TBase) { + class LoggingElement extends Base { /** All [[`LogEntry`]]s received so far through [[`LogEvent`]]s. */ @property({ type: Array }) - log: InfoEntry[] = []; - - /** All [[`CommitEntry`]]s received so far through [[`LogEvent`]]s */ - @property({ type: Array }) - history: CommitEntry[] = []; - + history: LogEntry[] = []; /** Index of the last [[`EditorAction`]] applied. */ @property({ type: Number }) editCount = -1; @@ -93,7 +86,6 @@ export function Historing(Base: TBase) { latestIssue!: IssueDetail; @query('#log') logUI!: Dialog; - @query('#history') historyUI!: Dialog; @query('#diagnostic') diagnosticUI!: Dialog; @query('#error') errorUI!: Snackbar; @query('#warning') warningUI!: Snackbar; @@ -152,10 +144,16 @@ export function Historing(Base: TBase) { return true; } - private onHistory(detail: CommitDetail) { - const entry: CommitEntry = { + private onLog(le: LogEvent): void { + if (le.detail.kind === 'reset') { + this.history = []; + this.editCount = -1; + return; + } + + const entry: LogEntry = { time: new Date(), - ...detail, + ...le.detail, }; if (entry.kind === 'action') { @@ -166,51 +164,22 @@ export function Historing(Base: TBase) { } this.history.push(entry); - this.requestUpdate('history', []); - } - - private onReset() { - this.log = []; - this.history = []; - this.editCount = -1; - } - - private onInfo(detail: InfoDetail) { - const entry: InfoEntry = { - time: new Date(), - ...detail, - }; - - this.log.push(entry); if (!this.logUI.open) { const ui = { error: this.errorUI, warning: this.warningUI, info: this.infoUI, - }[detail.kind]; + action: this.infoUI, + }[le.detail.kind]; ui.close(); ui.show(); } - if (detail.kind == 'error') { + if (le.detail.kind == 'error') { this.errorUI.close(); // hack to reset timeout this.errorUI.show(); } - this.requestUpdate('log', []); - } - - private onLog(le: LogEvent): void { - switch (le.detail.kind) { - case 'reset': - this.onReset(); - break; - case 'action': - this.onHistory(le.detail); - break; - default: - this.onInfo(le.detail); - break; - } + this.requestUpdate('history', []); } async performUpdate() { @@ -232,36 +201,7 @@ export function Historing(Base: TBase) { } renderLogEntry( - entry: InfoEntry, - index: number, - log: LogEntry[] - ): TemplateResult { - return html` - - - - ${entry.time?.toLocaleString()} - ${entry.title} - ${entry.message} - ${icons[entry.kind]} - `; - } - - renderHistoryEntry( - entry: CommitEntry, + entry: LogEntry, index: number, history: LogEntry[] ): TemplateResult { @@ -283,31 +223,18 @@ export function Historing(Base: TBase) { style="--mdc-theme-text-icon-on-background:var(${ifDefined( iconColors[entry.kind] )})" - >history${icons[entry.kind]} `; } - private renderLog(): TemplateResult[] | TemplateResult { - if (this.log.length > 0) - return this.log.slice().reverse().map(this.renderLogEntry, this); - else - return html` - ${translate('log.placeholder')} - info - `; - } - private renderHistory(): TemplateResult[] | TemplateResult { if (this.history.length > 0) - return this.history - .slice() - .reverse() - .map(this.renderHistoryEntry, this); + return this.history.slice().reverse().map(this.renderLogEntry, this); else return html` - ${translate('history.placeholder')} + ${translate('log.placeholder')} info `; } @@ -383,42 +310,6 @@ export function Historing(Base: TBase) { ); } - private renderLogDialog(): TemplateResult { - return html` - ${this.renderFilterButtons()} - ${this.renderLog()} - ${translate('close')} - `; - } - - private renderHistoryDialog(): TemplateResult { - return html` - ${this.renderHistory()} - - - ${translate('close')} - `; - } - render(): TemplateResult { return html`${ifImplemented(super.render())} - ${this.renderLogDialog()} ${this.renderHistoryDialog()} + + ${this.renderFilterButtons()} + ${this.renderHistory()} + + + ${translate('close')} + + ${this.renderIssues()}(Base: TBase) { le.kind === 'info')?.title ?? + .find(le => le.kind === 'info' || le.kind === 'action')?.title ?? get('log.snackbar.placeholder')}" > @@ -506,7 +424,7 @@ export function Historing(Base: TBase) { le.kind === 'warning')?.title ?? @@ -523,7 +441,7 @@ export function Historing(Base: TBase) { le.kind === 'error')?.title ?? @@ -554,5 +472,5 @@ export function Historing(Base: TBase) { } } - return HistoringElement; + return LoggingElement; } diff --git a/packages/compas-open-scd/src/Plugging.ts b/packages/compas-open-scd/src/Plugging.ts index 08c2d46769..54fdee0af3 100644 --- a/packages/compas-open-scd/src/Plugging.ts +++ b/packages/compas-open-scd/src/Plugging.ts @@ -25,7 +25,7 @@ import { ifImplemented, Mixin } from './foundation.js'; import { EditingElement } from './Editing.js'; import { officialPlugins } from '../public/js/plugins.js'; import { Nsdoc } from './foundation/nsdoc.js'; -import { HistoringElement } from './Historing.js'; +import { LoggingElement } from './Logging.js'; const pluginTags = new Map(); /** * Hashes `uri` using cyrb64 analogous to @@ -177,7 +177,7 @@ const loadedPlugins = new Set(); export type PluggingElement = Mixin; export function Plugging< - TBase extends new (...args: any[]) => EditingElement & HistoringElement + TBase extends new (...args: any[]) => EditingElement & LoggingElement >(Base: TBase) { class PluggingElement extends Base { // DIRTY HACK: will refactored with open-scd-core diff --git a/packages/compas-open-scd/src/editors/IED.ts b/packages/compas-open-scd/src/editors/IED.ts index 296411a0d4..1965877510 100644 --- a/packages/compas-open-scd/src/editors/IED.ts +++ b/packages/compas-open-scd/src/editors/IED.ts @@ -32,7 +32,6 @@ export default class IedPlugin extends LitElement { /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ @property() doc!: XMLDocument; - @property({ type: Number }) editCount = -1; @@ -70,12 +69,6 @@ export default class IedPlugin extends LitElement { uniqueLNClassList.push(lnClass); return true; }) - .sort((a, b) => { - const aLnClass = a.getAttribute('lnClass') ?? ''; - const bLnClass = b.getAttribute('lnClass') ?? ''; - - return aLnClass.localeCompare(bLnClass); - }) .map(element => { const lnClass = element.getAttribute('lnClass'); const label = this.nsdoc.getDataDescription(element).label; @@ -99,28 +92,17 @@ export default class IedPlugin extends LitElement { return undefined; } - lNClassListOpenedOnce = false; - protected updated(_changedProperties: PropertyValues): void { super.updated(_changedProperties); - // When the document is updated, we reset the selected IED if it no longer exists - const isDocumentUpdated = + // When the document is updated, we reset the selected IED. + if ( _changedProperties.has('doc') || _changedProperties.has('editCount') || - _changedProperties.has('nsdoc'); - - if (isDocumentUpdated) { - // if the IED exists, retain selection - const iedExists = this.doc?.querySelector( - `IED[name="${this.selectedIEDs[0]}"]` - ); - - if (iedExists) return; - + _changedProperties.has('nsdoc') + ) { this.selectedIEDs = []; this.selectedLNClasses = []; - this.lNClassListOpenedOnce = false; const iedList = this.iedList; if (iedList.length > 0) { @@ -129,22 +111,12 @@ export default class IedPlugin extends LitElement { this.selectedIEDs = [iedName]; } } + this.selectedLNClasses = this.lnClassList.map( + lnClassInfo => lnClassInfo[0] + ); } } - private calcSelectedLNClasses(): string[] { - const somethingSelected = this.selectedLNClasses.length > 0; - const lnClasses = this.lnClassList.map( lnClassInfo => lnClassInfo[0] ); - - let selectedLNClasses = lnClasses; - - if(somethingSelected){ - selectedLNClasses = lnClasses.filter( lnClass => this.selectedLNClasses.includes(lnClass)); - } - - return selectedLNClasses; - } - render(): TemplateResult { const iedList = this.iedList; if (iedList.length > 0) { @@ -157,25 +129,10 @@ export default class IedPlugin extends LitElement { icon="developer_board" .header=${translate('iededitor.iedSelector')} @selected-items-changed="${(e: SelectedItemsChangedEvent) => { - const equalArrays = (first: T[], second: T[]): boolean => { - return ( - first.length === second.length && - first.every((val, index) => val === second[index]) - ); - }; - - const selectionChanged = !equalArrays( - this.selectedIEDs, - e.detail.selectedItems - ); - - if (!selectionChanged) { - return; - } - - this.lNClassListOpenedOnce = false; this.selectedIEDs = e.detail.selectedItems; - this.selectedLNClasses = []; + this.selectedLNClasses = this.lnClassList.map( + lnClassInfo => lnClassInfo[0] + ); this.requestUpdate('selectedIed'); }}" > @@ -203,7 +160,6 @@ export default class IedPlugin extends LitElement { multi="true" .header="${translate('iededitor.lnFilter')}" @selected-items-changed="${(e: SelectedItemsChangedEvent) => { - this.selectedLNClasses = e.detail.selectedItems; this.requestUpdate('selectedIed'); }}" @@ -228,7 +184,7 @@ export default class IedPlugin extends LitElement { .editCount=${this.editCount} .doc=${this.doc} .element=${this.selectedIed} - .selectedLNClasses=${this.calcSelectedLNClasses()} + .selectedLNClasses=${this.selectedLNClasses} .nsdoc=${this.nsdoc} > `; diff --git a/packages/compas-open-scd/src/menu/UpdateSubstation.ts b/packages/compas-open-scd/src/menu/UpdateSubstation.ts index 72385d3dff..4a928e7663 100644 --- a/packages/compas-open-scd/src/menu/UpdateSubstation.ts +++ b/packages/compas-open-scd/src/menu/UpdateSubstation.ts @@ -111,10 +111,6 @@ export function mergeSubstation( ) ); } -<<<<<<< HEAD:packages/open-scd/src/menu/UpdateSubstation.ts - -======= ->>>>>>> main:packages/compas-open-scd/src/menu/UpdateSubstation.ts export default class UpdateSubstationPlugin extends LitElement { doc!: XMLDocument; diff --git a/packages/compas-open-scd/src/open-scd.ts b/packages/compas-open-scd/src/open-scd.ts index eeb85b7d9a..92350462d8 100644 --- a/packages/compas-open-scd/src/open-scd.ts +++ b/packages/compas-open-scd/src/open-scd.ts @@ -14,7 +14,7 @@ import { getTheme } from './themes.js'; import { Editing } from './Editing.js'; import { Hosting } from './Hosting.js'; -import { Historing } from './Historing.js'; +import { Logging } from './Logging.js'; import { Plugging } from './Plugging.js'; import { Setting } from './Setting.js'; import { Waiting } from './Waiting.js'; @@ -24,13 +24,8 @@ import { Compasing } from './compas/Compasing.js'; /** The `` custom element is the main entry point of the * Open Substation Configuration Designer. */ @customElement('open-scd') -<<<<<<< HEAD:packages/open-scd/src/open-scd.ts -export class OpenSCD extends Waiting( - Hosting(Setting(Wizarding(Plugging(Editing(Historing(LitElement)))))) -======= export class OpenSCD extends Compasing( Waiting(Hosting(Setting(Wizarding(Plugging(Editing(Logging(LitElement))))))) ->>>>>>> main:packages/compas-open-scd/src/open-scd.ts ) { private currentSrc = ''; /** The current file's URL. `blob:` URLs are *revoked after parsing*! */ diff --git a/packages/compas-open-scd/src/translations/de.ts b/packages/compas-open-scd/src/translations/de.ts index 154eaa9cc0..dd15461c26 100644 --- a/packages/compas-open-scd/src/translations/de.ts +++ b/packages/compas-open-scd/src/translations/de.ts @@ -170,7 +170,6 @@ export const de: Translations = { }, history: { name: 'SCL History', - placeholder: 'Keine History', noEntries: 'Keine Einträge in der SCL History', }, diag: { diff --git a/packages/compas-open-scd/src/translations/en.ts b/packages/compas-open-scd/src/translations/en.ts index fde0fbd7fa..b5886266d0 100644 --- a/packages/compas-open-scd/src/translations/en.ts +++ b/packages/compas-open-scd/src/translations/en.ts @@ -139,7 +139,7 @@ export const en = { }, log: { name: 'Log', - placeholder: 'Errors, warnings and other notifications will show up here.', + placeholder: 'Edits, errors, and other notifications will show up here.', snackbar: { show: 'Show', placeholder: 'No errors', @@ -147,7 +147,6 @@ export const en = { }, history: { name: 'SCL History', - placeholder: 'Edits will show up here', noEntries: 'No SCL history entries', }, diag: { diff --git a/packages/compas-open-scd/src/wizards/foundation/references.ts b/packages/compas-open-scd/src/wizards/foundation/references.ts index d166d43871..e23a2019ff 100644 --- a/packages/compas-open-scd/src/wizards/foundation/references.ts +++ b/packages/compas-open-scd/src/wizards/foundation/references.ts @@ -2,17 +2,13 @@ import { Delete, getNameAttribute, isPublic, - Replace, -} from '../../foundation.js'; + Replace +} from "../../foundation.js"; const referenceInfoTags = ['IED', 'Substation', 'VoltageLevel', 'Bay'] as const; type ReferencesInfoTag = typeof referenceInfoTags[number]; -type FilterFunction = ( - element: Element, - attributeName: string | null, - oldName: string | null -) => string; +type FilterFunction = (element: Element, attributeName: string | null, oldName: string | null) => string; /* * For every supported tag a list of information about which elements to search for and which attribute value @@ -27,68 +23,50 @@ const referenceInfos: Record< filter: FilterFunction; }[] > = { - IED: [ - { + IED: + [{ attributeName: 'iedName', - filter: simpleAttributeFilter(`Association`), - }, - { + filter: simpleAttributeFilter(`Association`) + }, { attributeName: 'iedName', - filter: simpleAttributeFilter(`ClientLN`), - }, - { + filter: simpleAttributeFilter(`ClientLN`) + }, { attributeName: 'iedName', - filter: simpleAttributeFilter(`ConnectedAP`), - }, - { + filter: simpleAttributeFilter(`ConnectedAP`) + }, { attributeName: 'iedName', - filter: simpleAttributeFilter(`ExtRef`), - }, - { + filter: simpleAttributeFilter(`ExtRef`) + }, { attributeName: 'iedName', - filter: simpleAttributeFilter(`KDC`), - }, - { + filter: simpleAttributeFilter(`KDC`) + }, { attributeName: 'iedName', - filter: simpleAttributeFilter(`LNode`), - }, - { + filter: simpleAttributeFilter(`LNode`) + }, { attributeName: null, - filter: simpleTextContentFilter(`GSEControl > IEDName`), - }, - { + filter: simpleTextContentFilter(`GSEControl > IEDName`) + }, { attributeName: null, - filter: simpleTextContentFilter(`SampledValueControl > IEDName`), - }, - { - attributeName: null, - filter: simpleTextContentFilter(`LN > DOI > DAI > Val`), - }, - ], - Substation: [ - { + filter: simpleTextContentFilter(`SampledValueControl > IEDName`) + }], + Substation: + [{ attributeName: 'substationName', - filter: simpleAttributeFilter(`Terminal`), - }, - ], - VoltageLevel: [ - { + filter: simpleAttributeFilter(`Terminal`) + }], + VoltageLevel: + [{ attributeName: 'voltageLevelName', - filter: attributeFilterWithParentNameAttribute(`Terminal`, { - Substation: 'substationName', - }), - }, - ], - Bay: [ - { + filter: attributeFilterWithParentNameAttribute(`Terminal`, + {'Substation': 'substationName'}) + }], + Bay: + [{ attributeName: 'bayName', - filter: attributeFilterWithParentNameAttribute(`Terminal`, { - Substation: 'substationName', - VoltageLevel: 'voltageLevelName', - }), - }, - ], -}; + filter: attributeFilterWithParentNameAttribute(`Terminal`, + {'Substation': 'substationName', 'VoltageLevel': 'voltageLevelName'}) + }], +} /** * Simple function to create a filter to find Elements where the value of an attribute equals the old name. @@ -96,13 +74,9 @@ const referenceInfos: Record< * @param tagName - The tagName of the elements to search for. */ function simpleAttributeFilter(tagName: string) { - return function filter( - element: Element, - attributeName: string | null, - oldName: string | null - ): string { + return function filter(element: Element, attributeName: string | null, oldName: string | null): string { return `${tagName}[${attributeName}="${oldName}"]`; - }; + } } /** @@ -114,7 +88,7 @@ function simpleAttributeFilter(tagName: string) { function simpleTextContentFilter(elementQuery: string) { return function filter(): string { return `${elementQuery}`; - }; + } } /** @@ -131,28 +105,19 @@ function simpleTextContentFilter(elementQuery: string) { * @param parentInfo - The records of parent to search for, the key is the tagName of the parent, the value * is the name of the attribuet to use in the query. */ -function attributeFilterWithParentNameAttribute( - tagName: string, - parentInfo: Record -) { - return function filter( - element: Element, - attributeName: string | null, - oldName: string | null - ): string { - return `${tagName}${ - Object.entries(parentInfo) - .map(([parentTag, parentAttribute]) => { - const parentElement = element.closest(parentTag); - if (parentElement && parentElement.hasAttribute('name')) { - const name = parentElement.getAttribute('name'); - return `[${parentAttribute}="${name}"]`; - } - return null; - }) - .join('') // Join the strings to 1 string without a separator. +function attributeFilterWithParentNameAttribute(tagName: string, parentInfo: Record) { + return function filter(element: Element, attributeName: string | null, oldName: string | null): string { + return `${tagName}${Object.entries(parentInfo) + .map(([parentTag, parentAttribute]) => { + const parentElement = element.closest(parentTag); + if (parentElement && parentElement.hasAttribute('name')) { + const name = parentElement.getAttribute('name'); + return `[${parentAttribute}="${name}"]`; + } + return null; + }).join('') // Join the strings to 1 string without a separator. }[${attributeName}="${oldName}"]`; - }; + } } /** @@ -164,11 +129,7 @@ function attributeFilterWithParentNameAttribute( * @param value - The value to set on the cloned element or if null remove the attribute. * @returns Returns the cloned element. */ -function cloneElement( - element: Element, - attributeName: string, - value: string -): Element { +function cloneElement(element: Element, attributeName: string, value: string): Element { const newElement = element.cloneNode(false); newElement.setAttribute(attributeName, value); return newElement; @@ -181,10 +142,7 @@ function cloneElement( * @param value - The value to set. * @returns Returns the cloned element. */ -function cloneElementAndTextContent( - element: Element, - value: string | null -): Element { +function cloneElementAndTextContent(element: Element, value: string | null): Element { const newElement = element.cloneNode(false); newElement.textContent = value; return newElement; @@ -202,11 +160,7 @@ function cloneElementAndTextContent( * @param newName - The new name of the element. * @returns Returns a list of Replace Actions that can be added to a Complex Action or returned directly for execution. */ -export function updateReferences( - element: Element, - oldName: string | null, - newName: string -): Replace[] { +export function updateReferences(element: Element, oldName: string | null, newName: string): Replace[] { if (oldName === null || oldName === newName) { return []; } @@ -225,13 +179,9 @@ export function updateReferences( Array.from(element.ownerDocument.querySelectorAll(`${filter}`)) .filter(isPublic) .forEach(element => { - const newElement = cloneElement( - element, - info.attributeName!, - newName - ); - actions.push({ old: { element }, new: { element: newElement } }); - }); + const newElement = cloneElement(element, info.attributeName!, newName); + actions.push({old: {element}, new: {element: newElement}}); + }) } else { // If the text content needs to be updated, filter on the text content can't be done in a CSS Selector. // So we query all elements the may need to be updated and filter them afterwards. @@ -240,71 +190,10 @@ export function updateReferences( .filter(isPublic) .forEach(element => { const newElement = cloneElementAndTextContent(element, newName); - actions.push({ old: { element }, new: { element: newElement } }); - }); - } - }); - - if (element.tagName === 'IED') - actions.push(...updateVals(element, oldName, newName)); - return actions; -} - -/** - * Adds Replace actions to update supervision references. - * Only a maximum of one Val element per IED with ExtRef elements that contain src attributes will be altered. - * The Val element that needs to be altered will be found by checking if the controlBlockReference complies with this element. - * The controlBlockReference needs to contain the IED that gets renamed. - * - * @param element - The element for which the name is updated. - * @param oldName - The old name of the element. - * @param newName - The new name of the element. - */ -function updateVals(element: Element, oldName: string | null, newName: string) { - const actions: Replace[] = []; - const ieds = element.ownerDocument.querySelectorAll('IED'); - ieds.forEach(ied => { - // All Val elements inside LGOS and LSVS lnClasses that starts with the IED name that needs to be changed will be gathered. - // Because of a very rare case where multiple IED start with the same name, all will be gathered. - // If none are found continue to the next IED. - const valValues: Element[] = Array.from( - ied.querySelectorAll( - `:scope > AccessPoint > Server > LDevice > LN[lnClass="LGOS"] > DOI > DAI > Val, :scope > AccessPoint > Server > LDevice > LN[lnClass="LSVS"] > DOI > DAI > Val` - ) - ); - - if (valValues.length === 0) return; - - // If atleast one extRef element contains the to-be-changed IED name and has a srcCBName, one will be gathered. - // From that extRef element a controlblockreferences will be created and compared to the Val elements. - // If a match is found, the name of that Val element will be changed accordingly and the loop will be broken, as only 1 Val element need to be changed. - - const ref = ied.querySelector( - `:scope > AccessPoint > Server > LDevice > LN0 > Inputs > ExtRef[iedName="${oldName}"][srcCBName]` - ); - - const suffixCBReference = - ref?.getAttribute('srcLDInst') + - '/' + - ref?.getAttribute('srcLNClass') + - '.' + - ref?.getAttribute('srcCBName'); - - for (let value of valValues) { - if (oldName + suffixCBReference === value.textContent!.trim()) { - const newElement = cloneElementAndTextContent( - value, - newName + suffixCBReference - ); - actions.push({ - old: { element: value }, - new: { element: newElement }, - }); - break; - } + actions.push({old: {element}, new: {element: newElement}}); + }) } - }); - + }) return actions; } @@ -336,8 +225,8 @@ export function deleteReferences(element: Element): Delete[] { Array.from(element.ownerDocument.querySelectorAll(`${filter}`)) .filter(isPublic) .forEach(element => { - actions.push({ old: { parent: element.parentElement!, element } }); - }); + actions.push({old: { parent: element.parentElement!, element }}); + }) } else { // If the text content needs to be used for filtering, filter on the text content can't be done in a CSS Selector. // So we query all elements the may need to be deleted and filter them afterwards. @@ -347,15 +236,10 @@ export function deleteReferences(element: Element): Delete[] { .forEach(element => { // We not only need to remove the element containing the text content, but the parent of this element. if (element.parentElement) { - actions.push({ - old: { - parent: element.parentElement.parentElement!, - element: element.parentElement, - }, - }); + actions.push({old: {parent: element.parentElement.parentElement!, element: element.parentElement}}); } - }); + }) } - }); + }) return actions; } diff --git a/packages/compas-open-scd/src/wizards/service-GSEControl.ts b/packages/compas-open-scd/src/wizards/service-GSEControl.ts index f313a5e30b..b34c8b5606 100644 --- a/packages/compas-open-scd/src/wizards/service-GSEControl.ts +++ b/packages/compas-open-scd/src/wizards/service-GSEControl.ts @@ -58,7 +58,6 @@ export function createGSEControlWizardPage( ? { title: get('wizard.title.edit', { tagName: 'GSE Control' }), content: [...content], - element: services, } : null; } diff --git a/packages/compas-open-scd/src/wizards/service-clientServer-configurations.ts b/packages/compas-open-scd/src/wizards/service-clientServer-configurations.ts index 8443c0a9d2..076929c8d6 100644 --- a/packages/compas-open-scd/src/wizards/service-clientServer-configurations.ts +++ b/packages/compas-open-scd/src/wizards/service-clientServer-configurations.ts @@ -61,7 +61,6 @@ export function createClientServerConfigurationsWizardPage( ? { title: get('wizard.title.edit', { tagName: 'Client Server Services' }), content: [...content], - element: services, } : null; } diff --git a/packages/compas-open-scd/src/wizards/service-log-settingsgroup.ts b/packages/compas-open-scd/src/wizards/service-log-settingsgroup.ts index a74096272b..398aae4bca 100644 --- a/packages/compas-open-scd/src/wizards/service-log-settingsgroup.ts +++ b/packages/compas-open-scd/src/wizards/service-log-settingsgroup.ts @@ -49,7 +49,6 @@ export function createLogSettingsGroupServicesWizardPage( ? { title: get('wizard.title.edit', { tagName: 'Services' }), content: [...content], - element: services, } : null; } diff --git a/packages/compas-open-scd/src/wizards/service-networking.ts b/packages/compas-open-scd/src/wizards/service-networking.ts index b732eab4bf..6043245b57 100644 --- a/packages/compas-open-scd/src/wizards/service-networking.ts +++ b/packages/compas-open-scd/src/wizards/service-networking.ts @@ -61,7 +61,6 @@ export function createNetworkingWizardPage( ? { title: get('wizard.title.edit', { tagName: 'Networking' }), content: [...content], - element: services, } : null; } diff --git a/packages/compas-open-scd/src/wizards/service-report-configurations.ts b/packages/compas-open-scd/src/wizards/service-report-configurations.ts index a5c465d73b..7781249f01 100644 --- a/packages/compas-open-scd/src/wizards/service-report-configurations.ts +++ b/packages/compas-open-scd/src/wizards/service-report-configurations.ts @@ -55,7 +55,6 @@ export function createReportConfigurationsWizardPage( ? { title: get('wizard.title.edit', { tagName: 'Report Settings' }), content: [...content], - element: services, } : null; } diff --git a/packages/compas-open-scd/src/wizards/service-sampled-values.ts b/packages/compas-open-scd/src/wizards/service-sampled-values.ts index 70d3c850fc..d8523c73b5 100644 --- a/packages/compas-open-scd/src/wizards/service-sampled-values.ts +++ b/packages/compas-open-scd/src/wizards/service-sampled-values.ts @@ -60,7 +60,6 @@ export function createSampledValuesWizardPage( ? { title: get('wizard.title.edit', { tagName: 'Sampled Values' }), content: [...content], - element: services, } : null; } diff --git a/packages/compas-open-scd/src/wizards/services.ts b/packages/compas-open-scd/src/wizards/services.ts index 73ac2b2f2d..b0e113d95c 100644 --- a/packages/compas-open-scd/src/wizards/services.ts +++ b/packages/compas-open-scd/src/wizards/services.ts @@ -17,7 +17,7 @@ export function isEmptyObject( return ( target === null ? [false] - : Object.keys(target as Object).flatMap(key => { + : Object.keys(target).flatMap(key => { const value: any = (target as any)[key]; if (typeof value === 'object') { return isEmptyObject(value); diff --git a/packages/compas-open-scd/test/integration/Setting.test.ts b/packages/compas-open-scd/test/integration/Setting.test.ts index e0c40ccb45..3ecea09328 100644 --- a/packages/compas-open-scd/test/integration/Setting.test.ts +++ b/packages/compas-open-scd/test/integration/Setting.test.ts @@ -47,8 +47,8 @@ describe('Setting', () => { await element.requestUpdate(); await element.updateComplete; - expect(element.log.length).to.be.equal(1); - expect(element.log[0].title).to.be.equal( + expect(element.history.length).to.be.equal(1); + expect(element.history[0].title).to.be.equal( "Invalid NSDoc (invalid.nsdoc); no 'id' attribute found in file" ); }); @@ -66,8 +66,8 @@ describe('Setting', () => { await element.requestUpdate(); await element.updateComplete; - expect(element.log.length).to.be.equal(1); - expect(element.log[0].title).to.be.equal( + expect(element.history.length).to.be.equal(1); + expect(element.history[0].title).to.be.equal( 'The version of IEC 61850-7-3 NSD (2007B3) does not correlate ' + 'with the version of the corresponding NSDoc (wrong-version.nsdoc, 2007B4)' ); diff --git a/packages/compas-open-scd/test/integration/__snapshots__/open-scd.test.snap.js b/packages/compas-open-scd/test/integration/__snapshots__/open-scd.test.snap.js index b0c6bb24d8..7f0f5cdfaa 100644 --- a/packages/compas-open-scd/test/integration/__snapshots__/open-scd.test.snap.js +++ b/packages/compas-open-scd/test/integration/__snapshots__/open-scd.test.snap.js @@ -422,15 +422,9 @@ snapshots["open-scd looks like its snapshot"] = slot="actionItems" > - - @@ -487,36 +481,11 @@ snapshots["open-scd looks like its snapshot"] = on="" > - - - - Errors, warnings and other notifications will show up here. - - - info - - - - - Close - - - + - Edits will show up here + Edits, errors, and other notifications will show up here. info diff --git a/packages/compas-open-scd/test/integration/editors/GooseSubscriberDataBinding.test.ts b/packages/compas-open-scd/test/integration/editors/GooseSubscriberDataBinding.test.ts index 33825d49e3..eae5c221da 100644 --- a/packages/compas-open-scd/test/integration/editors/GooseSubscriberDataBinding.test.ts +++ b/packages/compas-open-scd/test/integration/editors/GooseSubscriberDataBinding.test.ts @@ -1,7 +1,7 @@ import { expect, fixture, html } from '@open-wc/testing'; import { Wizarding } from '../../../src/Wizarding.js'; import { Editing } from '../../../src/Editing.js'; -import { Historing } from '../../../src/Historing.js'; +import { Logging } from '../../../src/Logging.js'; import { initializeNsdoc } from '../../../src/foundation/nsdoc.js'; import GooseSubscriberDataBinding from '../../../src/editors/GooseSubscriberDataBinding.js'; @@ -16,7 +16,7 @@ import { describe('GOOSE Subscribe Data Binding Plugin', async () => { customElements.define( 'goose-subscriber-data-binding-plugin', - Wizarding(Editing(Historing(GooseSubscriberDataBinding))) + Wizarding(Editing(Logging(GooseSubscriberDataBinding))) ); let element: GooseSubscriberDataBinding; diff --git a/packages/compas-open-scd/test/integration/editors/GooseSubscriberLaterBinding.test.ts b/packages/compas-open-scd/test/integration/editors/GooseSubscriberLaterBinding.test.ts index 9528cb4e06..ac3961d19a 100644 --- a/packages/compas-open-scd/test/integration/editors/GooseSubscriberLaterBinding.test.ts +++ b/packages/compas-open-scd/test/integration/editors/GooseSubscriberLaterBinding.test.ts @@ -1,7 +1,7 @@ import { expect, fixture, html } from '@open-wc/testing'; import { Wizarding } from '../../../src/Wizarding.js'; import { Editing } from '../../../src/Editing.js'; -import { Historing } from '../../../src/Historing.js'; +import { Logging } from '../../../src/Logging.js'; import GooseSubscriberLaterBinding from '../../../src/editors/GooseSubscriberLaterBinding.js'; import { @@ -15,7 +15,7 @@ import { ExtRefLaterBindingList } from '../../../src/editors/subscription/later- describe('GOOSE Subscribe Later Binding Plugin', () => { customElements.define( 'goose-subscriber-later-binding-plugin', - Wizarding(Editing(Historing(GooseSubscriberLaterBinding))) + Wizarding(Editing(Logging(GooseSubscriberLaterBinding))) ); let element: GooseSubscriberLaterBinding; diff --git a/packages/compas-open-scd/test/integration/editors/GooseSubscriberMessageBinding.test.ts b/packages/compas-open-scd/test/integration/editors/GooseSubscriberMessageBinding.test.ts index f047e3335d..c3c7e15ae9 100644 --- a/packages/compas-open-scd/test/integration/editors/GooseSubscriberMessageBinding.test.ts +++ b/packages/compas-open-scd/test/integration/editors/GooseSubscriberMessageBinding.test.ts @@ -6,13 +6,13 @@ import { ListItem } from '@material/mwc-list/mwc-list-item.js'; import { Editing } from '../../../src/Editing.js'; import { Wizarding } from '../../../src/Wizarding.js'; -import { Historing } from '../../../src/Historing.js'; +import { Logging } from '../../../src/Logging.js'; import GooseSubscriberMessageBindingPlugin from '../../../src/editors/GooseSubscriberMessageBinding.js'; describe('GOOSE subscriber plugin', () => { customElements.define( 'subscription-plugin', - Wizarding(Editing(Historing(GooseSubscriberMessageBindingPlugin))) + Wizarding(Editing(Logging(GooseSubscriberMessageBindingPlugin))) ); let element: GooseSubscriberMessageBindingPlugin; let doc: XMLDocument; diff --git a/packages/compas-open-scd/test/integration/editors/IED.test.ts b/packages/compas-open-scd/test/integration/editors/IED.test.ts index e8c7f47cea..a83eb038d8 100644 --- a/packages/compas-open-scd/test/integration/editors/IED.test.ts +++ b/packages/compas-open-scd/test/integration/editors/IED.test.ts @@ -145,66 +145,14 @@ describe('IED Plugin', () => { ).length ).to.eql(5); - await selectLNClasses('CSWI'); + await deselectLNClasses('CSWI'); await new Promise(resolve => setTimeout(resolve, 100)); // await animation expect( getLDeviceContainer(getIedContainer()).shadowRoot!.querySelectorAll( 'ln-container' ).length - ).to.eql(2); - }); - - it('when other IED selected, all LNs are selected by default', async () => { - await selectLNClasses('XCBR'); - - await selectIed('IED3'); - await new Promise(resolve => setTimeout(resolve, 100)); // await animation - - expect( - element.shadowRoot?.querySelectorAll('ied-container').length - ).to.eql(1); - expect( - getIedContainer().shadowRoot?.querySelector('action-pane')!.shadowRoot - ?.innerHTML - ).to.include('IED3'); - - expect( - getLDeviceContainer(getIedContainer()).shadowRoot!.querySelectorAll( - 'ln-container' - ).length - ).to.eql(9); - }); - - it('when filtering LNs, if none are selected, all are selected', async () => { - await selectIed('IED3'); - - const oscdFilterButton = ( - element.shadowRoot!.querySelector( - 'oscd-filter-button[id="lnClassesFilter"]' - ) - ); - const filterButton = ( - oscdFilterButton!.shadowRoot!.querySelector('mwc-icon-button') - ); - filterButton.click(); - await element.updateComplete; - - const primaryButton = ( - oscdFilterButton!.shadowRoot!.querySelector( - 'mwc-button[slot="primaryAction"]' - ) - ); - primaryButton.click(); - await element.updateComplete; - - await new Promise(resolve => setTimeout(resolve, 100)); // await animation - - expect( - getLDeviceContainer(getIedContainer()).shadowRoot!.querySelectorAll( - 'ln-container' - ).length - ).to.eql(9); + ).to.eql(3); }); it('then renders the path of elements correctly', async () => { @@ -329,7 +277,7 @@ describe('IED Plugin', () => { ); } - async function selectLNClasses(lnClass: string): Promise { + async function deselectLNClasses(lnClass: string): Promise { const oscdFilterButton = ( element.shadowRoot!.querySelector( 'oscd-filter-button[id="lnClassesFilter"]' diff --git a/packages/compas-open-scd/test/integration/editors/SMVSubscriberDataBinding.test.ts b/packages/compas-open-scd/test/integration/editors/SMVSubscriberDataBinding.test.ts index 1410840532..3e8d80d481 100644 --- a/packages/compas-open-scd/test/integration/editors/SMVSubscriberDataBinding.test.ts +++ b/packages/compas-open-scd/test/integration/editors/SMVSubscriberDataBinding.test.ts @@ -11,11 +11,11 @@ import { getSelectedSubItemValue, selectFCDAItem, } from './test-support.js'; -import { Historing } from '../../../src/Historing.js'; +import { Logging } from '../../../src/Logging.js'; describe('SMV Subscribe Data Binding Plugin', async () => { customElements.define( 'smv-subscriber-data-binding-plugin', - Wizarding(Editing(Historing(SMVSubscriberDataBinding))) + Wizarding(Editing(Logging(SMVSubscriberDataBinding))) ); let element: SMVSubscriberDataBinding; diff --git a/packages/compas-open-scd/test/integration/editors/SMVSubscriberLaterBinding.test.ts b/packages/compas-open-scd/test/integration/editors/SMVSubscriberLaterBinding.test.ts index 40e8b7e5dd..2f69700d20 100644 --- a/packages/compas-open-scd/test/integration/editors/SMVSubscriberLaterBinding.test.ts +++ b/packages/compas-open-scd/test/integration/editors/SMVSubscriberLaterBinding.test.ts @@ -2,7 +2,7 @@ import { expect, fixture, html } from '@open-wc/testing'; import { Wizarding } from '../../../src/Wizarding.js'; import { Editing } from '../../../src/Editing.js'; -import { Historing } from '../../../src/Historing.js'; +import { Logging } from '../../../src/Logging.js'; import SMVSubscribeLaterBindingPlugin from '../../../src/editors/SMVSubscriberLaterBinding.js'; import { @@ -16,7 +16,7 @@ import { ExtRefLaterBindingList } from '../../../src/editors/subscription/later- describe('SMV Subscribe Later Binding plugin', () => { customElements.define( 'smv-subscribe-later-binding-plugin', - Wizarding(Editing(Historing(SMVSubscribeLaterBindingPlugin))) + Wizarding(Editing(Logging(SMVSubscribeLaterBindingPlugin))) ); let element: SMVSubscribeLaterBindingPlugin; let doc: XMLDocument; diff --git a/packages/compas-open-scd/test/integration/editors/SMVSubscriberMessageBinding.test.ts b/packages/compas-open-scd/test/integration/editors/SMVSubscriberMessageBinding.test.ts index e6f9f1d225..5d16b54654 100644 --- a/packages/compas-open-scd/test/integration/editors/SMVSubscriberMessageBinding.test.ts +++ b/packages/compas-open-scd/test/integration/editors/SMVSubscriberMessageBinding.test.ts @@ -4,14 +4,14 @@ import '../../mock-wizard.js'; import SMVSubscriberMessageBindingPlugin from '../../../src/editors/SMVSubscriberMessageBinding.js'; import { Editing } from '../../../src/Editing.js'; -import { Historing } from '../../../src/Historing.js'; +import { Logging } from '../../../src/Logging.js'; import { Wizarding } from '../../../src/Wizarding.js'; import { ListItem } from '@material/mwc-list/mwc-list-item.js'; describe('Sampled Values Plugin', () => { customElements.define( 'smv-plugin', - Wizarding(Editing(Historing(SMVSubscriberMessageBindingPlugin))) + Wizarding(Editing(Logging(SMVSubscriberMessageBindingPlugin))) ); let element: SMVSubscriberMessageBindingPlugin; let doc: XMLDocument; diff --git a/packages/compas-open-scd/test/integration/editors/__snapshots__/GooseSubscriberMessageBinding.test.snap.js b/packages/compas-open-scd/test/integration/editors/__snapshots__/GooseSubscriberMessageBinding.test.snap.js index 5b60496600..2d3c512d97 100644 --- a/packages/compas-open-scd/test/integration/editors/__snapshots__/GooseSubscriberMessageBinding.test.snap.js +++ b/packages/compas-open-scd/test/integration/editors/__snapshots__/GooseSubscriberMessageBinding.test.snap.js @@ -46,36 +46,11 @@ snapshots["GOOSE subscriber plugin in Publisher view per default the plugin itse on="" > - - - - [log.placeholder] - - - info - - - - - [close] - - - + - [history.placeholder] + [log.placeholder] info @@ -892,36 +867,11 @@ snapshots["GOOSE subscriber plugin in Subscriber view per default the plugin its on="" > - - - - [log.placeholder] - - - info - - - - - [close] - - - + - [history.placeholder] + [log.placeholder] info diff --git a/packages/compas-open-scd/test/integration/editors/__snapshots__/IED.test.snap.js b/packages/compas-open-scd/test/integration/editors/__snapshots__/IED.test.snap.js index b07ca79296..0ed73255dd 100644 --- a/packages/compas-open-scd/test/integration/editors/__snapshots__/IED.test.snap.js +++ b/packages/compas-open-scd/test/integration/editors/__snapshots__/IED.test.snap.js @@ -116,46 +116,51 @@ snapshots["IED Plugin with a doc loaded containing IEDs looks like the latest sn aria-disabled="false" graphic="control" mwc-list-item="" + selected="" tabindex="0" - value="CILO" + value="LLN0" > - CILO + LLN0 - CSWI + XCBR - LLN0 + CSWI - XCBR + XSWI - XSWI + CILO diff --git a/packages/compas-open-scd/test/integration/editors/__snapshots__/SMVSubscriberMessageBinding.test.snap.js b/packages/compas-open-scd/test/integration/editors/__snapshots__/SMVSubscriberMessageBinding.test.snap.js index 8fe2049817..57786c37a7 100644 --- a/packages/compas-open-scd/test/integration/editors/__snapshots__/SMVSubscriberMessageBinding.test.snap.js +++ b/packages/compas-open-scd/test/integration/editors/__snapshots__/SMVSubscriberMessageBinding.test.snap.js @@ -46,36 +46,11 @@ snapshots["Sampled Values Plugin in Publisher view initially the plugin looks li on="" > - - - - [log.placeholder] - - - info - - - - - [close] - - - + - [history.placeholder] + [log.placeholder] info @@ -878,36 +853,11 @@ snapshots["Sampled Values Plugin in Subscriber view initially the plugin looks l on="" > - - - - [log.placeholder] - - - info - - - - - [close] - - - + - [history.placeholder] + [log.placeholder] info diff --git a/packages/compas-open-scd/test/integration/editors/triggered/ImportIedsPlugin.test.ts b/packages/compas-open-scd/test/integration/editors/triggered/ImportIedsPlugin.test.ts index d47b12a39d..a5d889f2b4 100644 --- a/packages/compas-open-scd/test/integration/editors/triggered/ImportIedsPlugin.test.ts +++ b/packages/compas-open-scd/test/integration/editors/triggered/ImportIedsPlugin.test.ts @@ -412,8 +412,8 @@ describe('ImportIedsPlugin', () => { .then(str => new DOMParser().parseFromString(str, 'application/xml')); element.prepareImport(importDoc, 'invalid.iid'); - expect(parent.log[0].kind).to.equal('error'); - expect(parent.log[0].title).to.equal('[import.log.missingied]'); + expect(parent.history[0].kind).to.equal('error'); + expect(parent.history[0].title).to.equal('[import.log.missingied]'); }); it('throws duplicate ied name error', async () => { @@ -422,8 +422,8 @@ describe('ImportIedsPlugin', () => { .then(str => new DOMParser().parseFromString(str, 'application/xml')); element.prepareImport(importDoc, 'duplicate.iid'); - expect(parent.log[0].kind).to.equal('error'); - expect(parent.log[0].title).to.equal('[import.log.nouniqueied]'); + expect(parent.history[0].kind).to.equal('error'); + expect(parent.history[0].title).to.equal('[import.log.nouniqueied]'); }); it('throws parser error', async () => { @@ -434,8 +434,8 @@ describe('ImportIedsPlugin', () => { element.prepareImport(importDoc, 'parsererror.iid'); - expect(parent.log[0].kind).to.equal('error'); - expect(parent.log[0].title).to.equal('[import.log.parsererror]'); + expect(parent.history[0].kind).to.equal('error'); + expect(parent.history[0].title).to.equal('[import.log.parsererror]'); }); }); }); diff --git a/packages/compas-open-scd/test/integration/open-scd.test.ts b/packages/compas-open-scd/test/integration/open-scd.test.ts index 4354785629..02645d51b4 100644 --- a/packages/compas-open-scd/test/integration/open-scd.test.ts +++ b/packages/compas-open-scd/test/integration/open-scd.test.ts @@ -41,18 +41,10 @@ describe('open-scd', () => { it('opens the log on log icon click', async () => { expect(element.logUI).to.have.property('open', false); - await (( - element.shadowRoot!.querySelector('mwc-icon-button[icon="list"]')! - )).click(); - expect(element.logUI).to.have.property('open', true); - }); - - it('opens the history on history icon click', async () => { - expect(element.historyUI).to.have.property('open', false); await (( element.shadowRoot!.querySelector('mwc-icon-button[icon="history"]')! )).click(); - expect(element.historyUI).to.have.property('open', true); + expect(element.logUI).to.have.property('open', true); }); it('opens the log on snackbar button click', async () => { diff --git a/packages/compas-open-scd/test/integration/validators/ValidateSchema.test.ts b/packages/compas-open-scd/test/integration/validators/ValidateSchema.test.ts index 4b2b55d546..ba68861031 100644 --- a/packages/compas-open-scd/test/integration/validators/ValidateSchema.test.ts +++ b/packages/compas-open-scd/test/integration/validators/ValidateSchema.test.ts @@ -58,7 +58,7 @@ describe('ValidateSchema plugin', () => { }); it('indicates successful schema validation in the log', async () => { - const lastEntry = parent.log.pop(); + const lastEntry = parent.history.pop(); expect(lastEntry.kind).to.equal('info'); expect(lastEntry.title).to.contain('[validator.schema.valid]'); }); @@ -92,7 +92,7 @@ describe('ValidateSchema plugin', () => { .be.undefined); it('generates error messages in the log', async () => { - const lastLogEntry = parent.log.pop(); + const lastLogEntry = parent.history.pop(); expect(lastLogEntry.kind).to.equal('warning'); expect(lastLogEntry.title).to.contain('[validator.schema.invalid]'); }); diff --git a/packages/compas-open-scd/test/integration/wizards/__snapshots__/services-wizard.test.snap.js b/packages/compas-open-scd/test/integration/wizards/__snapshots__/services-wizard.test.snap.js index 439d2a78f8..0382a08410 100644 --- a/packages/compas-open-scd/test/integration/wizards/__snapshots__/services-wizard.test.snap.js +++ b/packages/compas-open-scd/test/integration/wizards/__snapshots__/services-wizard.test.snap.js @@ -1,7 +1,7 @@ /* @web/test-runner snapshot v1 */ export const snapshots = {}; -snapshots["Wizards for SCL element Services define a Services wizards Wizard 1 should look like snapshot"] = +snapshots["Wizards for SCL element Services define a Services wizards Wizard 1 looks like snapshot"] = ` `; -/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 1 should look like snapshot */ +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 1 looks like snapshot */ -snapshots["Wizards for SCL element Services define a Services wizards Wizard 2 should look like snapshot"] = +snapshots["Wizards for SCL element Services define a Services wizards Wizard 2 looks like snapshot"] = ` `; -/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 2 should look like snapshot */ +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 2 looks like snapshot */ -snapshots["Wizards for SCL element Services define a Services wizards Wizard 3 should look like snapshot"] = +snapshots["Wizards for SCL element Services define a Services wizards Wizard 3 looks like snapshot"] = ` `; -/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 3 should look like snapshot */ - -snapshots["Wizards for SCL element Services define a Services wizards Wizard 4 should look like snapshot"] = -` -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - -
-`; -/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 4 should look like snapshot */ +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 3 looks like snapshot */ -snapshots["Wizards for SCL element Services define a Services wizards Wizard 5 should look like snapshot"] = +snapshots["Wizards for SCL element Services define a Services wizards Wizard 4 looks like snapshot"] = ` - - `; -/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 5 should look like snapshot */ +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 4 looks like snapshot */ -snapshots["Wizards for SCL element Services define a Services wizards Wizard 6 should look like snapshot"] = +snapshots["Wizards for SCL element Services define a Services wizards Wizard 1 should look like snapshot"] = `
- - - - - - - + Conf + + + Fix + + + - - + Dyn + + + Conf + + + Fix + + + - - + Dyn + + + Conf + + + Fix + + + - - - - - - - - - - - - + Dyn + + + Conf + + + Fix + + + - + + Dyn + + + Conf + + + Fix + + + + - - - - @@ -1437,26 +1362,17 @@ snapshots["Wizards for SCL element Services define a Services wizards Wizard 6 - - - - +
- - + +
`; -/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 6 should look like snapshot */ +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 1 should look like snapshot */ -snapshots["Wizards for SCL element Services AccessPoint wizards for Scl element Services should look like snapshot"] = +snapshots["Wizards for SCL element Services define a Services wizards Wizard 2 should look like snapshot"] = `
@@ -1484,15 +1407,20 @@ snapshots["Wizards for SCL element Services AccessPoint wizards for Scl element nullable="" > Conf Fix @@ -1503,16 +1431,54 @@ snapshots["Wizards for SCL element Services AccessPoint wizards for Scl element label="datSet" nullable="" > + + Dyn + + + Conf + + Fix + + + + Dyn Conf @@ -1520,6 +1486,7 @@ snapshots["Wizards for SCL element Services AccessPoint wizards for Scl element Fix @@ -1527,19 +1494,57 @@ snapshots["Wizards for SCL element Services AccessPoint wizards for Scl element + + Dyn + + + Conf + + Fix + + + + Dyn Conf @@ -1547,6 +1552,7 @@ snapshots["Wizards for SCL element Services AccessPoint wizards for Scl element Fix @@ -1560,13 +1566,15 @@ snapshots["Wizards for SCL element Services AccessPoint wizards for Scl element Dyn Conf @@ -1574,6 +1582,7 @@ snapshots["Wizards for SCL element Services AccessPoint wizards for Scl element Fix @@ -1585,15 +1594,20 @@ snapshots["Wizards for SCL element Services AccessPoint wizards for Scl element nullable="" > Dyn Conf @@ -1601,42 +1615,1303 @@ snapshots["Wizards for SCL element Services AccessPoint wizards for Scl element Fix - - - - - - - - - + + + + + + unbuffered + + + buffered + + + both + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+`; +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 2 should look like snapshot */ + +snapshots["Wizards for SCL element Services define a Services wizards Wizard 3 should look like snapshot"] = +` +
+ + + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+`; +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 3 should look like snapshot */ + +snapshots["Wizards for SCL element Services define a Services wizards Wizard 4 should look like snapshot"] = +` +
+ + + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Conf + + + Fix + + + + + + + + + + + + + + + + + + + + + + + + + + + unicast + + + multicast + + + both + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+`; +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 4 should look like snapshot */ + +snapshots["Wizards for SCL element Services AccessPoint wizards for Scl element Services should look like snapshot"] = +` +
+ + + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+`; +/* end snapshot Wizards for SCL element Services AccessPoint wizards for Scl element Services should look like snapshot */ + +snapshots["Wizards for SCL element Services define a Services wizards Wizard 5 should look like snapshot"] = +` +
+ + + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Conf + + + Fix + + + + + + + + + + + + + + + + + + + + + + + + + + + unicast + + + multicast + + + both + + + + + + + + + + + + + + + + + + +
+ +
`; -/* end snapshot Wizards for SCL element Services AccessPoint wizards for Scl element Services should look like snapshot */ +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 5 should look like snapshot */ + +snapshots["Wizards for SCL element Services define a Services wizards Wizard 6 should look like snapshot"] = +` +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+`; +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 6 should look like snapshot */ diff --git a/packages/compas-open-scd/test/integration/wizards/services-wizard.test.ts b/packages/compas-open-scd/test/integration/wizards/services-wizard.test.ts index fa340f5841..f2ab7906e7 100644 --- a/packages/compas-open-scd/test/integration/wizards/services-wizard.test.ts +++ b/packages/compas-open-scd/test/integration/wizards/services-wizard.test.ts @@ -4,7 +4,6 @@ import { editServicesWizard } from '../../../src/wizards/services.js'; import '../../mock-wizard-editor.js'; import { MockWizardEditor } from '../../mock-wizard-editor.js'; -import { WizardDialog } from '../../../src/wizard-dialog.js'; describe('Wizards for SCL element Services', () => { let doc: XMLDocument; @@ -46,23 +45,6 @@ describe('Wizards for SCL element Services', () => { expect(element.wizardUI.dialogs[idx]).to.equalSnapshot(); }); }); - - describe('> when pro mode is enabled', () => { - let elm: WizardDialog; - beforeEach(async () => { - elm = element.shadowRoot!.querySelector('wizard-dialog')!; - localStorage.setItem('mode', 'pro'); - elm.requestUpdate(); - await elm.updateComplete; - }); - [0, 1, 2, 3, 4, 5].forEach(idx => { - it(`Wizard ${idx + 1} should contain the code icon button`, () => { - expect(element.wizardUI.dialogs[idx].querySelector('mwc-icon-button-toggle')).to.have.attribute('onicon', 'code'); - }); - }); - }); - after(() => localStorage.removeItem('mode')); - }); ['AP2', 'AP3', 'AP4', 'AP5', 'AP6'].forEach(accessPointName => { diff --git a/packages/compas-open-scd/test/mock-editor-logger.ts b/packages/compas-open-scd/test/mock-editor-logger.ts index 63f1e9aae1..fe99e943ac 100644 --- a/packages/compas-open-scd/test/mock-editor-logger.ts +++ b/packages/compas-open-scd/test/mock-editor-logger.ts @@ -1,7 +1,7 @@ import { LitElement, customElement } from 'lit-element'; import { Editing } from '../src/Editing.js'; -import { Historing } from '../src/Historing.js'; +import { Logging } from '../src/Logging.js'; @customElement('mock-editor-logger') -export class MockEditorLogger extends Editing(Historing(LitElement)) {} +export class MockEditorLogger extends Editing(Logging(LitElement)) {} diff --git a/packages/compas-open-scd/test/mock-setter-logger.ts b/packages/compas-open-scd/test/mock-setter-logger.ts index a7bfc22318..e371586e95 100644 --- a/packages/compas-open-scd/test/mock-setter-logger.ts +++ b/packages/compas-open-scd/test/mock-setter-logger.ts @@ -1,7 +1,7 @@ import { LitElement, customElement } from 'lit-element'; import { Setting } from '../src/Setting.js'; import { Editing } from '../src/Editing.js'; -import { Historing } from '../src/Historing.js'; +import { Logging } from '../src/Logging.js'; @customElement('mock-setter-logger') -export class MockSetterLogger extends Setting(Editing(Historing(LitElement))) {} +export class MockSetterLogger extends Setting(Editing(Logging(LitElement))) {} diff --git a/packages/compas-open-scd/test/testfiles/wizards/ied.scd b/packages/compas-open-scd/test/testfiles/wizards/ied.scd index 753b1c2131..74c2b87215 100644 --- a/packages/compas-open-scd/test/testfiles/wizards/ied.scd +++ b/packages/compas-open-scd/test/testfiles/wizards/ied.scd @@ -416,85 +416,6 @@ - - - - - - - - - - - - - - Publisher/LLN0.cb1 - - - - - - - - - - - - - - - - - - - - - - - Publisher/LLN0.cb1 - - - - - - - Publisher/LLN0.cb1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/compas-open-scd/test/unit/Logging.test.ts b/packages/compas-open-scd/test/unit/Logging.test.ts index d52c02d753..a5722af232 100644 --- a/packages/compas-open-scd/test/unit/Logging.test.ts +++ b/packages/compas-open-scd/test/unit/Logging.test.ts @@ -10,21 +10,21 @@ import { newLogEvent, } from '../../src/foundation.js'; -describe('HistoringElement', () => { +describe('LoggingElement', () => { let element: MockLogger; beforeEach(async () => { element = await fixture(html``); }); - it('starts out with an empty log', () => - expect(element).property('log').to.be.empty); + it('starts out with an empty history', () => + expect(element).property('history').to.be.empty); it('cannot undo', () => expect(element).property('canUndo').to.be.false); it('cannot redo', () => expect(element).property('canRedo').to.be.false); it('cannot undo info messages', () => { element.dispatchEvent(newLogEvent({ kind: 'info', title: 'test info' })); - expect(element).property('log').to.have.lengthOf(1); + expect(element).property('history').to.have.lengthOf(1); expect(element).property('canUndo').to.be.false; }); @@ -32,13 +32,13 @@ describe('HistoringElement', () => { element.dispatchEvent( newLogEvent({ kind: 'warning', title: 'test warning' }) ); - expect(element).property('log').to.have.lengthOf(1); + expect(element).property('history').to.have.lengthOf(1); expect(element).property('canUndo').to.be.false; }); it('cannot undo error messages', () => { element.dispatchEvent(newLogEvent({ kind: 'error', title: 'test error' })); - expect(element).property('log').to.have.lengthOf(1); + expect(element).property('history').to.have.lengthOf(1); expect(element).property('canUndo').to.be.false; }); @@ -135,15 +135,14 @@ describe('HistoringElement', () => { expect(element).property('history').to.have.lengthOf(1); }); - it('can reset its log', () => { + it('can reset its history', () => { element.dispatchEvent(newLogEvent({ kind: 'reset' })); - expect(element).property('log').to.be.empty; expect(element).property('history').to.be.empty; expect(element).to.have.property('editCount', -1); }); - it('renders a history message for the action', () => - expect(element.historyUI).to.contain.text('test')); + it('renders a log message for the action', () => + expect(element.logUI).to.contain.text('test')); describe('with a second action logged', () => { beforeEach(() => { @@ -165,7 +164,7 @@ describe('HistoringElement', () => { it('has a previous action', () => expect(element).to.have.property('previousAction', 0)); it('has an edit count', () => - expect(element).to.have.property('editCount', 1)); + expect(element).to.have.property('editCount', 2)); it('has no next action', () => expect(element).to.have.property('nextAction', -1)); @@ -177,7 +176,7 @@ describe('HistoringElement', () => { it('has an edit count', () => expect(element).to.have.property('editCount', 0)); it('has a next action', () => - expect(element).to.have.property('nextAction', 1)); + expect(element).to.have.property('nextAction', 2)); it('can redo', () => expect(element).property('canRedo').to.be.true); @@ -189,9 +188,8 @@ describe('HistoringElement', () => { action: MockAction.mov, }) ); - expect(element).property('log').to.have.lengthOf(1); - expect(element).property('history').to.have.lengthOf(2); - expect(element).to.have.property('editCount', 1); + expect(element).property('history').to.have.lengthOf(3); + expect(element).to.have.property('editCount', 2); expect(element).to.have.property('nextAction', -1); }); @@ -208,7 +206,7 @@ describe('HistoringElement', () => { it('has a previous action', () => expect(element).to.have.property('previousAction', 0)); it('has an edit count', () => - expect(element).to.have.property('editCount', 1)); + expect(element).to.have.property('editCount', 2)); it('has no next action', () => expect(element).to.have.property('nextAction', -1)); diff --git a/packages/compas-open-scd/test/unit/mock-plugger.ts b/packages/compas-open-scd/test/unit/mock-plugger.ts index 72c3637771..656d3d5b0b 100644 --- a/packages/compas-open-scd/test/unit/mock-plugger.ts +++ b/packages/compas-open-scd/test/unit/mock-plugger.ts @@ -1,7 +1,7 @@ import { LitElement, customElement } from 'lit-element'; import { Plugging } from '../../src/Plugging.js'; import { Editing } from '../../src/Editing.js'; -import { Historing } from '../../src/Historing.js'; +import { Logging } from '../../src/Logging.js'; @customElement('mock-plugger') -export class MockPlugger extends Plugging(Editing(Historing(LitElement))) {} +export class MockPlugger extends Plugging(Editing(Logging(LitElement))) {} diff --git a/packages/compas-open-scd/test/unit/wizards/foundation/references.test.ts b/packages/compas-open-scd/test/unit/wizards/foundation/references.test.ts index 3f8c1f8c3a..fa80c1683e 100644 --- a/packages/compas-open-scd/test/unit/wizards/foundation/references.test.ts +++ b/packages/compas-open-scd/test/unit/wizards/foundation/references.test.ts @@ -6,7 +6,7 @@ import { } from '../test-support.js'; import { deleteReferences, - updateReferences, + updateReferences } from '../../../../src/wizards/foundation/references.js'; import { expect } from '@open-wc/testing'; @@ -19,17 +19,11 @@ describe('Update reference for ', () => { beforeEach(async () => { doc = await fetchDoc('/test/testfiles/wizards/ied.scd'); - conductingEquipment = doc.querySelector( - `ConductingEquipment[name="${ceName}"]` - )!; + conductingEquipment = doc.querySelector(`ConductingEquipment[name="${ceName}"]`)!; }); it('will update no references to ConductingEquipment', function () { - const updateActions = updateReferences( - conductingEquipment, - ceName, - 'Other CE Name' - ); + const updateActions = updateReferences(conductingEquipment, ceName, 'Other CE Name'); expect(updateActions.length).to.equal(0); }); @@ -44,9 +38,7 @@ describe('Update reference for ', () => { beforeEach(async () => { doc = await fetchDoc('/test/testfiles/wizards/ied.scd'); - connectAP = doc.querySelector( - `ConnectedAP[iedName="IED1"][apName="P1"]` - )!; + connectAP = doc.querySelector(`ConnectedAP[iedName="IED1"][apName="P1"]`)!; }); it('will update no references to ConnectedAP', function () { @@ -60,12 +52,6 @@ describe('Update reference for ', () => { }); }); - describe('IED update Val element', () => { - beforeEach(async () => { - doc = await fetchDoc('/test/testfiles/wizards/iedRename.scd'); - }); - }); - describe('IED', () => { beforeEach(async () => { doc = await fetchDoc('/test/testfiles/wizards/ied.scd'); @@ -103,45 +89,17 @@ describe('Update reference for ', () => { const updateActions = updateReferences(ied, oldName, newName); expect(updateActions.length).to.equal(8); - expectUpdateTextValue(updateActions[6], 'GSEControl', oldName, newName); expectUpdateTextValue( - updateActions[7], - 'SampledValueControl', + updateActions[6], + 'GSEControl', oldName, newName ); - }); - - it('will update all references to IED Pub and checks for correct Val elements', function () { - const oldName = 'Pub'; - const newName = 'NewPub'; - const ied = doc.querySelector(`IED[name="${oldName}"]`)!; - - const updateActions = updateReferences(ied, oldName, newName); - expect(updateActions.length).to.equal(5); - - const input1 = updateActions[0].old.element; - const input2 = updateActions[1].old.element; - const input3 = updateActions[2].old.element; - const input4 = updateActions[3].old.element; - - expect(input1.getAttribute('srcCBName')).to.be.equal(null); - expect(input2.getAttribute('srcCBName')).to.be.equal(null); - expect(input3.getAttribute('srcCBName')).to.be.equal('cb1'); - expect(input4.getAttribute('srcCBName')).to.be.equal('cb1'); - - const valSuffix3 = - input3.getAttribute('srcLDInst') + - '/' + - input3.getAttribute('srcLNClass') + - '.' + - input3.getAttribute('srcCBName'); - expectUpdateTextValue( - updateActions[4], - 'DAI', - oldName + valSuffix3, - newName + valSuffix3 + updateActions[7], + 'SampledValueControl', + oldName, + newName ); }); @@ -199,9 +157,7 @@ describe('Update reference for ', () => { it('will update all references to VoltageLevel "J1"', function () { const oldName = 'J1'; const newName = 'J1 UPD'; - const voltageLevel = doc.querySelector( - `VoltageLevel[name="${oldName}"]` - )!; + const voltageLevel = doc.querySelector(`VoltageLevel[name="${oldName}"]`)!; const updateActions = updateReferences(voltageLevel, oldName, newName); expect(updateActions.length).to.equal(48); diff --git a/packages/open-scd/index.html b/packages/open-scd/index.html index 873a563a3a..10d3047e4a 100644 --- a/packages/open-scd/index.html +++ b/packages/open-scd/index.html @@ -3,28 +3,23 @@ - - - - - - - + + - - - + + + - CoMPAS - OpenSCD + OpenSCD @@ -39,7 +34,6 @@ }; - + + + + + + \ No newline at end of file diff --git a/packages/open-scd/manifest.json b/packages/open-scd/manifest.json new file mode 100644 index 0000000000..3ca5d36eb6 --- /dev/null +++ b/packages/open-scd/manifest.json @@ -0,0 +1,44 @@ +{ + "short_name": "OpenSCD", + "name": "OpenSCD", + "description": "An editor for XML files as described by IEC 61850-6", + "categories": [ + "productivity", + "utilities", + "engineering" + ], + "start_url": ".", + "display": "standalone", + "background_color": "#eee8d5", + "theme_color": "#2aa198", + "orientation": "any", + "lang": "en-US", + "dir": "ltr", + "icons": [ + { + "src": "public/icon.svg", + "sizes": "150x150", + "type": "image/svg+xml", + "purpose": "any monochrome" + }, + { + "src": "public/icon-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any" + }, + { + "src": "public/icon-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any" + }, + { + "src": "public/maskable_icon.png", + "sizes": "1024x1024", + "type": "image/png", + "purpose": "maskable" + } + ], + "version": "0.33.0" +} diff --git a/packages/open-scd/package-lock.json b/packages/open-scd/package-lock.json new file mode 100644 index 0000000000..06726ba9ae --- /dev/null +++ b/packages/open-scd/package-lock.json @@ -0,0 +1,32472 @@ +{ + "name": "open-scd", + "version": "0.33.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "open-scd", + "version": "0.33.0", + "license": "Apache-2.0", + "dependencies": { + "@material/mwc-dialog": "0.22.1", + "@material/mwc-drawer": "0.22.1", + "@material/mwc-fab": "0.22.1", + "@material/mwc-formfield": "0.22.1", + "@material/mwc-icon": "0.22.1", + "@material/mwc-icon-button": "0.22.1", + "@material/mwc-icon-button-toggle": "0.22.1", + "@material/mwc-linear-progress": "0.22.1", + "@material/mwc-list": "0.22.1", + "@material/mwc-menu": "0.22.1", + "@material/mwc-select": "0.22.1", + "@material/mwc-snackbar": "0.22.1", + "@material/mwc-switch": "0.22.1", + "@material/mwc-tab": "0.22.1", + "@material/mwc-tab-bar": "0.22.1", + "@material/mwc-textarea": "0.22.1", + "@material/mwc-textfield": "0.22.1", + "@material/mwc-top-app-bar-fixed": "0.22.1", + "ace-custom-element": "^1.6.5", + "lit-element": "2.5.1", + "lit-html": "1.4.1", + "lit-translate": "^1.2.1", + "marked": "^4.0.10", + "panzoom": "^9.4.2" + }, + "devDependencies": { + "@commitlint/cli": "^13.1.0", + "@commitlint/config-conventional": "^13.1.0", + "@open-wc/eslint-config": "^4.3.0", + "@open-wc/semantic-dom-diff": "^0.19.5", + "@open-wc/testing": "^2.5.33", + "@snowpack/plugin-typescript": "^1.2.1", + "@types/marked": "^2.0.4", + "@types/node": "^16.6.1", + "@typescript-eslint/eslint-plugin": "^4.29.2", + "@typescript-eslint/parser": "^4.29.2", + "@web/dev-server-esbuild": "^0.2.16", + "@web/test-runner": "^0.13.22", + "concurrently": "^6.2.1", + "deepmerge": "^4.2.2", + "es-dev-server": "^2.1.0", + "eslint": "^7.32.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-babel": "^5.3.1", + "eslint-plugin-tsdoc": "^0.2.14", + "fast-check": "^2.19.0", + "husky": "^7.0.1", + "lint-staged": "^11.1.2", + "prettier": "^2.3.2", + "sinon": "^11.1.2", + "snowpack": "3.8.6", + "source-map": "^0.7.4", + "standard-version": "^9.3.1", + "tslib": "^2.3.1", + "typedoc": "^0.21.10", + "typedoc-plugin-markdown": "3.10.4", + "typescript": "4.3.5", + "web-component-analyzer": "^1.1.6", + "workbox-cli": "^6.2.4" + } + }, + "node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dev": true, + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz", + "integrity": "sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ==", + "dev": true, + "peer": true, + "dependencies": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/eslint-plugin": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.18.10.tgz", + "integrity": "sha512-iV1OZj/7eg4wZIcsVEkXS3MUWdhmpLsu2h+9Zr2ppywKWdCRs6VfjxbRzmHHYeurTizrrnaJ9ZkbO8KOv4lauQ==", + "dev": true, + "peer": true, + "dependencies": { + "eslint-rule-composer": "^0.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/eslint-parser": ">=7.11.0", + "eslint": ">=7.5.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", + "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz", + "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", + "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz", + "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz", + "integrity": "sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "regexpu-core": "^4.7.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz", + "integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz", + "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz", + "integrity": "sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-wrap-function": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "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, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz", + "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", + "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.3", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.15.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", + "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz", + "integrity": "sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz", + "integrity": "sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz", + "integrity": "sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.16.4", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", + "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz", + "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz", + "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz", + "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz", + "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz", + "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz", + "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz", + "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz", + "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz", + "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz", + "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz", + "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz", + "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz", + "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz", + "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz", + "integrity": "sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz", + "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz", + "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz", + "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz", + "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz", + "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz", + "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz", + "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz", + "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz", + "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz", + "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz", + "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz", + "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz", + "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz", + "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.16.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz", + "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.15.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz", + "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz", + "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz", + "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz", + "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz", + "integrity": "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz", + "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz", + "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz", + "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz", + "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz", + "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz", + "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz", + "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz", + "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz", + "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz", + "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz", + "integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-compilation-targets": "^7.16.3", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.2", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-async-generator-functions": "^7.16.4", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-class-static-block": "^7.16.0", + "@babel/plugin-proposal-dynamic-import": "^7.16.0", + "@babel/plugin-proposal-export-namespace-from": "^7.16.0", + "@babel/plugin-proposal-json-strings": "^7.16.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-object-rest-spread": "^7.16.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-proposal-private-property-in-object": "^7.16.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.0", + "@babel/plugin-transform-async-to-generator": "^7.16.0", + "@babel/plugin-transform-block-scoped-functions": "^7.16.0", + "@babel/plugin-transform-block-scoping": "^7.16.0", + "@babel/plugin-transform-classes": "^7.16.0", + "@babel/plugin-transform-computed-properties": "^7.16.0", + "@babel/plugin-transform-destructuring": "^7.16.0", + "@babel/plugin-transform-dotall-regex": "^7.16.0", + "@babel/plugin-transform-duplicate-keys": "^7.16.0", + "@babel/plugin-transform-exponentiation-operator": "^7.16.0", + "@babel/plugin-transform-for-of": "^7.16.0", + "@babel/plugin-transform-function-name": "^7.16.0", + "@babel/plugin-transform-literals": "^7.16.0", + "@babel/plugin-transform-member-expression-literals": "^7.16.0", + "@babel/plugin-transform-modules-amd": "^7.16.0", + "@babel/plugin-transform-modules-commonjs": "^7.16.0", + "@babel/plugin-transform-modules-systemjs": "^7.16.0", + "@babel/plugin-transform-modules-umd": "^7.16.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.0", + "@babel/plugin-transform-new-target": "^7.16.0", + "@babel/plugin-transform-object-super": "^7.16.0", + "@babel/plugin-transform-parameters": "^7.16.3", + "@babel/plugin-transform-property-literals": "^7.16.0", + "@babel/plugin-transform-regenerator": "^7.16.0", + "@babel/plugin-transform-reserved-words": "^7.16.0", + "@babel/plugin-transform-shorthand-properties": "^7.16.0", + "@babel/plugin-transform-spread": "^7.16.0", + "@babel/plugin-transform-sticky-regex": "^7.16.0", + "@babel/plugin-transform-template-literals": "^7.16.0", + "@babel/plugin-transform-typeof-symbol": "^7.16.0", + "@babel/plugin-transform-unicode-escapes": "^7.16.0", + "@babel/plugin-transform-unicode-regex": "^7.16.0", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.0", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.4.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.19.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", + "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.3.tgz", + "integrity": "sha512-IAdDC7T0+wEB4y2gbIL0uOXEYpiZEeuFUTVbdGq+UwCcF35T/tS8KrmMomEwEc5wBbyfH3PJVpTSUqrhPDXFcQ==", + "dev": true, + "dependencies": { + "core-js-pure": "^3.19.0", + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", + "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.3", + "@babel/types": "^7.16.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.15.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@commitlint/cli": { + "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, + "dependencies": { + "@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", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/config-conventional": { + "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, + "dependencies": { + "conventional-changelog-conventionalcommits": "^4.3.1" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/ensure": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-13.2.0.tgz", + "integrity": "sha512-rqhT62RehdLTRBu8OrPHnRCCd/7RmHEE4TiTlT4BLlr5ls5jlZhecOQWJ8np872uCNirrJ5NFjnjYYdbkNoW9Q==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/execute-rule": { + "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, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/format": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-13.2.0.tgz", + "integrity": "sha512-yNBQJe6YFhM1pJAta4LvzQxccSKof6axJH7ALYjuhQqfT8AKlad7Y/2SuJ07ioyreNIqwOTuF2UfU8yJ7JzEIQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/is-ignored": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-13.2.0.tgz", + "integrity": "sha512-onnx4WctHFPPkHGFFAZBIWRSaNwuhixIIfbwPhcZ6IewwQX5n4jpjwM1GokA7vhlOnQ57W7AavbKUGjzIVtnRQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "semver": "7.3.5" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/lint": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-13.2.0.tgz", + "integrity": "sha512-5XYkh0e9ehHjA7BxAHFpjPgr1qqbFY8OFG1wpBiAhycbYBtJnQmculA2wcwqTM40YCUBqEvWFdq86jTG8fbkMw==", + "dev": true, + "dependencies": { + "@commitlint/is-ignored": "^13.2.0", + "@commitlint/parse": "^13.2.0", + "@commitlint/rules": "^13.2.0", + "@commitlint/types": "^13.2.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/load": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-13.2.1.tgz", + "integrity": "sha512-qlaJkj0hfa9gtWRfCfbgFBTK3GYQRmjZhba4l9mUu4wV9lEZ4ICFlrLtd/8kaLXf/8xbrPhkAPkVFOAqM0YwUQ==", + "dev": true, + "dependencies": { + "@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", + "typescript": "^4.4.3" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/load/node_modules/typescript": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", + "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/@commitlint/message": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-13.2.0.tgz", + "integrity": "sha512-+LlErJj2F2AC86xJb33VJIvSt25xqSF1I0b0GApSgoUtQBeJhx4SxIj1BLvGcLVmbRmbgTzAFq/QylwLId7EhA==", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/parse": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-13.2.0.tgz", + "integrity": "sha512-AtfKSQJQADbDhW+kuC5PxOyBANsYCuuJlZRZ2PYslOz2rvWwZ93zt+nKjM4g7C9ETbz0uq4r7/EoOsTJ2nJqfQ==", + "dev": true, + "dependencies": { + "@commitlint/types": "^13.2.0", + "conventional-changelog-angular": "^5.0.11", + "conventional-commits-parser": "^3.2.2" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/read": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-13.2.0.tgz", + "integrity": "sha512-7db5e1Bn3re6hQN0SqygTMF/QX6/MQauoJn3wJiUHE93lvwO6aFQxT3qAlYeyBPwfWsmDz/uSH454jtrSsv3Uw==", + "dev": true, + "dependencies": { + "@commitlint/top-level": "^13.2.0", + "@commitlint/types": "^13.2.0", + "fs-extra": "^10.0.0", + "git-raw-commits": "^2.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/resolve-extends": { + "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, + "dependencies": { + "import-fresh": "^3.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/rules": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-13.2.0.tgz", + "integrity": "sha512-O3A9S7blOzvHfzrJrUQe9JxdtGy154ol/GXHwvd8WfMJ10y5ryBB4b6+0YZ1XhItWzrEASOfOKbD++EdLV90dQ==", + "dev": true, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/to-lines": { + "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, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/top-level": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-13.2.0.tgz", + "integrity": "sha512-knBvWYbIq6VV6VPHrVeDsxDiJq4Zq6cv5NIYU3iesKAsmK2KlLfsZPa+Ig96Y4AqAPU3zNJwjHxYkz9qxdBbfA==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/top-level/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/top-level/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@commitlint/types": { + "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, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@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, + "dependencies": { + "lodash.get": "^4", + "make-error": "^1", + "ts-node": "^9", + "tslib": "^2" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "cosmiconfig": ">=6" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@gar/promisify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", + "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", + "dev": true + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@koa/cors": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-3.1.0.tgz", + "integrity": "sha512-7ulRC1da/rBa6kj6P4g2aJfnET3z8Uf3SWu60cjbtxTA5g8lxRdX/Bd2P92EagGwwAhANeNw8T8if99rJliR6Q==", + "dev": true, + "dependencies": { + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@material/animation": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/animation/-/animation-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-R1QbY4fC6RBOoi4Dq/3yuD5OK0ts02WxGt1JXaddsdnO6szZJcfXm2aiCweU1GUpchoah+YzDBJrsmSoqFCKIg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/base": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/base/-/base-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-bCxGPqFQPh3rfBdqG+UvlrnRPSP2CzHhn0f44NqELY/SkmujIfS30rJOX965IKoD6lGdKWIfi/sAm03I81pZ7g==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/button": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/button/-/button-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-FV44k7WH8d0Z7TjKldEILWXG+bgVz0CplqAYiPiRoxIaGljOq/D7+enuC8tJOUst+zyihVSKyYT69ghWuOKjjg==", + "dependencies": { + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/touch-target": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/density": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/density/-/density-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-uCOzDL3U8EAOU6A+3lwbys6lB5P24PwEsNoe5YoB7CmkNS+8LLFPdemp4dMdVY2xGlDX+McaUOKJKmFub4cPUA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dialog": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/dialog/-/dialog-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-WOK+HN7HQa3mHvNEsEnleDOHCLRAbpFOhGuGyqnSDOCyxTl2DcNCUqsWupDVDpAlLv2OfLdmceyJrejMF+8q7g==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/button": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/icon-button": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/touch-target": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dom": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/dom/-/dom-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-9XvFE2OuOZizYXF3ptyMcJuN/JHZA4vKq5lPLrIbcTXnd4DzJ7L4JrMcMb75xfjugxj8uaXjdfI62gwHfzP/aw==", + "dependencies": { + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/drawer": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/drawer/-/drawer-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-a5tGNXOXJglDpq/5blE3ZxbfTnuYU6pnkswWHliSUc71fC1A6XmK51vLz/PCGPGV3qL8JS2sakOVMdssRuLPxA==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/list": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/elevation": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-fuOG6w7Crz+9iibkBAXOQGYBWMCDZSvXA9PlZFW1JFCHUWyzzTMJeJIaHAVMHFzhbVF/rjqF6CliDZyAz4fULg==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/feature-targeting": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-e72VDSIMrwF5aX4rkQcO1AHewX/ydWOujFtMBk4QD/asyDPKBv+bKwO6f/msM+Wqen8I+DbHC0PH/2K15gQ3pQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/floating-label": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-MZIVki9uD6JMyfQ6v5FIgt2WEZQ3fOCpoOiE8c9cHuNiawVJc3pmoA5wT/38hJs3iMCx86D1jL1vK9UdyIdF7A==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/form-field": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/form-field/-/form-field-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-wYNyh1RMqEviuWcredWYx8ENEjR1GYdQu/NE9SKlfK7zKsFxF7szwHDd/3cZd7BSYVJUeylveDW+KgXQaW0YpQ==", + "dependencies": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/icon-button": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/icon-button/-/icon-button-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-2cKO9FIEYwQqd6qlvuC2IbZQ3m8xvw690sx+H/+1UFs17TY/STDfJRj1p5qf+MnIqaiz5jsoxQemuUkcej+uBw==", + "dependencies": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/touch-target": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/line-ripple": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-9LL/d3jWNesupmwvZtNbV2B1rc1i5BHatFgVt62B1xvfaViRL7EyS0K/+kv9SPWU6nqPLfdj33vOMukn2zIgAg==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/linear-progress": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/linear-progress/-/linear-progress-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-SuEJPdtMbY9hN7X8s9Y8MzVfnmQy32gi4cSIv3r3aL5wmfO29Dg5Gw8OkggEuVjy0QKTXSN9N74WdCdpQ5rUPw==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/progress-indicator": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/list": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/list/-/list-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-Vai+ggNyDBuWM0ihBs3ELGEKCdRmFoTFEhfcZ321VEI2YE8EY6eW1tvazzBfSzpLZkrqcn2QkqD6UpQBzkp4AA==", + "dependencies": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/menu/-/menu-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-8JMFM/QdIC+CRDf79uSe5b4/kCF+3Re90OYlCVaT8LyfYGzYNtBQ8LPKaWlmS2fRN0eIBd1faoUGO0bvslulhg==", + "dependencies": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/list": "12.0.0-canary.22d29cbb4.0", + "@material/menu-surface": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu-surface": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-kvfewRPo4sJtGzBK/T94jjRYnnIaQbC5xqQ+AmGZHGUBsV713cVE1IWVSm0d+7MbERsqKMG9/JZik2Um3YZetQ==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/mwc-base": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-base/-/mwc-base-0.22.1.tgz", + "integrity": "sha512-KtQf4lQUoTQuetfhfRbVJhsXVcpX74LP4JI/cLmx+SGbpG+pXXWf6VI2MvZY2UoHVEkldqPHndeuqctBoY7vgg==", + "dependencies": { + "@material/base": "=12.0.0-canary.22d29cbb4.0", + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-button": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-button/-/mwc-button-0.22.1.tgz", + "integrity": "sha512-Z+NOM+d7QkmIOGbVT7BA/rzLJMXGaxC4Bp+dXcm3ESu6ohPBtG878IyZGSGiMXXDtmAKgMAIp74z4gE/Y0j1pA==", + "dependencies": { + "@material/mwc-icon": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-checkbox": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-checkbox/-/mwc-checkbox-0.22.1.tgz", + "integrity": "sha512-JfUEVWAos/sscPH1k9oUKhjtCbTuU4rl7GgKcenCF6EnxTaXbzxGJKPz28BUS5I14JM7vHNUwfqTC+M/87tNxg==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-dialog": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-dialog/-/mwc-dialog-0.22.1.tgz", + "integrity": "sha512-NHHtsled57N2EjDLelEN5YeJSpW/PYxayA+d2B2zpQPbhqhl//VKxJ9fA6CPm1uc+Cvp2G7lbZ2oUUSQivu+Aw==", + "dependencies": { + "@material/dialog": "=12.0.0-canary.22d29cbb4.0", + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-button": "^0.22.1", + "blocking-elements": "^0.1.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1", + "wicg-inert": "^3.0.0" + } + }, + "node_modules/@material/mwc-drawer": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-drawer/-/mwc-drawer-0.22.1.tgz", + "integrity": "sha512-klwo4VMIIeV4UY+0t4HJ5/2Z8hUjsPHoleEFamRf97yVgPnmCHHaXhe7fjq8srxgkXK81PzwA7PFGBofS248ag==", + "dependencies": { + "@material/drawer": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "blocking-elements": "^0.1.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1", + "wicg-inert": "^3.0.0" + } + }, + "node_modules/@material/mwc-fab": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-fab/-/mwc-fab-0.22.1.tgz", + "integrity": "sha512-KFzZFFr/Nq3bJ0JJyEy7SHsvVLhoqMCTELEjcy2s4fZYT1mLUmHK+Iip1vuKP2I96Yvnym4wkFEcwz/zAMCWbA==", + "dependencies": { + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-floating-label": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-floating-label/-/mwc-floating-label-0.22.1.tgz", + "integrity": "sha512-BkFt9WL8RE05JESv73egh7XUsmXALL78u1ev98T579SER3kwfIepQhXTvAAnFRHFa7QjT8qa/U6RmsvHe1zYbg==", + "dependencies": { + "@material/floating-label": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-formfield": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-formfield/-/mwc-formfield-0.22.1.tgz", + "integrity": "sha512-jk8YyX1STjh+HCQOjlEmtr+kVG8Nlkemh9GoVNkJoIH6k7n+WgYcVXoJtfGWJFBkO8kfHziRVeLRPGP8Nt8ErA==", + "dependencies": { + "@material/form-field": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-icon": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-icon/-/mwc-icon-0.22.1.tgz", + "integrity": "sha512-LX4MUThlYEBfpTr1O53J27KbzFhPbe2dBGouY9piztCI3FObbRVQI+LXFlXJm6KU0BzemaQfz105ZAuLlPAN4g==", + "dependencies": { + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-icon-button": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-icon-button/-/mwc-icon-button-0.22.1.tgz", + "integrity": "sha512-UHwWwzn9LrAKFmQLuKSMQZe1m+X0Xi//xAhLiIBOHaXyEH3QxmKr7pR82e8HQPc42+jUAxKUFmohMrppG6Dmcg==", + "dependencies": { + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-icon-button-toggle": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-icon-button-toggle/-/mwc-icon-button-toggle-0.22.1.tgz", + "integrity": "sha512-4r2Hvmo8qhYfEmWNUPvXxmBY0PTdN3JIFvn7d8WPukPgVSCfhh8o4MbxySoHcuo81A+2K/eMRAiLNY7Y8O5Aew==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-icon-button": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-line-ripple": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-line-ripple/-/mwc-line-ripple-0.22.1.tgz", + "integrity": "sha512-Wx2BHD+/z4Fm8TXyiv59UVeNAirunTfR3uCEjGMU/R7mXUwjpjOhY5bNYGUcP9VyMGG5CkLovc8XX96/iKs1ag==", + "dependencies": { + "@material/line-ripple": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-linear-progress": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-linear-progress/-/mwc-linear-progress-0.22.1.tgz", + "integrity": "sha512-GqqUDomF1nZh6cN0Dgz41vphfvDR17+vdtYk1O5YU9ajW/yd+9SBqwbjfqo4g/jmCpJvMeKnBDZo3Hbc8KnK7g==", + "dependencies": { + "@material/linear-progress": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/theme": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-list": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-list/-/mwc-list-0.22.1.tgz", + "integrity": "sha512-NGfacR/vSHMte7BOrFM7Cafi+tRIeBH8vNFcpP7yjqPkYCXt/9cEw0j1KVtldCRi20V38vkewUKdh2v3DiP5dg==", + "dependencies": { + "@material/base": "=12.0.0-canary.22d29cbb4.0", + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/list": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-checkbox": "^0.22.1", + "@material/mwc-radio": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-menu": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-menu/-/mwc-menu-0.22.1.tgz", + "integrity": "sha512-fY7dyxv9aIccMqPp0+ihbXfB8g7Khvz7tYhtVMLqb6CgpdXf06a/lW50eN0Mk4GC+mFyN36HKHDP7LMLFfsvlA==", + "dependencies": { + "@material/menu": "=12.0.0-canary.22d29cbb4.0", + "@material/menu-surface": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-list": "^0.22.1", + "@material/shape": "=12.0.0-canary.22d29cbb4.0", + "@material/theme": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-notched-outline": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-notched-outline/-/mwc-notched-outline-0.22.1.tgz", + "integrity": "sha512-Bi+CKK24/ypgQZech+vUOWPR8hjPxXILf+mt5liVoNXddGITbdFAShFndNb4Ln4Rn3omzvC63enhpYSS4ByRNw==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/notched-outline": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-radio": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-radio/-/mwc-radio-0.22.1.tgz", + "integrity": "sha512-pFVuDl/bSCK7gVXC54Lsm6lMclt8MYk0u4yVsjaEUTeFk0xMK1ZvoXifIkW0IHhAJVmWgGpWX57wSzLrRZbUNw==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "@material/radio": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-ripple": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-ripple/-/mwc-ripple-0.22.1.tgz", + "integrity": "sha512-QQyWWPBZ6veWNbBMWo8WQw0iY9QUjLLANorug8mPHv13ETdhwVUUozeKOY0ZCXWupNlqtap1Gd0IQjv6HVRMjA==", + "dependencies": { + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/ripple": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-select": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-select/-/mwc-select-0.22.1.tgz", + "integrity": "sha512-P5o2DD48AtEpr+ZqbFlQ04GgSmcbhOTdQEeDBkDAxSsuErXQZgzY1aPCXlaDI0QzQ/gNP/13b4ejLqstVp9SQg==", + "dependencies": { + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/floating-label": "=12.0.0-canary.22d29cbb4.0", + "@material/line-ripple": "=12.0.0-canary.22d29cbb4.0", + "@material/list": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-floating-label": "^0.22.1", + "@material/mwc-icon": "^0.22.1", + "@material/mwc-line-ripple": "^0.22.1", + "@material/mwc-list": "^0.22.1", + "@material/mwc-menu": "^0.22.1", + "@material/mwc-notched-outline": "^0.22.1", + "@material/select": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-snackbar": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-snackbar/-/mwc-snackbar-0.22.1.tgz", + "integrity": "sha512-4ZTb4Gk/zKJWvvqqKuOFo1NO68DnCgyQlktPdNNTGhCERdxkEQnZz+mkAw+Mfr5tCBizomgaFzd6tuAZCUutyQ==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/snackbar": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-switch": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-switch/-/mwc-switch-0.22.1.tgz", + "integrity": "sha512-KDY3uqT2qTEw6Z9TS91Ucs0LViUcMsP1XHu6ZNhbv9Ai1uK/i8pwVWAIGIX9Cm1iCdjiYGfKm4DZLORDb/rfEQ==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "@material/switch": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-tab": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-tab/-/mwc-tab-0.22.1.tgz", + "integrity": "sha512-sNPE8kRQEH04vEStxiidTjpyuHc+5Wm8+OVU8wrf6ChJa8KUV5bi2blWm6PW4rfQRo2Bs8AarDXv15t4wv3XWg==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "@material/mwc-tab-indicator": "^0.22.1", + "@material/tab": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-tab-bar": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-tab-bar/-/mwc-tab-bar-0.22.1.tgz", + "integrity": "sha512-USn9pIMNfz2vPh7w2U55j0EVr82x3odq9VdcDGG5d4jWwzMPjJ9CKMjqgFrlIiPmxieD5zeSW0LauGhwv6ujOg==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-tab": "^0.22.1", + "@material/mwc-tab-scroller": "^0.22.1", + "@material/tab": "=12.0.0-canary.22d29cbb4.0", + "@material/tab-bar": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-tab-indicator": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-tab-indicator/-/mwc-tab-indicator-0.22.1.tgz", + "integrity": "sha512-/Q8vju7DAysqz3Fo+IINaGSeU9BinZbdaSUyRFjfrUWlzJCE6IYYB7zMyc2W+EjaxhjftpL/N3Sw50Xw+pAL+A==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/tab-indicator": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-tab-scroller": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-tab-scroller/-/mwc-tab-scroller-0.22.1.tgz", + "integrity": "sha512-dqAsXS7Nyw61vVb6d11zDg0xuvAYfOyPmz6wLwcXxzSlHOCfkuFu2fcjhssZIlW3DzzzrCw7aZ+T6mHOZcr0dg==", + "dependencies": { + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/tab-scroller": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-textarea": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-textarea/-/mwc-textarea-0.22.1.tgz", + "integrity": "sha512-ta5ARYpxaCRvseXTKkp8tFBfJ0oP8FWsE4FymrjV5b+UEAEzAzjcWWolIDyS7DdixSj1ROI5dJHsU/on5lWPjw==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-textfield": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-textfield": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-textfield/-/mwc-textfield-0.22.1.tgz", + "integrity": "sha512-7xLlW2B1wMnCi2JSlOELELPEUda0w6bWpjn4LB4UPi1hAWG8VR+Rn5rR6q4NDav9pad+qA7+PGjNlE32xVUm7g==", + "dependencies": { + "@material/floating-label": "=12.0.0-canary.22d29cbb4.0", + "@material/line-ripple": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-floating-label": "^0.22.1", + "@material/mwc-line-ripple": "^0.22.1", + "@material/mwc-notched-outline": "^0.22.1", + "@material/textfield": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-top-app-bar": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-top-app-bar/-/mwc-top-app-bar-0.22.1.tgz", + "integrity": "sha512-SHQLjMrHRYsJaT0+8rNjkYW9LDi93AsGX+USuCYhVPeMhBUcqVmr09lTCqj3xyJ3JAy43XONPhtXjxlMT1jCNg==", + "dependencies": { + "@material/mwc-base": "^0.22.1", + "@material/top-app-bar": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-top-app-bar-fixed": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-top-app-bar-fixed/-/mwc-top-app-bar-fixed-0.22.1.tgz", + "integrity": "sha512-ZpQGKmqmSHp1izqX1U0S+3E8s5xLSB81cjFlQPFKG6arU6TO8Xqyzd05JPfFHfau5aZeHQuJB0MOGN2QT31UCw==", + "dependencies": { + "@material/mwc-top-app-bar": "^0.22.1", + "@material/top-app-bar": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/notched-outline": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-LgVwQri2sI/EnAbSjyyzhifjcBKpYO48oy6HyRg6Cq/ZxOgNv3u/VG4fE3ToyNLe8pMPkfQsn2g8czuZoRYwxg==", + "dependencies": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/floating-label": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/progress-indicator": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-XnG61vDDUPQWK3obQcPHaTPxEKFfPKo8qtiKxkFnGdzIeezDGj7n9m8gdvzcqed8rGZWCNKYOzodkRfplStpMw==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/radio": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/radio/-/radio-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-piGy+6YEtW3odicIImRGnc3uY0iD42IAe4+pnVo36KsfHLm5peYuEc0jrLI4zdmOPYlRxSskIbAAzfMKdwKG1A==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/touch-target": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/ripple": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-IzBtXi4EWx27Hkfd5Zkx/MrZAXJZe0AAQCo37Etl/af0/aJPIOyCOdHQiwoK2FqRH71pmNfUGrUWOeUxFyaSdw==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/rtl": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-R7u7w5U+mvRwsj15tpf/CbALs3FrGVidsTkv8C1uZDK1ae490De8HSe839lcFcXmM8c/PFSx5B3rKyQG2AyraQ==", + "dependencies": { + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/select": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/select/-/select-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-ROpNqkHkv/ZUWNf4tWxDo/L6P2QwWaNKADSqYpg/XXecAm7NdBX5aDo63VCBPCm57JkAdBWJQB5MRrbkaWLTfA==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/floating-label": "12.0.0-canary.22d29cbb4.0", + "@material/line-ripple": "12.0.0-canary.22d29cbb4.0", + "@material/list": "12.0.0-canary.22d29cbb4.0", + "@material/menu": "12.0.0-canary.22d29cbb4.0", + "@material/menu-surface": "12.0.0-canary.22d29cbb4.0", + "@material/notched-outline": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/shape": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/shape/-/shape-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-yKC+cqdjGYg3sseZ4baNe9OLhBENHwX2SpJGZORZ7ix4/8pxzFG3wO80eZ8LsldzYem9MmtcbRilBZ4rvvxh0A==", + "dependencies": { + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/snackbar": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/snackbar/-/snackbar-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-NDYR2rYyF2kbQYCec/I0NmAPtnXMBpGYEQ4/m10rAzTP2hsyySZs0cKk54/V3czT+gFz9C9W3zCm1CwgJwL5fA==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/button": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/icon-button": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/switch": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/switch/-/switch-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-kubSphtXl74TC/PAjp67lYi7Ngk0MEKTLzp1ZHiMHElew2Z9/IYHP0pPaQRTkBY0ddIx6hVdHMiMf8qB4zuz2w==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/tab/-/tab-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-Tmb+8Dsx7wItbqOW4JHUVIq3I/inM3l/gk6EV/ctNeyz8coPIJL39yN4CcTX+VHsYykF+tK3jz4QSQX0ASfimQ==", + "dependencies": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/tab-indicator": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-bar": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/tab-bar/-/tab-bar-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-cxGyfONh9tFK2tISHDSAWFfH/uxH/HfTTjuDQIiPkOLmr6oVgGPXP2AdsZ0Z60HJCAedbR9mdWCesEk8w4f8+Q==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/tab": "12.0.0-canary.22d29cbb4.0", + "@material/tab-indicator": "12.0.0-canary.22d29cbb4.0", + "@material/tab-scroller": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-indicator": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/tab-indicator/-/tab-indicator-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-7MeJG5bN7WCyNsjT+7iGci2XuIkwUXA3QRz3La2zKPBxnPkRiz7GUwkpr1b5h6wPpYfCWKyCbixQD9Ufgq3kKA==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-scroller": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/tab-scroller/-/tab-scroller-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-IaFQiwJ/MKhbFvKcGmlAFNHCxXf5THyjefgzav/k0Fu49vzQFA1ZiSTvPU7/d0vV/G2amaba+l5w9TP9/n4KFw==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/tab": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/textfield": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-OJMgS0iniOvnRJa5DWyFqg1VIC77KEdoXern9OQiQphUE1LJ2Kbbwwj0GgyULuxhcUlUSnnisw+J5IfWK7kMUg==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/floating-label": "12.0.0-canary.22d29cbb4.0", + "@material/line-ripple": "12.0.0-canary.22d29cbb4.0", + "@material/notched-outline": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/theme": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/theme/-/theme-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-r4xYCgc+CrbvDxCINVqXwAFWQ1WgV3s2+bUse/2iw53YqyemhhtzFjfp+DXLdC4zJSOuObWC45eaDKeseLMGMw==", + "dependencies": { + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/top-app-bar": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/top-app-bar/-/top-app-bar-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-fTS0kOHyUAKBhtz8olDvsCtZ6VxJEJ5QNUAZdHbJsTjig87poLLUP2CKJ18t5DjzW/KFMFjNYMSbah6NOREvqg==", + "dependencies": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/touch-target": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-aPEMmR+xRI5ywD9JM+njTgU14CCsgRSS7CLZwd+wsfJkMYPCi8rBM3t23bu/jILa4IT6TIe32Ew1xIBVxJNpgQ==", + "dependencies": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/typography": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/typography/-/typography-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-lIzU4IFjaSfVRbhsabTiri8CD+fEe9/DaGpoDm89sHm7b8RbN1+m+7OrePICcWgWFo2swRndph8qhzh7gTYdew==", + "dependencies": { + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@mdn/browser-compat-data": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.1.0.tgz", + "integrity": "sha512-58eB5/ovJ5CfArzZwmZdenF/WlAGGS+1PG8RUb3oJ4st9exETBjClmFC0E1uVrZG1BwPaT205RKS8RhnUh5x3Q==", + "dev": true + }, + "node_modules/@microsoft/tsdoc": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.13.2.tgz", + "integrity": "sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg==", + "dev": true + }, + "node_modules/@microsoft/tsdoc-config": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.15.2.tgz", + "integrity": "sha512-mK19b2wJHSdNf8znXSMYVShAHktVr/ib0Ck2FA3lsVBSEhSI/TfXT7DJQkAYgcztTuwazGcg58ZjYdk0hTCVrA==", + "dev": true, + "dependencies": { + "@microsoft/tsdoc": "0.13.2", + "ajv": "~6.12.6", + "jju": "~1.4.0", + "resolve": "~1.19.0" + } + }, + "node_modules/@microsoft/tsdoc-config/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@microsoft/tsdoc-config/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@microsoft/tsdoc-config/node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/arborist": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-2.10.0.tgz", + "integrity": "sha512-CLnD+zXG9oijEEzViimz8fbOoFVb7hoypiaf7p6giJhvYtrxLAyY3cZAMPIFQvsG731+02eMDp3LqVBNo7BaZA==", + "dev": true, + "dependencies": { + "@isaacs/string-locale-compare": "^1.0.1", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^1.0.2", + "@npmcli/metavuln-calculator": "^1.1.0", + "@npmcli/move-file": "^1.1.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^1.0.1", + "@npmcli/package-json": "^1.0.1", + "@npmcli/run-script": "^1.8.2", + "bin-links": "^2.2.1", + "cacache": "^15.0.3", + "common-ancestor-path": "^1.0.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "npm-install-checks": "^4.0.0", + "npm-package-arg": "^8.1.5", + "npm-pick-manifest": "^6.1.0", + "npm-registry-fetch": "^11.0.0", + "pacote": "^11.3.5", + "parse-conflict-json": "^1.1.1", + "proc-log": "^1.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "ssri": "^8.0.1", + "treeverse": "^1.0.4", + "walk-up-path": "^1.0.0" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@npmcli/fs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz", + "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/git": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", + "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "dependencies": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@npmcli/map-workspaces": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-1.0.4.tgz", + "integrity": "sha512-wVR8QxhyXsFcD/cORtJwGQodeeaDf0OxcHie8ema4VgFeqwYkFsDPnSrIRSytX8xR6nKPAH89WnwTcaU608b/Q==", + "dev": true, + "dependencies": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^7.1.6", + "minimatch": "^3.0.4", + "read-package-json-fast": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/metavuln-calculator": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-1.1.1.tgz", + "integrity": "sha512-9xe+ZZ1iGVaUovBVFI9h3qW+UuECUzhvZPxK9RaEA2mjU26o5D0JloGYWwLYvQELJNmBdQB6rrpuN8jni6LwzQ==", + "dev": true, + "dependencies": { + "cacache": "^15.0.5", + "pacote": "^11.1.11", + "semver": "^7.3.2" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/name-from-folder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", + "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", + "dev": true + }, + "node_modules/@npmcli/node-gyp": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", + "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", + "dev": true + }, + "node_modules/@npmcli/package-json": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-1.0.1.tgz", + "integrity": "sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.1" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "dev": true, + "dependencies": { + "infer-owner": "^1.0.4" + } + }, + "node_modules/@npmcli/run-script": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.6.tgz", + "integrity": "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + } + }, + "node_modules/@open-wc/building-utils": { + "version": "2.18.4", + "resolved": "https://registry.npmjs.org/@open-wc/building-utils/-/building-utils-2.18.4.tgz", + "integrity": "sha512-wjNp9oE1SFsiBEqaI67ff60KHDpDbGMNF+82pvCHe412SFY4q8DNy8A+hesj1nZsuZHH1/olDfzBDbYKAnmgMg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@webcomponents/shadycss": "^1.10.2", + "@webcomponents/webcomponentsjs": "^2.5.0", + "arrify": "^2.0.1", + "browserslist": "^4.16.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3", + "clone": "^2.1.2", + "core-js-bundle": "^3.8.1", + "deepmerge": "^4.2.2", + "es-module-shims": "^0.4.7", + "html-minifier-terser": "^5.1.1", + "lru-cache": "^5.1.1", + "minimatch": "^3.0.4", + "parse5": "^5.1.1", + "path-is-inside": "^1.0.2", + "regenerator-runtime": "^0.13.7", + "resolve": "^1.19.0", + "rimraf": "^3.0.2", + "shady-css-scoped-element": "^0.0.2", + "systemjs": "^6.8.3", + "terser": "^4.6.7", + "valid-url": "^1.0.9", + "whatwg-fetch": "^3.5.0", + "whatwg-url": "^7.1.0" + } + }, + "node_modules/@open-wc/building-utils/node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@open-wc/building-utils/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@open-wc/building-utils/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "node_modules/@open-wc/building-utils/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/@open-wc/building-utils/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/@open-wc/building-utils/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/@open-wc/building-utils/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@open-wc/chai-dom-equals": { + "version": "0.12.36", + "resolved": "https://registry.npmjs.org/@open-wc/chai-dom-equals/-/chai-dom-equals-0.12.36.tgz", + "integrity": "sha512-Gt1fa37h4rtWPQGETSU4n1L678NmMi9KwHM1sH+JCGcz45rs8DBPx7MUVeGZ+HxRlbEI5t9LU2RGGv6xT2OlyA==", + "dev": true, + "dependencies": { + "@open-wc/semantic-dom-diff": "^0.13.16", + "@types/chai": "^4.1.7" + } + }, + "node_modules/@open-wc/chai-dom-equals/node_modules/@open-wc/semantic-dom-diff": { + "version": "0.13.21", + "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.13.21.tgz", + "integrity": "sha512-BONpjHcGX2zFa9mfnwBCLEmlDsOHzT+j6Qt1yfK3MzFXFtAykfzFjAgaxPetu0YbBlCfXuMlfxI4vlRGCGMvFg==", + "dev": true + }, + "node_modules/@open-wc/dedupe-mixin": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@open-wc/dedupe-mixin/-/dedupe-mixin-1.3.0.tgz", + "integrity": "sha512-UfdK1MPnR6T7f3svzzYBfu3qBkkZ/KsPhcpc3JYhsUY4hbpwNF9wEQtD4Z+/mRqMTJrKg++YSxIxE0FBhY3RIw==", + "dev": true + }, + "node_modules/@open-wc/eslint-config": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@open-wc/eslint-config/-/eslint-config-4.3.0.tgz", + "integrity": "sha512-kCxFWQ1AR4meTmWJGnK36LJYqDJeFGjlj6n4vLjAW3/c1VUyYQKL90vrNKy/OHS9kTjc9dcH5D64myAbNx6r1w==", + "dev": true, + "dependencies": { + "eslint": "^7.6.0", + "eslint-config-airbnb-base": "^14.0.0", + "eslint-plugin-html": "^6.0.0", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-lit": "^1.2.0", + "eslint-plugin-lit-a11y": "^1.0.1", + "eslint-plugin-no-only-tests": "^2.4.0", + "eslint-plugin-wc": "^1.2.0" + }, + "peerDependencies": { + "@babel/eslint-plugin": "^7.6.0", + "eslint-plugin-html": "^6.0.0", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-lit": "^1.3.0", + "eslint-plugin-lit-a11y": "^1.0.1", + "eslint-plugin-no-only-tests": "^2.4.0", + "eslint-plugin-wc": "^1.2.0" + } + }, + "node_modules/@open-wc/scoped-elements": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@open-wc/scoped-elements/-/scoped-elements-1.3.4.tgz", + "integrity": "sha512-WD+ObocdzcFCpBxnc8bQa7NoATeA+tJrK0/c/yV1Nx4leV+1PmJNNu+WCcuckBEGd0Op6FP8w1TidoqmVVba6g==", + "dev": true, + "dependencies": { + "@open-wc/dedupe-mixin": "^1.3.0", + "lit-html": "^1.0.0" + } + }, + "node_modules/@open-wc/semantic-dom-diff": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.19.5.tgz", + "integrity": "sha512-Wi0Fuj3dzqlWClU0y+J4k/nqTcH0uwgOWxZXPyeyG3DdvuyyjgiT4L4I/s6iVShWQvvEsyXnj7yVvixAo3CZvg==", + "dev": true, + "dependencies": { + "@types/chai": "^4.2.11", + "@web/test-runner-commands": "^0.5.7" + } + }, + "node_modules/@open-wc/testing": { + "version": "2.5.33", + "resolved": "https://registry.npmjs.org/@open-wc/testing/-/testing-2.5.33.tgz", + "integrity": "sha512-+EJNs0i+VV4nE+BrG70l2DNGXOZTSrluruaaU06HUSk57ZlKa+kIxWmkLxCOLlbgnQgrPrQWxbs3lgB1tIx/YA==", + "dev": true, + "dependencies": { + "@open-wc/chai-dom-equals": "^0.12.36", + "@open-wc/semantic-dom-diff": "^0.19.3", + "@open-wc/testing-helpers": "^1.8.12", + "@types/chai": "^4.2.11", + "@types/chai-dom": "^0.0.9", + "@types/mocha": "^5.2.7", + "@types/sinon-chai": "^3.2.3", + "chai": "^4.2.0", + "chai-a11y-axe": "^1.3.1", + "chai-dom": "^1.8.1", + "mocha": "^6.2.2", + "sinon-chai": "^3.5.0" + } + }, + "node_modules/@open-wc/testing-helpers": { + "version": "1.8.12", + "resolved": "https://registry.npmjs.org/@open-wc/testing-helpers/-/testing-helpers-1.8.12.tgz", + "integrity": "sha512-+4exEHYvnFqI1RGDDIKFHPZ7Ws5NK1epvEku3zLaOYN3zc+huX19SndNc5+X++v8A+quN/iXbHlh80ROyNaYDA==", + "dev": true, + "dependencies": { + "@open-wc/scoped-elements": "^1.2.4", + "lit-element": "^2.2.1", + "lit-html": "^1.0.0" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-16.0.0.tgz", + "integrity": "sha512-LuNyypCP3msCGVQJ7ki8PqYdpjfEkE/xtFa5DqlF+7IBD0JsfMZ87C58heSwIMint58sAUZbt3ITqOmdQv/dXw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^2.30.0" + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/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 + }, + "node_modules/@rollup/plugin-inject": { + "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, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "estree-walker": "^2.0.1", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/plugin-inject/node_modules/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 + }, + "node_modules/@rollup/plugin-json": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", + "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.0.8" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", + "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@sinonjs/samsam": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.0.2.tgz", + "integrity": "sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + } + }, + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "dev": true + }, + "node_modules/@snowpack/plugin-typescript": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@snowpack/plugin-typescript/-/plugin-typescript-1.2.1.tgz", + "integrity": "sha512-wU+JNaMVkqGsqTaUY7TnEMhGt/3URTgA9dpMCtZX6wn/ceA7Gwlmue/sOLynf0OTNLygHPvjiQECQYkEi3LTtg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "npm-run-path": "^4.0.1" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@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 + }, + "node_modules/@types/babel__core": { + "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, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/browserslist": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@types/browserslist/-/browserslist-4.15.0.tgz", + "integrity": "sha512-h9LyKErRGZqMsHh9bd+FE8yCIal4S0DxKTOeui56VgVXqa66TKiuaIUxCAI7c1O0LjaUzOTcsMyOpO9GetozRA==", + "deprecated": "This is a stub types definition. browserslist provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "browserslist": "*" + } + }, + "node_modules/@types/browserslist-useragent": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/browserslist-useragent/-/browserslist-useragent-3.0.4.tgz", + "integrity": "sha512-S/AhrluMHi8EcuxxCtTDBGr8u+XvwUfLvZdARuIS2LFZ/lHoeaeJJYCozD68GKH6wm52FbIHq4WWPF/Ec6a9qA==", + "dev": true + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, + "node_modules/@types/caniuse-api": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/caniuse-api/-/caniuse-api-3.0.2.tgz", + "integrity": "sha512-YfCDMn7R59n7GFFfwjPAM0zLJQy4UvveC32rOJBmTqJJY8uSRqM4Dc7IJj8V9unA48Qy4nj5Bj3jD6Q8VZ1Seg==", + "dev": true + }, + "node_modules/@types/chai": { + "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 + }, + "node_modules/@types/chai-dom": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@types/chai-dom/-/chai-dom-0.0.9.tgz", + "integrity": "sha512-jj4F2NJog2/GBYsyJ8+NvhnWUBbPY4MUAKLdPJE6+568rw12GGXvj0ycUuP5nndVrnJgozmJAoMTvxvjJATXWw==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@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, + "dependencies": { + "@types/node": "*", + "@types/qs": "*" + } + }, + "node_modules/@types/command-line-args": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", + "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", + "dev": true + }, + "node_modules/@types/command-line-usage": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.2.tgz", + "integrity": "sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg==", + "dev": true + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==", + "dev": true + }, + "node_modules/@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 + }, + "node_modules/@types/cookies": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.7.tgz", + "integrity": "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/express": "*", + "@types/keygrip": "*", + "@types/node": "*" + } + }, + "node_modules/@types/debounce": { + "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 + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@types/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@types/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-bsKkeSqN7HYyYntFRAmzcwx/dKW4Wa+KVMTInANlI72PWLQmOpZu96j0OqHZGArW4VQwCmJPteQlXaUDeOB0WQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.26", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.26.tgz", + "integrity": "sha512-zeu3tpouA043RHxW0gzRxwCHchMgftE8GArRsvYT0ByDMbn19olQHx5jLue0LxWY6iYtXb7rXmuVtSkhy9YZvQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/http-assert": { + "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 + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, + "node_modules/@types/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-e+2rjEwK6KDaNOm5Aa9wNGgyS9oSZU/4pfSMMPYNOfjvFI0WVXm29+ITRFr6aKDvvKo7uU1jV68MW4ScsfDi7Q==", + "dev": true + }, + "node_modules/@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 + }, + "node_modules/@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, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@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, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@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 + }, + "node_modules/@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 + }, + "node_modules/@types/keygrip": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", + "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==", + "dev": true + }, + "node_modules/@types/keyv": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", + "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/koa": { + "version": "2.13.4", + "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.4.tgz", + "integrity": "sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw==", + "dev": true, + "dependencies": { + "@types/accepts": "*", + "@types/content-disposition": "*", + "@types/cookies": "*", + "@types/http-assert": "*", + "@types/http-errors": "*", + "@types/keygrip": "*", + "@types/koa-compose": "*", + "@types/node": "*" + } + }, + "node_modules/@types/koa__cors": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/koa__cors/-/koa__cors-3.0.3.tgz", + "integrity": "sha512-74Xb4hJOPGKlrQ4PRBk1A/p0gfLpgbnpT0o67OMVbwyeMXvlBN+ZCRztAAmkKZs+8hKbgMutUlZVbA52Hr/0IA==", + "dev": true, + "dependencies": { + "@types/koa": "*" + } + }, + "node_modules/@types/koa-compose": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", + "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==", + "dev": true, + "dependencies": { + "@types/koa": "*" + } + }, + "node_modules/@types/koa-compress": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@types/koa-compress/-/koa-compress-2.0.9.tgz", + "integrity": "sha512-1Sa9OsbHd2N2N7gLpdIRHe8W99EZbfIR31D7Iisx16XgwZCnWUtGXzXQejhu74Y1pE/wILqBP6VL49ch/MVpZw==", + "dev": true, + "dependencies": { + "@types/koa": "*", + "@types/node": "*" + } + }, + "node_modules/@types/koa-etag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/koa-etag/-/koa-etag-3.0.0.tgz", + "integrity": "sha512-gXQUtKGEnCy0sZLG+uE3wL4mvY1CBPcb6ECjpAoD8RGYy/8ACY1B084k8LTFPIdVcmy7GD6Y4n3up3jnupofcQ==", + "dev": true, + "dependencies": { + "@types/etag": "*", + "@types/koa": "*" + } + }, + "node_modules/@types/koa-send": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@types/koa-send/-/koa-send-4.1.3.tgz", + "integrity": "sha512-daaTqPZlgjIJycSTNjKpHYuKhXYP30atFc1pBcy6HHqB9+vcymDgYTguPdx9tO4HMOqNyz6bz/zqpxt5eLR+VA==", + "dev": true, + "dependencies": { + "@types/koa": "*" + } + }, + "node_modules/@types/koa-static": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/koa-static/-/koa-static-4.0.2.tgz", + "integrity": "sha512-ns/zHg+K6XVPMuohjpOlpkR1WLa4VJ9czgUP9bxkCDn0JZBtUWbD/wKDZzPGDclkQK1bpAEScufCHOy8cbfL0w==", + "dev": true, + "dependencies": { + "@types/koa": "*", + "@types/koa-send": "*" + } + }, + "node_modules/@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true + }, + "node_modules/@types/marked": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-2.0.5.tgz", + "integrity": "sha512-shRZ7XnYFD/8n8zSjKvFdto1QNSf4tONZIlNEZGrJe8GsOE8DL/hG1Hbl8gZlfLnjS7+f5tZGIaTgfpyW38h4w==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "node_modules/@types/mime-types": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.1.tgz", + "integrity": "sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.11.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.11.tgz", + "integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/parse5": { + "version": "2.2.34", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz", + "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/path-is-inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/path-is-inside/-/path-is-inside-1.0.0.tgz", + "integrity": "sha512-hfnXRGugz+McgX2jxyy5qz9sB21LRzlGn24zlwN2KEgoPtEvjzNRrLtUkOOebPDPZl3Rq7ywKxYvylVcEZDnEw==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/sinon": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.6.tgz", + "integrity": "sha512-6EF+wzMWvBNeGrfP3Nx60hhx+FfwSg1JJBLAAP/IdIUq0EYkqCYf70VT3PhuhPX9eLD+Dp+lNdpb/ZeHG8Yezg==", + "dev": true, + "dependencies": { + "@sinonjs/fake-timers": "^7.1.0" + } + }, + "node_modules/@types/sinon-chai": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.6.tgz", + "integrity": "sha512-Z57LprQ+yOQNu9d6mWdHNvnmncPXzDWGSeLj+8L075/QahToapC4Q13zAFRVKV4clyBmdJ5gz4xBfVkOso5lXw==", + "dev": true, + "dependencies": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", + "dev": true + }, + "node_modules/@types/whatwg-url": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-6.4.0.tgz", + "integrity": "sha512-tonhlcbQ2eho09am6RHnHOgvtDfDYINd5rgxD+2YSkKENooVCFsWizJz139MQW/PV8FfClyKrNe9ZbdHrSCxGg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "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, + "dependencies": { + "@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" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "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, + "dependencies": { + "@types/json-schema": "^7.0.7", + "@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" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/@typescript-eslint/parser": { + "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, + "dependencies": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "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, + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "dev": true, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "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, + "dependencies": { + "@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", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "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, + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@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, + "dependencies": { + "errorstacks": "^2.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/config-loader": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.1.3.tgz", + "integrity": "sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==", + "dev": true, + "dependencies": { + "semver": "^7.3.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/dev-server": { + "version": "0.1.28", + "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.28.tgz", + "integrity": "sha512-964NqgatvFWX7LM8QGlB1XpcJoUQRXZPiEn3XKgDIUSNS6JNCjGfQQ+TfxBlT5KBHYJakDYbTk+sdEeRi2gaLw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.11", + "@types/command-line-args": "^5.0.0", + "@web/config-loader": "^0.1.3", + "@web/dev-server-core": "^0.3.17", + "@web/dev-server-rollup": "^0.3.13", + "camelcase": "^6.2.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.1", + "debounce": "^1.2.0", + "deepmerge": "^4.2.2", + "ip": "^1.1.5", + "nanocolors": "^0.2.1", + "open": "^8.0.2", + "portfinder": "^1.0.28" + }, + "bin": { + "wds": "dist/bin.js", + "web-dev-server": "dist/bin.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/dev-server-core": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.3.17.tgz", + "integrity": "sha512-vN1dwQ8yDHGiAvCeUo9xFfjo+pFl8TW+pON7k9kfhbegrrB8CKhJDUxmHbZsyQUmjf/iX57/LhuWj1xGhRL8AA==", + "dev": true, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/dev-server-esbuild": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/@web/dev-server-esbuild/-/dev-server-esbuild-0.2.16.tgz", + "integrity": "sha512-a82uKy9vQ4HvfWtjd7hJ3GtaqkL2ofxpEu3a1wIZyXB2dFWPvhRSmLNe/4IPPHe4vj6PVdRpLSFPEA3lXUW5Pw==", + "dev": true, + "dependencies": { + "@mdn/browser-compat-data": "^4.0.0", + "@web/dev-server-core": "^0.3.17", + "esbuild": "^0.12.21", + "parse5": "^6.0.1", + "ua-parser-js": "^1.0.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/dev-server-esbuild/node_modules/esbuild": { + "version": "0.12.29", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.29.tgz", + "integrity": "sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + } + }, + "node_modules/@web/dev-server-rollup": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.13.tgz", + "integrity": "sha512-QaxEtsdL6+fktIa1ZL8VEtq4U7WB7ikKEnxkbhUpFknB+WSvwx6DUrvyBDuPckunpczCnljXBFPugu+2W6N8Fg==", + "dev": true, + "dependencies": { + "@rollup/plugin-node-resolve": "^11.0.1", + "@web/dev-server-core": "^0.3.16", + "nanocolors": "^0.2.1", + "parse5": "^6.0.1", + "rollup": "^2.58.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/dev-server/node_modules/camelcase": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@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, + "dependencies": { + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/parse5-utils/node_modules/@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true + }, + "node_modules/@web/test-runner": { + "version": "0.13.22", + "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.13.22.tgz", + "integrity": "sha512-s4P3X4z8RlxqbQgO4K7aPVZTlum9juuQ9ZIxvZlua+KMTG5J5Utr7Drey/tGcx+BwVFUAtQLr20IEWA+38d+fA==", + "dev": true, + "dependencies": { + "@web/browser-logs": "^0.2.2", + "@web/config-loader": "^0.1.3", + "@web/dev-server": "^0.1.24", + "@web/test-runner-chrome": "^0.10.5", + "@web/test-runner-commands": "^0.5.10", + "@web/test-runner-core": "^0.10.22", + "@web/test-runner-mocha": "^0.7.5", + "camelcase": "^6.2.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.1", + "convert-source-map": "^1.7.0", + "diff": "^5.0.0", + "globby": "^11.0.1", + "nanocolors": "^0.2.1", + "portfinder": "^1.0.28", + "source-map": "^0.7.3" + }, + "bin": { + "web-test-runner": "dist/bin.js", + "wtr": "dist/bin.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@web/test-runner-chrome": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.10.7.tgz", + "integrity": "sha512-DKJVHhHh3e/b6/erfKOy0a4kGfZ47qMoQRgROxi9T4F9lavEY3E5/MQ7hapHFM2lBF4vDrm+EWjtBdOL8o42tw==", + "dev": true, + "dependencies": { + "@web/test-runner-core": "^0.10.20", + "@web/test-runner-coverage-v8": "^0.4.8", + "chrome-launcher": "^0.15.0", + "puppeteer-core": "^13.1.3" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@web/test-runner-commands": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.5.13.tgz", + "integrity": "sha512-FXnpUU89ALbRlh9mgBd7CbSn5uzNtr8gvnQZPOvGLDAJ7twGvZdUJEAisPygYx2BLPSFl3/Mre8pH8zshJb8UQ==", + "dev": true, + "dependencies": { + "@web/test-runner-core": "^0.10.20", + "mkdirp": "^1.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@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, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@web/test-runner-coverage-v8": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.4.8.tgz", + "integrity": "sha512-Ib0AscR8Xf9E/V7rf3XOVQTe4vKIbwSTupxV1xGgzj3x4RKUuMUg9FLz9EigZ5iN0mOzZKDllyRS523hbdhDtA==", + "dev": true, + "dependencies": { + "@web/test-runner-core": "^0.10.20", + "istanbul-lib-coverage": "^3.0.0", + "picomatch": "^2.2.2", + "v8-to-istanbul": "^8.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@web/test-runner-mocha": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.7.5.tgz", + "integrity": "sha512-12/OBq6efPCAvJpcz3XJs2OO5nHe7GtBibZ8Il1a0QtsGpRmuJ4/m1EF0Fj9f6KHg7JdpGo18A37oE+5hXjHwg==", + "dev": true, + "dependencies": { + "@types/mocha": "^8.2.0", + "@web/test-runner-core": "^0.10.20" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@web/test-runner-mocha/node_modules/@types/mocha": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", + "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", + "dev": true + }, + "node_modules/@web/test-runner/node_modules/camelcase": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@web/test-runner/node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/@webcomponents/shadycss": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.11.0.tgz", + "integrity": "sha512-L5O/+UPum8erOleNjKq6k58GVl3fNsEQdSOyh0EUhNmi7tHUyRuCJy1uqJiWydWcLARE5IPsMoPYMZmUGrz1JA==", + "dev": true + }, + "node_modules/@webcomponents/webcomponentsjs": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.6.0.tgz", + "integrity": "sha512-Moog+Smx3ORTbWwuPqoclr+uvfLnciVd6wdCaVscHPrxbmQ/IJKm3wbB7hpzJtXWjAq2l/6QMlO85aZiOdtv5Q==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/abortcontroller-polyfill": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", + "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ace-custom-element": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/ace-custom-element/-/ace-custom-element-1.6.5.tgz", + "integrity": "sha512-xU/9r94WKwjwEOjdfs6oVk2Dqc6X63eF2ECvKIMm/JCK1PDbXXdBYi5sQx110tR2sY4f96iXxyvscfT9qeI1RQ==" + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", + "dev": true + }, + "node_modules/address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", + "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/agentkeepalive/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/amator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/amator/-/amator-1.1.0.tgz", + "integrity": "sha1-CMa2C8k67Cthu/wMTWd9MDI8wPE=", + "dependencies": { + "bezier-easing": "^2.0.3" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/are-we-there-yet/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/are-we-there-yet/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/are-we-there-yet/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "node_modules/axe-core": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", + "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz", + "integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.0", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", + "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.0", + "core-js-compat": "^3.18.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz", + "integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bezier-easing": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bezier-easing/-/bezier-easing-2.1.0.tgz", + "integrity": "sha1-wE3+i5JtbsrKGBPWn/F5t8ICXYY=" + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/bin-links": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-2.3.0.tgz", + "integrity": "sha512-JzrOLHLwX2zMqKdyYZjkDgQGT+kHDkIhv2/IK2lJ00qLxV4TmFoHi8drDBb6H5Zrz1YfgHkai4e2MGPqnoUhqA==", + "dev": true, + "dependencies": { + "cmd-shim": "^4.0.1", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0", + "read-cmd-shim": "^2.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^3.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/blocking-elements": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/blocking-elements/-/blocking-elements-0.1.1.tgz", + "integrity": "sha512-/SLWbEzMoVIMZACCyhD/4Ya2M1PWP1qMKuiymowPcI+PdWDARqeARBjhj73kbUBCxEmTZCUu5TAqxtwUO9C1Ig==" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "node_modules/boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bplist-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", + "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=", + "dev": true, + "dependencies": { + "big-integer": "^1.6.7" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", + "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001280", + "electron-to-chromium": "^1.3.896", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/browserslist-useragent": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/browserslist-useragent/-/browserslist-useragent-3.0.3.tgz", + "integrity": "sha512-8KKO6kOXu/93IkMi8zVqzU72BgpoxcITIHtkM1qmlnxJtIMF9Y+2uWL9JS2uUbzj/PaS3kaA6LcICBThMojGjA==", + "dev": true, + "dependencies": { + "browserslist": "^4.12.0", + "semver": "^7.3.2", + "useragent": "^2.3.0" + }, + "engines": { + "node": ">= 6.x.x" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bufferutil": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", + "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "node_modules/bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cacache/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/cache-content-type": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", + "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", + "dev": true, + "dependencies": { + "mime-types": "^2.1.18", + "ylru": "^1.2.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001284", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001284.tgz", + "integrity": "sha512-t28SKa7g6kiIQi6NHeOcKrOrGMzCRrXvlasPwWC26TH2QNdglgzQIRUuJ0cR3NeQPH+5jpuveeeSFDLm2zbkEw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "node_modules/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-a11y-axe": { + "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, + "dependencies": { + "axe-core": "^4.3.3" + } + }, + "node_modules/chai-dom": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/chai-dom/-/chai-dom-1.11.0.tgz", + "integrity": "sha512-ZzGlEfk1UhHH5+N0t9bDqstOxPEXmn3EyXvtsok5rfXVDOFDJbHVy12rED6ZwkJAUDs2w7/Da4Hlq2LB63kltg==", + "dev": true, + "engines": { + "node": ">= 0.12.0" + }, + "peerDependencies": { + "chai": ">= 3", + "mocha": ">= 2" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "dev": true, + "dependencies": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/chrome-launcher": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.0.tgz", + "integrity": "sha512-ZQqX5kb9H0+jy1OqLnWampfocrtSZaGl7Ny3F9GRha85o4odbL8x55paUzh51UC7cEmZ5obp3H2Mm70uC2PpRA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/chrome-launcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "node_modules/clean-css": { + "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, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/clean-css/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "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, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/cmd-shim": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", + "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", + "dev": true, + "dependencies": { + "mkdirp-infer-owner": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/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, + "dependencies": { + "inflation": "^2.0.0", + "qs": "^6.5.2", + "raw-body": "^2.3.3", + "type-is": "^1.6.16" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-line-args": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.0.tgz", + "integrity": "sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A==", + "dev": true, + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", + "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", + "dev": true, + "dependencies": { + "array-back": "^4.0.1", + "chalk": "^2.4.2", + "table-layout": "^1.0.1", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/command-line-usage/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concurrently": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.4.0.tgz", + "integrity": "sha512-HZ3D0RTQMH3oS4gvtYj1P+NBc6PzE2McEra6yEFcQKrUQ9HvtTGU4Dbne083F034p+LRb7kWU0tPRNvSGs1UCQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" + }, + "bin": { + "concurrently": "bin/concurrently.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", + "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", + "dev": true + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/conventional-changelog": { + "version": "3.1.24", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.24.tgz", + "integrity": "sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg==", + "dev": true, + "dependencies": { + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-atom": "^2.0.8", + "conventional-changelog-codemirror": "^2.0.8", + "conventional-changelog-conventionalcommits": "^4.5.0", + "conventional-changelog-core": "^4.2.1", + "conventional-changelog-ember": "^2.0.9", + "conventional-changelog-eslint": "^3.0.9", + "conventional-changelog-express": "^2.0.6", + "conventional-changelog-jquery": "^3.0.11", + "conventional-changelog-jshint": "^2.0.9", + "conventional-changelog-preset-loader": "^2.3.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-angular": { + "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, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-atom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", + "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", + "dev": true, + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-codemirror": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", + "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", + "dev": true, + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-config-spec": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz", + "integrity": "sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==", + "dev": true + }, + "node_modules/conventional-changelog-conventionalcommits": { + "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, + "dependencies": { + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core": { + "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, + "dependencies": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/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 + }, + "node_modules/conventional-changelog-core/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/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, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/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, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/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=", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/read-pkg/node_modules/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, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/conventional-changelog-core/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/conventional-changelog-ember": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", + "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", + "dev": true, + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-eslint": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", + "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", + "dev": true, + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-express": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", + "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", + "dev": true, + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-jquery": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", + "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", + "dev": true, + "dependencies": { + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-jshint": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", + "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz", + "integrity": "sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g==", + "dev": true, + "dependencies": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.6", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commits-parser": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz", + "integrity": "sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw==", + "dev": true, + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-recommended-bump": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", + "dev": true, + "dependencies": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" + }, + "bin": { + "conventional-recommended-bump": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/cookies": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", + "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", + "dev": true, + "dependencies": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/core-js-bundle": { + "version": "3.19.2", + "resolved": "https://registry.npmjs.org/core-js-bundle/-/core-js-bundle-3.19.2.tgz", + "integrity": "sha512-LoFua00O2j1ffgGDViAUQMKuwDXBB/XFOmEGY/9QcyQfIrjlom8XZzj0YymB2aUmPZtHmk1fAjPrz9OEXifW4g==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.19.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.2.tgz", + "integrity": "sha512-ObBY1W5vx/LFFMaL1P5Udo4Npib6fu+cMokeziWkA8Tns4FcDemKF5j9JvaI5JhdkW8EQJQGJN1EcrzmEwuAqQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.18.1", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-js-pure": { + "version": "3.19.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.2.tgz", + "integrity": "sha512-5LkcgQEy8pFeVnd/zomkUBSwnmIxuF1C8E9KrMAbOc8f34IBT9RGvTYeNDdp1PnvMJrrVhvk1hg/yVV5h/znlg==", + "deprecated": "core-js-pure@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/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 + }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dev": true, + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/date-fns": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.27.0.tgz", + "integrity": "sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q==", + "dev": true, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser-id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-2.0.0.tgz", + "integrity": "sha1-AezONxpx6F8VoXF354YwR+c9vn0=", + "dev": true, + "dependencies": { + "bplist-parser": "^0.1.0", + "pify": "^2.3.0", + "untildify": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "dev": true, + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/devtools-protocol": { + "version": "0.0.981744", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", + "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==", + "dev": true + }, + "node_modules/dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/dom5": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.1.tgz", + "integrity": "sha512-JPFiouQIr16VQ4dX6i0+Hpbg3H2bMKPmZ+WZgBOSSvOPx9QHwwY8sPzeM2baUtViESYto6wC2nuZOMC/6gulcA==", + "dev": true, + "dependencies": { + "@types/parse5": "^2.2.34", + "clone": "^2.1.0", + "parse5": "^4.0.0" + } + }, + "node_modules/dom5/node_modules/parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotgitignore": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz", + "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotgitignore/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotgitignore/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotgitignore/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotgitignore/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "node_modules/dynamic-import-polyfill": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dynamic-import-polyfill/-/dynamic-import-polyfill-0.1.1.tgz", + "integrity": "sha512-m953zv0w5oDagTItWm6Auhmk/pY7EiejaqiVbnzSS3HIjh1FCUeK7WzuaVtWPNs58A+/xpIE+/dVk6pKsrua8g==", + "dev": true + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.11.tgz", + "integrity": "sha512-2OhsaYgsWGhWjx2et8kaUcdktPbBGjKM2X0BReUCKcSCPttEY+hz2zie820JLbttU8jwL92+JJysWwkut3wZgA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/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 + }, + "node_modules/es-abstract": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-dev-server": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-dev-server/-/es-dev-server-2.1.0.tgz", + "integrity": "sha512-Vrq/4PyMzWz33QmOdSncvoWLTJVcv2e96z8FLHQwP9zK7DyLeDZCckII8VTW+btUGtM7aErvLH/d/R2pjjjs8w==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.1", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.11.0", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-transform-template-literals": "^7.8.3", + "@babel/preset-env": "^7.9.0", + "@koa/cors": "^3.1.0", + "@open-wc/building-utils": "^2.18.3", + "@rollup/plugin-node-resolve": "^11.0.0", + "@rollup/pluginutils": "^3.0.0", + "@types/babel__core": "^7.1.3", + "@types/browserslist": "^4.8.0", + "@types/browserslist-useragent": "^3.0.0", + "@types/caniuse-api": "^3.0.0", + "@types/command-line-args": "^5.0.0", + "@types/command-line-usage": "^5.0.1", + "@types/debounce": "^1.2.0", + "@types/koa": "^2.0.48", + "@types/koa__cors": "^3.0.1", + "@types/koa-compress": "^2.0.9", + "@types/koa-etag": "^3.0.0", + "@types/koa-static": "^4.0.1", + "@types/lru-cache": "^5.1.0", + "@types/mime-types": "^2.1.0", + "@types/minimatch": "^3.0.3", + "@types/path-is-inside": "^1.0.0", + "@types/whatwg-url": "^6.4.0", + "browserslist": "^4.9.1", + "browserslist-useragent": "^3.0.2", + "builtin-modules": "^3.1.0", + "camelcase": "^5.3.1", + "caniuse-api": "^3.0.0", + "caniuse-lite": "^1.0.30001033", + "chokidar": "^3.0.0", + "command-line-args": "^5.0.2", + "command-line-usage": "^6.1.0", + "debounce": "^1.2.0", + "deepmerge": "^4.2.2", + "es-module-lexer": "^0.3.13", + "get-stream": "^5.1.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^4.0.2", + "koa": "^2.7.0", + "koa-compress": "^3.0.0", + "koa-etag": "^3.0.0", + "koa-static": "^5.0.0", + "lru-cache": "^5.1.1", + "mime-types": "^2.1.27", + "minimatch": "^3.0.4", + "open": "^7.0.3", + "parse5": "^5.1.1", + "path-is-inside": "^1.0.2", + "polyfills-loader": "^1.7.4", + "portfinder": "^1.0.21", + "rollup": "^2.7.2", + "strip-ansi": "^5.2.0", + "systemjs": "^6.3.1", + "tslib": "^1.11.1", + "useragent": "^2.3.0", + "whatwg-url": "^7.0.0" + }, + "bin": { + "es-dev-server": "dist/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/es-dev-server/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/es-dev-server/node_modules/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 + }, + "node_modules/es-dev-server/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/es-dev-server/node_modules/koa-etag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-3.0.0.tgz", + "integrity": "sha1-nvc4Ld1agqsN6xU0FckVg293HT8=", + "dev": true, + "dependencies": { + "etag": "^1.3.0", + "mz": "^2.1.0" + } + }, + "node_modules/es-dev-server/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/es-dev-server/node_modules/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, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/es-dev-server/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "node_modules/es-dev-server/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/es-dev-server/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/es-dev-server/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/es-dev-server/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/es-dev-server/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/es-dev-server/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/es-module-lexer": { + "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 + }, + "node_modules/es-module-shims": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/es-module-shims/-/es-module-shims-0.4.7.tgz", + "integrity": "sha512-0LTiSQoPWwdcaTVIQXhGlaDwTneD0g9/tnH1PNs3zHFFH+xoCeJclDM3rQeqF9nurXPfMKm3l9+kfPRa5VpbKg==", + "dev": true + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.9.7.tgz", + "integrity": "sha512-VtUf6aQ89VTmMLKrWHYG50uByMF4JQlVysb8dmg6cOgW8JnFCipmz7p+HNBl+RR3LLCuBxFGVauAe2wfnF9bLg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esinstall": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/esinstall/-/esinstall-1.1.7.tgz", + "integrity": "sha512-irDsrIF7fZ5BCQEAV5gmH+4nsK6JhnkI9C9VloXdmzJLbM1EcshPw8Ap95UUGc4ZJdzGeOrjV+jgKjQ/Z7Q3pg==", + "dev": true, + "dependencies": { + "@rollup/plugin-commonjs": "^16.0.0", + "@rollup/plugin-inject": "^4.0.2", + "@rollup/plugin-json": "^4.0.0", + "@rollup/plugin-node-resolve": "^10.0.0", + "@rollup/plugin-replace": "^2.4.2", + "builtin-modules": "^3.2.0", + "cjs-module-lexer": "^1.2.1", + "es-module-lexer": "^0.6.0", + "execa": "^5.1.1", + "is-valid-identifier": "^2.0.2", + "kleur": "^4.1.1", + "mkdirp": "^1.0.3", + "picomatch": "^2.3.0", + "resolve": "^1.20.0", + "rimraf": "^3.0.0", + "rollup": "~2.37.1", + "rollup-plugin-polyfill-node": "^0.6.2", + "slash": "~3.0.0", + "validate-npm-package-name": "^3.0.0", + "vm2": "^3.9.2" + } + }, + "node_modules/esinstall/node_modules/@rollup/plugin-node-resolve": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-10.0.0.tgz", + "integrity": "sha512-sNijGta8fqzwA1VwUEtTvWCx2E7qC70NMsDh4ZG13byAXYigBNZMxALhKUSycBks5gupJdq0lFrKumFrRZ8H3A==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/esinstall/node_modules/es-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.6.0.tgz", + "integrity": "sha512-f8kcHX1ArhllUtb/wVSyvygoKCznIjnxhLxy7TCvIiMdT7fL4ZDTIKaadMe6eLvOXg6Wk02UeoFgUoZ2EKZZUA==", + "dev": true + }, + "node_modules/esinstall/node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/esinstall/node_modules/rollup": { + "version": "2.37.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.37.1.tgz", + "integrity": "sha512-V3ojEeyGeSdrMSuhP3diBb06P+qV4gKQeanbDv+Qh/BZbhdZ7kHV0xAt8Yjk4GFshq/WjO7R4c7DFM20AwTFVQ==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-airbnb-base": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", + "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "dev": true, + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.2" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", + "eslint-plugin-import": "^2.22.1" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "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, + "dependencies": { + "debug": "^3.2.7", + "find-up": "^2.1.0", + "pkg-dir": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/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, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "dependencies": { + "eslint-rule-composer": "^0.3.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": ">=4.0.0" + } + }, + "node_modules/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, + "dependencies": { + "htmlparser2": "^7.1.2" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.25.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz", + "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", + "dev": true, + "dependencies": { + "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.1", + "has": "^1.0.3", + "is-core-module": "^2.8.0", + "is-glob": "^4.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.5", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.11.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/eslint-plugin-lit": { + "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, + "dependencies": { + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "requireindex": "^1.2.0" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "eslint": ">= 5" + } + }, + "node_modules/eslint-plugin-lit-a11y": { + "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, + "dependencies": { + "aria-query": "^4.2.2", + "axe-core": "^4.3.3", + "axobject-query": "^2.2.0", + "dom5": "^3.0.1", + "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.1", + "requireindex": "~1.2.0" + }, + "peerDependencies": { + "eslint": ">= 5" + } + }, + "node_modules/eslint-plugin-lit-a11y/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/eslint-plugin-lit-a11y/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "node_modules/eslint-plugin-no-only-tests": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-2.6.0.tgz", + "integrity": "sha512-T9SmE/g6UV1uZo1oHAqOvL86XWl7Pl2EpRpnLI8g/bkJu+h7XBCB+1LnubRZ2CUQXj805vh4/CYZdnqtVaEo2Q==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint-plugin-tsdoc": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.14.tgz", + "integrity": "sha512-fJ3fnZRsdIoBZgzkQjv8vAj6NeeOoFkTfgosj6mKsFjX70QV256sA/wq+y/R2+OL4L8E79VVaVWrPeZnKNe8Ng==", + "dev": true, + "dependencies": { + "@microsoft/tsdoc": "0.13.2", + "@microsoft/tsdoc-config": "0.15.2" + } + }, + "node_modules/eslint-plugin-wc": { + "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, + "dependencies": { + "is-valid-element-name": "^1.0.0", + "js-levenshtein-esm": "^1.2.0" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint-rule-extender": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/eslint-rule-extender/-/eslint-rule-extender-0.0.1.tgz", + "integrity": "sha512-F0j1Twve3lamL3J0rRSVAynlp58sDPG39JFcQrM+u9Na7PmCgiPHNODh6YE9mduaGcsn3NBqbf6LZRj0cLr8Ng==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kaicataldo" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-check": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.20.0.tgz", + "integrity": "sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog==", + "dev": true, + "dependencies": { + "pure-rand": "^5.0.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fdir": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-5.1.0.tgz", + "integrity": "sha512-IgTtZwL52tx2wqWeuGDzXYTnNsEjNLahZpJw30hCQDyVnoHXwY5acNDnjGImTTL1R0z1PCyLw20VAbE5qLic3Q==", + "dev": true + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-cache-dir/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "dependencies": { + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "dependencies": { + "null-check": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/gauge/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/generic-names": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz", + "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==", + "dev": true, + "dependencies": { + "loader-utils": "^1.1.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "node_modules/get-pkg-repo": { + "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, + "dependencies": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "get-pkg-repo": "src/cli.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-pkg-repo/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/get-pkg-repo/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/get-pkg-repo/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/get-pkg-repo/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/get-pkg-repo/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/get-pkg-repo/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/git-raw-commits": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", + "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", + "dev": true, + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", + "dev": true, + "dependencies": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/git-semver-tags": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", + "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", + "dev": true, + "dependencies": { + "meow": "^8.0.0", + "semver": "^6.0.0" + }, + "bin": { + "git-semver-tags": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/git-semver-tags/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", + "dev": true, + "dependencies": { + "ini": "^1.3.2" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "dependencies": { + "ini": "^1.3.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/har-validator/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/har-validator/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/http-assert": { + "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, + "dependencies": { + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/http2-wrapper/node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/httpie": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/httpie/-/httpie-1.1.2.tgz", + "integrity": "sha512-VQ82oXG95oY1fQw/XecHuvcFBA+lZQ9Vwj1RfLcO8a7HpDd4cc2ukwpJt+TUlFaLUAzZErylxWu6wclJ1rUhUQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/husky": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflation": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", + "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/intersection-observer": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/intersection-observer/-/intersection-observer-0.7.0.tgz", + "integrity": "sha512-Id0Fij0HsB/vKWGeBe9PxeY45ttRiBmhFyyt/geBdDHBYNctMRTE3dC1U3ujzz3lap+hVXlEcVaB56kZP/eEUg==", + "dev": true + }, + "node_modules/intl-list-format": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/intl-list-format/-/intl-list-format-1.0.3.tgz", + "integrity": "sha512-VNF1Mh0K1xALXkz/5QsK1gfKRvEQO/jWaniTGAzQvbzGr5uyGDskQrRjnf6Qnbc9/JRbNE8BQtTg6iWuFrZorw==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "dependencies": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-installed-globally/node_modules/global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "dev": true, + "dependencies": { + "ini": "1.3.7" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-installed-globally/node_modules/ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-valid-element-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-element-name/-/is-valid-element-name-1.0.0.tgz", + "integrity": "sha1-Ju8/12zfHxItEFQG4y01sN4AWYE=", + "dev": true, + "dependencies": { + "is-potential-custom-element-name": "^1.0.0" + } + }, + "node_modules/is-valid-identifier": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-valid-identifier/-/is-valid-identifier-2.0.2.tgz", + "integrity": "sha512-mpS5EGqXOwzXtKAg6I44jIAqeBfntFLxpAth1rrKbxtKyI6LPktyDYpHBI+tHlduhhX/SF26mFXmxQu995QVqg==", + "dev": true, + "dependencies": { + "assert": "^1.4.1" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", + "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.1.tgz", + "integrity": "sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", + "dev": true + }, + "node_modules/js-levenshtein-esm": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/js-levenshtein-esm/-/js-levenshtein-esm-1.2.0.tgz", + "integrity": "sha512-fzreKVq1eD7eGcQr7MtRpQH94f8gIfhdrc7yeih38xh684TNMK9v5aAu2wxfIRMk/GpAJRrzcirMAPIaSDaByQ==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json-stringify-nice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsonschema": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.11.tgz", + "integrity": "sha512-XNZHs3N1IOa3lPKm//npxMhOdaoPw+MvEV0NIgxcER83GTJcG13rehtWmpBCfEt8DrtYwIkMTs8bdXoYs4fvnQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/just-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-3.1.1.tgz", + "integrity": "sha512-sdMWKjRq8qWZEjDcVA6llnUT8RDEBIfOiGpYFPYa9u+2c39JCsejktSP7mj5eRid5EIvTzIpQ2kDOCw1Nq9BjQ==", + "dev": true + }, + "node_modules/just-diff-apply": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-3.1.2.tgz", + "integrity": "sha512-TCa7ZdxCeq6q3Rgms2JCRHTCfWAETPZ8SzYUbkYF6KR3I03sN29DaOIC+xyWboIcMvjAsD5iG2u/RWzHD8XpgQ==", + "dev": true + }, + "node_modules/just-extend": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "dev": true + }, + "node_modules/keygrip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "dev": true, + "dependencies": { + "tsscmp": "1.0.6" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/keyv": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", + "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", + "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/koa": { + "version": "2.13.4", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.4.tgz", + "integrity": "sha512-43zkIKubNbnrULWlHdN5h1g3SEKXOEzoAlRsHOTFpnlDu8JlAOZSMJBLULusuXRequboiwJcj5vtYXKB3k7+2g==", + "dev": true, + "dependencies": { + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.8.0", + "debug": "^4.3.2", + "delegates": "^1.0.0", + "depd": "^2.0.0", + "destroy": "^1.0.4", + "encodeurl": "^1.0.2", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.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" + }, + "engines": { + "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" + } + }, + "node_modules/koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", + "dev": true + }, + "node_modules/koa-compress": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/koa-compress/-/koa-compress-3.1.0.tgz", + "integrity": "sha512-0m24/yS/GbhWI+g9FqtvStY+yJwTObwoxOvPok6itVjRen7PBWkjsJ8pre76m+99YybXLKhOJ62mJ268qyBFMQ==", + "dev": true, + "dependencies": { + "bytes": "^3.0.0", + "compressible": "^2.0.0", + "koa-is-json": "^1.0.0", + "statuses": "^1.0.0" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/koa-convert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", + "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", + "dev": true, + "dependencies": { + "co": "^4.6.0", + "koa-compose": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/koa-etag": { + "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, + "dependencies": { + "etag": "^1.8.1" + } + }, + "node_modules/koa-is-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", + "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=", + "dev": true + }, + "node_modules/koa-send": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", + "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "http-errors": "^1.7.3", + "resolve-path": "^1.4.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/koa-static": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", + "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", + "dev": true, + "dependencies": { + "debug": "^3.1.0", + "koa-send": "^5.0.0" + }, + "engines": { + "node": ">= 7.6.0" + } + }, + "node_modules/koa-static/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lighthouse-logger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", + "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", + "dev": true, + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lint-staged": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.2.6.tgz", + "integrity": "sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg==", + "dev": true, + "dependencies": { + "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.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", + "supports-color": "8.1.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/lint-staged/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/listr2": { + "version": "3.13.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.13.5.tgz", + "integrity": "sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.4.0", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "node_modules/listr2/node_modules/rxjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", + "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", + "dev": true, + "dependencies": { + "tslib": "~2.1.0" + } + }, + "node_modules/listr2/node_modules/tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + }, + "node_modules/lit-element": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-2.5.1.tgz", + "integrity": "sha512-ogu7PiJTA33bEK0xGu1dmaX5vhcRjBXCFexPja0e7P7jqLhTpNKYRPmE+GmiCaRVAbiQKGkUgkh/i6+bh++dPQ==", + "dependencies": { + "lit-html": "^1.1.1" + } + }, + "node_modules/lit-html": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-1.4.1.tgz", + "integrity": "sha512-B9btcSgPYb1q4oSOb/PrOT6Z/H+r6xuNzfH4lFli/AWhYwdtrgQkQWBbIc6mdnf6E2IL3gDXdkkqNktpU0OZQA==" + }, + "node_modules/lit-translate": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/lit-translate/-/lit-translate-1.2.1.tgz", + "integrity": "sha512-jykKpkdRX0lx3JYq9jUMzVs02ISClOe2wxyPHat5wVKPyBRJQxgXxLxj1AbpuLNBCDZKEysMBpeJ1z0Y35Bk2Q==", + "dependencies": { + "lit-html": "^1.2.1" + } + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "node_modules/lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/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 + }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/marked": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.10.tgz", + "integrity": "sha512-+QvuFj0nGgO970fySghXGmuw+Fd0gD2x3+MqCWLIPf5oxdv1Ka6b2q+z9RP01P/IaKPMEramy+7cNy/Lw8c3hw==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/marky": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.2.tgz", + "integrity": "sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "dependencies": { + "@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": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/meriyah": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/meriyah/-/meriyah-3.1.6.tgz", + "integrity": "sha512-JDOSi6DIItDc33U5N52UdV6P8v+gn+fqZKfbAfHzdWApRQyQWdcvxPvAr9t01bI2rBxGvSrKRQSCg3SkZC1qeg==", + "dev": true, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minipass": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", + "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "node_modules/mkdirp-infer-owner": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", + "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-infer-owner/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", + "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", + "dev": true, + "dependencies": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "2.2.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.4", + "ms": "2.1.1", + "node-environment-flags": "1.0.5", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/mocha/node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/mocha/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/mocha/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/mocha/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/mocha/node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/mocha/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/mocha/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/mkdirp": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/mocha/node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/mocha/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/mocha/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/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 + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/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==" + }, + "node_modules/nise": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.0.tgz", + "integrity": "sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0", + "@sinonjs/fake-timers": "^7.0.4", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" + } + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-environment-flags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", + "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node_modules/node-environment-flags/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-gyp": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "dev": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "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, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "node_modules/npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-packlist": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", + "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", + "dev": true, + "dependencies": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "node_modules/npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/only": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=", + "dev": true + }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json/node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json/node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json/node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/package-json/node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "node_modules/package-json/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json/node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/package-json/node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "node_modules/package-json/node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/package-json/node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/package-json/node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json/node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/pacote": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", + "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", + "dev": true, + "dependencies": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/panzoom": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/panzoom/-/panzoom-9.4.2.tgz", + "integrity": "sha512-sQLr0t6EmNFXpZHag0HQVtOKqF9xjF7iZdgWg3Ss1o7uh2QZLvcrz7S0Cl8M0d2TkPZ69JfPJdknXN3I0e/2aQ==", + "dependencies": { + "amator": "^1.1.0", + "ngraph.events": "^1.2.1", + "wheel": "^1.0.0" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-conflict-json": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-1.1.1.tgz", + "integrity": "sha512-4gySviBiW5TRl7XHvp1agcS7SOe0KZOjC//71dzZVWJrY9hCrgtvl5v3SyIxCZ4fZF47TxD9nfzmxcx76xmbUw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "just-diff": "^3.0.1", + "just-diff-apply": "^3.0.0" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dev": true, + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/periscopic": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-2.0.3.tgz", + "integrity": "sha512-FuCZe61mWxQOJAQFEfmt9FjzebRlcpFz8sFPbyaCKtdusPkMEbA9ey0eARnRav5zAhmXznhaQkKGFAPn7X9NUw==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.2", + "is-reference": "^1.1.4" + } + }, + "node_modules/periscopic/node_modules/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 + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/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, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "node_modules/polyfills-loader": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/polyfills-loader/-/polyfills-loader-1.7.6.tgz", + "integrity": "sha512-AiLIgmGFmzcvsqewyKsqWb7H8CnWNTSQBoM0u+Mauzmp0DsjObXmnZdeqvTn0HNwc1wYHHTOta82WjSjG341eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.1", + "@open-wc/building-utils": "^2.18.3", + "@webcomponents/webcomponentsjs": "^2.4.0", + "abortcontroller-polyfill": "^1.4.0", + "core-js-bundle": "^3.6.0", + "deepmerge": "^4.2.2", + "dynamic-import-polyfill": "^0.1.1", + "es-module-shims": "^0.4.6", + "intersection-observer": "^0.7.0", + "parse5": "^5.1.1", + "regenerator-runtime": "^0.13.3", + "resize-observer-polyfill": "^1.5.1", + "systemjs": "^6.3.1", + "terser": "^4.6.7", + "whatwg-fetch": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/polyfills-loader/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/portfinder/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/postcss": { + "version": "8.4.4", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.4.tgz", + "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==", + "dev": true, + "dependencies": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-modules": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.2.2.tgz", + "integrity": "sha512-/H08MGEmaalv/OU8j6bUKi/kZr2kqGF6huAW8m9UAgOLWtpFdhA14+gPBoymtqyv+D4MLsmqaF2zvIegdCxJXg==", + "dev": true, + "dependencies": { + "generic-names": "^2.0.1", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proc-log": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz", + "integrity": "sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg==", + "dev": true + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-all-reject-late": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", + "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/promise-call-limit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz", + "integrity": "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/puppeteer-core": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-13.7.0.tgz", + "integrity": "sha512-rXja4vcnAzFAP1OVLq/5dWNfwBGuzcOARJ6qGV7oAZhnLmVRU8G5MsdeQEAOy332ZhkIOnn9jp15R89LKHyp2Q==", + "dev": true, + "dependencies": { + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.981744", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "pkg-dir": "4.2.0", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.5.0" + }, + "engines": { + "node": ">=10.18.1" + } + }, + "node_modules/puppeteer-core/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/puppeteer-core/node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/pure-rand": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.0.tgz", + "integrity": "sha512-lD2/y78q+7HqBx2SaT6OT4UcwtvXNRfEpzYEzl0EQ+9gZq2Qi3fa0HDnYPeqQwhlHJFBUhT7AO3mLU3+8bynHA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", + "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/raw-body": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "dev": true, + "dependencies": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-cmd-shim": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", + "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", + "dev": true + }, + "node_modules/read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/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 + }, + "node_modules/read-pkg/node_modules/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, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "dev": true, + "dependencies": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "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, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", + "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", + "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requireindex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", + "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", + "dev": true, + "engines": { + "node": ">=0.10.5" + } + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "dev": true, + "dependencies": { + "global-dirs": "^0.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-path": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", + "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", + "dev": true, + "dependencies": { + "http-errors": "~1.6.2", + "path-is-absolute": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/resolve-path/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/resolve-path/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/resolve-path/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/resolve-path/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "dev": true, + "dependencies": { + "lowercase-keys": "^2.0.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.60.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.60.2.tgz", + "integrity": "sha512-1Bgjpq61sPjgoZzuiDSGvbI1tD91giZABgjCQBKM5aYLnzjq52GoDuWVwT/cm/MCxCMPU8gqQvkj8doQ5C8Oqw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-polyfill-node": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.6.2.tgz", + "integrity": "sha512-gMCVuR0zsKq0jdBn8pSXN1Ejsc458k2QsFFvQdbHoM0Pot5hEnck+pBP/FDwFS6uAi77pD3rDTytsaUStsOMlA==", + "dev": true, + "dependencies": { + "@rollup/plugin-inject": "^4.0.0" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/rollup-plugin-terser/node_modules/terser": { + "version": "5.16.5", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.5.tgz", + "integrity": "sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shady-css-scoped-element": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/shady-css-scoped-element/-/shady-css-scoped-element-0.0.2.tgz", + "integrity": "sha512-Dqfl70x6JiwYDujd33ZTbtCK0t52E7+H2swdWQNSTzfsolSa6LJHnTpN4T9OpJJEq4bxuzHRLFO9RBcy/UfrMQ==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shiki": { + "version": "0.9.14", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.14.tgz", + "integrity": "sha512-uLHjjyJdNsMzF9GOF8vlOuZ8BwigiYPraMN5yjC826k8K7Xu90JQcC5GUNrzRibLgT2EOk9597I1IX+jRdA8nw==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "node_modules/sinon": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-11.1.2.tgz", + "integrity": "sha512-59237HChms4kg7/sXhiRcUzdSkKuydDeTiamT/jesUVHshBgL8XAmhgFo0GfK6RruMDM/iRSij1EybmMog9cJw==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": "^7.1.2", + "@sinonjs/samsam": "^6.0.2", + "diff": "^5.0.0", + "nise": "^5.1.0", + "supports-color": "^7.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "node_modules/sinon-chai": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.7.0.tgz", + "integrity": "sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==", + "dev": true, + "peerDependencies": { + "chai": "^4.0.0", + "sinon": ">=4.0.0" + } + }, + "node_modules/sinon/node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/skypack": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/skypack/-/skypack-0.3.2.tgz", + "integrity": "sha512-je1pix0QYER6iHuUGbgcafRJT5TI+EGUIBfzBLMqo3Wi22I2SzB9TVHQqwKCw8pzJMuHqhVTFEHc3Ey+ra25Sw==", + "dev": true, + "dependencies": { + "cacache": "^15.0.0", + "cachedir": "^2.3.0", + "esinstall": "^1.0.0", + "etag": "^1.8.1", + "find-up": "^5.0.0", + "got": "^11.1.4", + "kleur": "^4.1.0", + "mkdirp": "^1.0.3", + "p-queue": "^6.2.1", + "rimraf": "^3.0.0", + "rollup": "^2.23.0", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/skypack/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/skypack/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/skypack/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/skypack/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/snowpack": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/snowpack/-/snowpack-3.8.6.tgz", + "integrity": "sha512-EZ3Y7RtTiPvxnVFTKPfkvi2PKBrprXCvOHKWQQLBkHonf+xdtG51RiNjtrRLJeCjislAlD6OoeGHUxz76ToGHw==", + "dev": true, + "dependencies": { + "@npmcli/arborist": "^2.6.4", + "bufferutil": "^4.0.2", + "cachedir": "^2.3.0", + "cheerio": "1.0.0-rc.10", + "chokidar": "^3.4.0", + "cli-spinners": "^2.5.0", + "compressible": "^2.0.18", + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "default-browser-id": "^2.0.0", + "detect-port": "^1.3.0", + "es-module-lexer": "^0.3.24", + "esbuild": "~0.9.0", + "esinstall": "^1.1.7", + "estree-walker": "^2.0.2", + "etag": "^1.8.1", + "execa": "^5.1.1", + "fdir": "^5.0.0", + "find-cache-dir": "^3.3.1", + "find-up": "^5.0.0", + "glob": "^7.1.7", + "httpie": "^1.1.2", + "is-plain-object": "^5.0.0", + "is-reference": "^1.2.1", + "isbinaryfile": "^4.0.6", + "jsonschema": "~1.2.5", + "kleur": "^4.1.1", + "meriyah": "^3.1.6", + "mime-types": "^2.1.26", + "mkdirp": "^1.0.3", + "npm-run-path": "^4.0.1", + "open": "^8.2.1", + "pacote": "^11.3.4", + "periscopic": "^2.0.3", + "picomatch": "^2.3.0", + "postcss": "^8.3.5", + "postcss-modules": "^4.0.0", + "resolve": "^1.20.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "rollup": "~2.37.1", + "signal-exit": "^3.0.3", + "skypack": "^0.3.2", + "slash": "~3.0.0", + "source-map": "^0.7.3", + "strip-ansi": "^6.0.0", + "strip-comments": "^2.0.1", + "utf-8-validate": "^5.0.3", + "ws": "^7.3.0", + "yargs-parser": "^20.0.0" + }, + "bin": { + "snowpack": "index.bin.js", + "sp": "index.bin.js" + }, + "engines": { + "node": ">=10.19.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/snowpack/node_modules/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 + }, + "node_modules/snowpack/node_modules/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 + }, + "node_modules/snowpack/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/snowpack/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/snowpack/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/snowpack/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/snowpack/node_modules/rollup": { + "version": "2.37.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.37.1.tgz", + "integrity": "sha512-V3ojEeyGeSdrMSuhP3diBb06P+qV4gKQeanbDv+Qh/BZbhdZ7kHV0xAt8Yjk4GFshq/WjO7R4c7DFM20AwTFVQ==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" + } + }, + "node_modules/snowpack/node_modules/rollup/node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/socks": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", + "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "dev": true, + "dependencies": { + "ip": "^1.1.5", + "smart-buffer": "^4.1.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", + "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", + "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/standard-version": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.3.2.tgz", + "integrity": "sha512-u1rfKP4o4ew7Yjbfycv80aNMN2feTiqseAhUhrrx2XtdQGmu7gucpziXe68Z4YfHVqlxVEzo4aUA0Iu3VQOTgQ==", + "deprecated": "standard-version is deprecated. If you're a GitHub user, I recommend https://github.com/googleapis/release-please as an alternative.", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "conventional-changelog": "3.1.24", + "conventional-changelog-config-spec": "2.1.0", + "conventional-changelog-conventionalcommits": "4.6.1", + "conventional-recommended-bump": "6.1.0", + "detect-indent": "^6.0.0", + "detect-newline": "^3.1.0", + "dotgitignore": "^2.1.0", + "figures": "^3.1.0", + "find-up": "^5.0.0", + "fs-access": "^1.0.1", + "git-semver-tags": "^4.0.0", + "semver": "^7.1.1", + "stringify-package": "^1.0.1", + "yargs": "^16.0.0" + }, + "bin": { + "standard-version": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/standard-version/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard-version/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard-version/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/standard-version/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/standard-version/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard-version/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard-version/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard-version/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard-version/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard-version/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard-version/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stringify-object/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stringify-package": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", + "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", + "dev": true + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/systemjs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-6.11.0.tgz", + "integrity": "sha512-7YPIY44j+BoY+E6cGBSw0oCU8SNTTIHKZgftcBdwWkDzs/M86Fdlr21FrzAyph7Zo8r3CFGscyFe4rrBtixrBg==", + "dev": true + }, + "node_modules/table": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.5.tgz", + "integrity": "sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/terser/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/treeverse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-1.0.4.tgz", + "integrity": "sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g==", + "dev": true + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "dependencies": { + "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" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "node_modules/ts-simple-type": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/ts-simple-type/-/ts-simple-type-1.0.7.tgz", + "integrity": "sha512-zKmsCQs4dZaeSKjEA7pLFDv7FHHqAFLPd0Mr//OIJvu8M+4p4bgSFJwZSEBEg3ec9W7RzRz1vi8giiX0+mheBQ==", + "dev": true + }, + "node_modules/tsconfig-paths": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "node_modules/tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "dev": true, + "engines": { + "node": ">=0.6.x" + } + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typedoc": { + "version": "0.21.10", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.21.10.tgz", + "integrity": "sha512-Y0wYIehkjkPfsp3pv86fp3WPHUcOf8pnQUDLwG1PqSccUSqdsv7Pz1Gd5WrTJvXQB2wO1mKlZ8qW8qMiopKyjA==", + "dev": true, + "dependencies": { + "glob": "^7.1.7", + "handlebars": "^4.7.7", + "lunr": "^2.3.9", + "marked": "^4.0.10", + "minimatch": "^3.0.0", + "progress": "^2.0.3", + "shiki": "^0.9.8", + "typedoc-default-themes": "^0.12.10" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 12.10.0" + }, + "peerDependencies": { + "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x" + } + }, + "node_modules/typedoc-default-themes": { + "version": "0.12.10", + "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.12.10.tgz", + "integrity": "sha512-fIS001cAYHkyQPidWXmHuhs8usjP5XVJjWB8oZGqkTowZaz3v7g3KDZeeqE82FBrmkAnIBOY3jgy7lnPnqATbA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/typedoc-plugin-markdown": { + "version": "3.10.4", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.10.4.tgz", + "integrity": "sha512-if9w7S9fXLg73AYi/EoRSEhTOZlg3I8mIP8YEmvzSE33VrNXC9/hA0nVcLEwFVJeQY7ay6z67I6kW0KIv7LjeA==", + "dev": true, + "dependencies": { + "handlebars": "^4.7.7" + }, + "peerDependencies": { + "typedoc": ">=0.21.2" + } + }, + "node_modules/typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.34.tgz", + "integrity": "sha512-K9mwJm/DaB6mRLZfw6q8IMXipcrmuT6yfhYmwhAkuh+81sChuYstYA+znlgaflUPaYUa3odxKPKGw6Vw/lANew==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/uglify-js": { + "version": "3.14.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.4.tgz", + "integrity": "sha512-AbiSR44J0GoCeV81+oxcy/jDOElO2Bx3d0MfQCUShq7JRXaM4KtQopZsq2vFv8bCq2yMaGrw1FgygUd03RyRDA==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "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, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/untildify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", + "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", + "dev": true, + "dependencies": { + "os-homedir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dev": true, + "dependencies": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/useragent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "dev": true, + "dependencies": { + "lru-cache": "4.1.x", + "tmp": "0.0.x" + } + }, + "node_modules/useragent/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/useragent/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "node_modules/utf-8-validate": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", + "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", + "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/vm2": { + "version": "3.9.14", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.14.tgz", + "integrity": "sha512-HgvPHYHeQy8+QhzlFryvSteA4uQLBCOub02mgqdR+0bN/akRZ48TGB1v0aCv7ksyc0HXx16AZtMHKS38alc6TA==", + "dev": true, + "dependencies": { + "acorn": "^8.7.0", + "acorn-walk": "^8.2.0" + }, + "bin": { + "vm2": "bin/vm2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/vm2/node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/vscode-oniguruma": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz", + "integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "dev": true + }, + "node_modules/walk-up-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", + "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", + "dev": true + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-component-analyzer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/web-component-analyzer/-/web-component-analyzer-1.1.6.tgz", + "integrity": "sha512-1PyBkb/jijDEVE+Pnk3DTmVHD8takipdvAwvZv1V8jIidsSIJ5nhN87Gs+4dpEb1vw48yp8dnbZKkvMYJ+C0VQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.2", + "ts-simple-type": "~1.0.5", + "typescript": "^3.8.3", + "yargs": "^15.3.1" + }, + "bin": { + "wca": "cli.js", + "web-component-analyzer": "cli.js" + } + }, + "node_modules/web-component-analyzer/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/web-component-analyzer/node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/web-component-analyzer/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/web-component-analyzer/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/web-component-analyzer/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/web-component-analyzer/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/wheel": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wheel/-/wheel-1.0.0.tgz", + "integrity": "sha512-XiCMHibOiqalCQ+BaNSwRoZ9FDTAvOsXxGHXChBugewDj7HC8VBIER71dEOiRH1fSdLbRCQzngKTSiZ06ZQzeA==" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wicg-inert": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/wicg-inert/-/wicg-inert-3.1.1.tgz", + "integrity": "sha512-PhBaNh8ur9Xm4Ggy4umelwNIP6pPP1bv3EaWaKqfb/QNme2rdLjm7wIInvV4WhxVHhzA4Spgw9qNSqWtB/ca2A==" + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/workbox-background-sync": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz", + "integrity": "sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz", + "integrity": "sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-build": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.4.tgz", + "integrity": "sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==", + "dev": true, + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.5.4", + "workbox-broadcast-update": "6.5.4", + "workbox-cacheable-response": "6.5.4", + "workbox-core": "6.5.4", + "workbox-expiration": "6.5.4", + "workbox-google-analytics": "6.5.4", + "workbox-navigation-preload": "6.5.4", + "workbox-precaching": "6.5.4", + "workbox-range-requests": "6.5.4", + "workbox-recipes": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4", + "workbox-streams": "6.5.4", + "workbox-sw": "6.5.4", + "workbox-window": "6.5.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz", + "integrity": "sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-cli": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-cli/-/workbox-cli-6.5.4.tgz", + "integrity": "sha512-+Cc0jYh25MofhCROZqfQkpYSAGvykyrUVekuuPaLFbJ8qxX/zzX8hRRpglfwxDwokAjz8S20oEph4s+MyQc+Yw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "chokidar": "^3.5.2", + "common-tags": "^1.8.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "inquirer": "^7.3.3", + "meow": "^7.1.0", + "ora": "^5.0.0", + "pretty-bytes": "^5.3.0", + "stringify-object": "^3.3.0", + "upath": "^1.2.0", + "update-notifier": "^4.1.0", + "workbox-build": "6.5.4" + }, + "bin": { + "workbox": "build/bin.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-cli/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-cli/node_modules/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 + }, + "node_modules/workbox-cli/node_modules/meow": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz", + "integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==", + "dev": true, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/workbox-cli/node_modules/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, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/workbox-cli/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/workbox-cli/node_modules/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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/workbox-cli/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/workbox-core": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.4.tgz", + "integrity": "sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==", + "dev": true + }, + "node_modules/workbox-expiration": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.4.tgz", + "integrity": "sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz", + "integrity": "sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==", + "dev": true, + "dependencies": { + "workbox-background-sync": "6.5.4", + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz", + "integrity": "sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-precaching": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.4.tgz", + "integrity": "sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz", + "integrity": "sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-recipes": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.4.tgz", + "integrity": "sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==", + "dev": true, + "dependencies": { + "workbox-cacheable-response": "6.5.4", + "workbox-core": "6.5.4", + "workbox-expiration": "6.5.4", + "workbox-precaching": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "node_modules/workbox-routing": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.4.tgz", + "integrity": "sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-strategies": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.4.tgz", + "integrity": "sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-streams": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.4.tgz", + "integrity": "sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4" + } + }, + "node_modules/workbox-sw": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.4.tgz", + "integrity": "sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==", + "dev": true + }, + "node_modules/workbox-window": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.4.tgz", + "integrity": "sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==", + "dev": true, + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.5.4" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", + "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz", + "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "dependencies": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs-unparser/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/yargs-unparser/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/yargs-unparser/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/yargs-unparser/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/yargs-unparser/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs-unparser/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs-unparser/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yargs-unparser/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-unparser/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/ylru": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", + "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dev": true, + "requires": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + } + }, + "@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.0" + } + }, + "@babel/compat-data": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "dev": true + }, + "@babel/core": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "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/eslint-parser": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz", + "integrity": "sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ==", + "dev": true, + "peer": true, + "requires": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true + } + } + }, + "@babel/eslint-plugin": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.18.10.tgz", + "integrity": "sha512-iV1OZj/7eg4wZIcsVEkXS3MUWdhmpLsu2h+9Zr2ppywKWdCRs6VfjxbRzmHHYeurTizrrnaJ9ZkbO8KOv4lauQ==", + "dev": true, + "peer": true, + "requires": { + "eslint-rule-composer": "^0.3.0" + } + }, + "@babel/generator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0", + "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.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", + "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz", + "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", + "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz", + "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz", + "integrity": "sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz", + "integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz", + "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-function-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz", + "integrity": "sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-wrap-function": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-validator-identifier": { + "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": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz", + "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helpers": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", + "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", + "dev": true, + "requires": { + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.3", + "@babel/types": "^7.16.0" + } + }, + "@babel/highlight": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", + "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz", + "integrity": "sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz", + "integrity": "sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz", + "integrity": "sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.16.4", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", + "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz", + "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz", + "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz", + "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz", + "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz", + "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz", + "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz", + "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz", + "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz", + "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz", + "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz", + "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz", + "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz", + "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz", + "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz", + "integrity": "sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.16.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz", + "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz", + "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz", + "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz", + "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz", + "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz", + "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz", + "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz", + "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz", + "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz", + "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz", + "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz", + "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz", + "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz", + "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.16.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz", + "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.15.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz", + "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz", + "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz", + "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz", + "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.16.0" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz", + "integrity": "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz", + "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz", + "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz", + "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz", + "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz", + "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz", + "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz", + "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz", + "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz", + "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz", + "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/preset-env": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz", + "integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-compilation-targets": "^7.16.3", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.2", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-async-generator-functions": "^7.16.4", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-class-static-block": "^7.16.0", + "@babel/plugin-proposal-dynamic-import": "^7.16.0", + "@babel/plugin-proposal-export-namespace-from": "^7.16.0", + "@babel/plugin-proposal-json-strings": "^7.16.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-object-rest-spread": "^7.16.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-proposal-private-property-in-object": "^7.16.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.0", + "@babel/plugin-transform-async-to-generator": "^7.16.0", + "@babel/plugin-transform-block-scoped-functions": "^7.16.0", + "@babel/plugin-transform-block-scoping": "^7.16.0", + "@babel/plugin-transform-classes": "^7.16.0", + "@babel/plugin-transform-computed-properties": "^7.16.0", + "@babel/plugin-transform-destructuring": "^7.16.0", + "@babel/plugin-transform-dotall-regex": "^7.16.0", + "@babel/plugin-transform-duplicate-keys": "^7.16.0", + "@babel/plugin-transform-exponentiation-operator": "^7.16.0", + "@babel/plugin-transform-for-of": "^7.16.0", + "@babel/plugin-transform-function-name": "^7.16.0", + "@babel/plugin-transform-literals": "^7.16.0", + "@babel/plugin-transform-member-expression-literals": "^7.16.0", + "@babel/plugin-transform-modules-amd": "^7.16.0", + "@babel/plugin-transform-modules-commonjs": "^7.16.0", + "@babel/plugin-transform-modules-systemjs": "^7.16.0", + "@babel/plugin-transform-modules-umd": "^7.16.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.0", + "@babel/plugin-transform-new-target": "^7.16.0", + "@babel/plugin-transform-object-super": "^7.16.0", + "@babel/plugin-transform-parameters": "^7.16.3", + "@babel/plugin-transform-property-literals": "^7.16.0", + "@babel/plugin-transform-regenerator": "^7.16.0", + "@babel/plugin-transform-reserved-words": "^7.16.0", + "@babel/plugin-transform-shorthand-properties": "^7.16.0", + "@babel/plugin-transform-spread": "^7.16.0", + "@babel/plugin-transform-sticky-regex": "^7.16.0", + "@babel/plugin-transform-template-literals": "^7.16.0", + "@babel/plugin-transform-typeof-symbol": "^7.16.0", + "@babel/plugin-transform-unicode-escapes": "^7.16.0", + "@babel/plugin-transform-unicode-regex": "^7.16.0", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.0", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.4.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.19.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", + "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.3.tgz", + "integrity": "sha512-IAdDC7T0+wEB4y2gbIL0uOXEYpiZEeuFUTVbdGq+UwCcF35T/tS8KrmMomEwEc5wBbyfH3PJVpTSUqrhPDXFcQ==", + "dev": true, + "requires": { + "core-js-pure": "^3.19.0", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/traverse": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", + "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.3", + "@babel/types": "^7.16.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "to-fast-properties": "^2.0.0" + } + }, + "@commitlint/cli": { + "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.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", + "yargs": "^17.0.0" + } + }, + "@commitlint/config-conventional": { + "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.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-13.2.0.tgz", + "integrity": "sha512-rqhT62RehdLTRBu8OrPHnRCCd/7RmHEE4TiTlT4BLlr5ls5jlZhecOQWJ8np872uCNirrJ5NFjnjYYdbkNoW9Q==", + "dev": true, + "requires": { + "@commitlint/types": "^13.2.0", + "lodash": "^4.17.19" + } + }, + "@commitlint/execute-rule": { + "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.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-13.2.0.tgz", + "integrity": "sha512-yNBQJe6YFhM1pJAta4LvzQxccSKof6axJH7ALYjuhQqfT8AKlad7Y/2SuJ07ioyreNIqwOTuF2UfU8yJ7JzEIQ==", + "dev": true, + "requires": { + "@commitlint/types": "^13.2.0", + "chalk": "^4.0.0" + } + }, + "@commitlint/is-ignored": { + "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.2.0", + "semver": "7.3.5" + } + }, + "@commitlint/lint": { + "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.2.0", + "@commitlint/parse": "^13.2.0", + "@commitlint/rules": "^13.2.0", + "@commitlint/types": "^13.2.0" + } + }, + "@commitlint/load": { + "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.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", + "typescript": "^4.4.3" + }, + "dependencies": { + "typescript": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", + "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", + "dev": true + } + } + }, + "@commitlint/message": { + "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.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.2.0", + "conventional-changelog-angular": "^5.0.11", + "conventional-commits-parser": "^3.2.2" + } + }, + "@commitlint/read": { + "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.2.0", + "@commitlint/types": "^13.2.0", + "fs-extra": "^10.0.0", + "git-raw-commits": "^2.0.0" + } + }, + "@commitlint/resolve-extends": { + "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", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + } + }, + "@commitlint/rules": { + "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.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.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.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" + }, + "dependencies": { + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + } + } + }, + "@commitlint/types": { + "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", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } + } + }, + "@gar/promisify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", + "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true + }, + "@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@koa/cors": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-3.1.0.tgz", + "integrity": "sha512-7ulRC1da/rBa6kj6P4g2aJfnET3z8Uf3SWu60cjbtxTA5g8lxRdX/Bd2P92EagGwwAhANeNw8T8if99rJliR6Q==", + "dev": true, + "requires": { + "vary": "^1.1.2" + } + }, + "@material/animation": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/animation/-/animation-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-R1QbY4fC6RBOoi4Dq/3yuD5OK0ts02WxGt1JXaddsdnO6szZJcfXm2aiCweU1GUpchoah+YzDBJrsmSoqFCKIg==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/base": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/base/-/base-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-bCxGPqFQPh3rfBdqG+UvlrnRPSP2CzHhn0f44NqELY/SkmujIfS30rJOX965IKoD6lGdKWIfi/sAm03I81pZ7g==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/button": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/button/-/button-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-FV44k7WH8d0Z7TjKldEILWXG+bgVz0CplqAYiPiRoxIaGljOq/D7+enuC8tJOUst+zyihVSKyYT69ghWuOKjjg==", + "requires": { + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/touch-target": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/density": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/density/-/density-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-uCOzDL3U8EAOU6A+3lwbys6lB5P24PwEsNoe5YoB7CmkNS+8LLFPdemp4dMdVY2xGlDX+McaUOKJKmFub4cPUA==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/dialog": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/dialog/-/dialog-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-WOK+HN7HQa3mHvNEsEnleDOHCLRAbpFOhGuGyqnSDOCyxTl2DcNCUqsWupDVDpAlLv2OfLdmceyJrejMF+8q7g==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/button": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/icon-button": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/touch-target": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/dom": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/dom/-/dom-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-9XvFE2OuOZizYXF3ptyMcJuN/JHZA4vKq5lPLrIbcTXnd4DzJ7L4JrMcMb75xfjugxj8uaXjdfI62gwHfzP/aw==", + "requires": { + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/drawer": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/drawer/-/drawer-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-a5tGNXOXJglDpq/5blE3ZxbfTnuYU6pnkswWHliSUc71fC1A6XmK51vLz/PCGPGV3qL8JS2sakOVMdssRuLPxA==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/list": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/elevation": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-fuOG6w7Crz+9iibkBAXOQGYBWMCDZSvXA9PlZFW1JFCHUWyzzTMJeJIaHAVMHFzhbVF/rjqF6CliDZyAz4fULg==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/feature-targeting": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-e72VDSIMrwF5aX4rkQcO1AHewX/ydWOujFtMBk4QD/asyDPKBv+bKwO6f/msM+Wqen8I+DbHC0PH/2K15gQ3pQ==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/floating-label": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-MZIVki9uD6JMyfQ6v5FIgt2WEZQ3fOCpoOiE8c9cHuNiawVJc3pmoA5wT/38hJs3iMCx86D1jL1vK9UdyIdF7A==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/form-field": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/form-field/-/form-field-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-wYNyh1RMqEviuWcredWYx8ENEjR1GYdQu/NE9SKlfK7zKsFxF7szwHDd/3cZd7BSYVJUeylveDW+KgXQaW0YpQ==", + "requires": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/icon-button": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/icon-button/-/icon-button-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-2cKO9FIEYwQqd6qlvuC2IbZQ3m8xvw690sx+H/+1UFs17TY/STDfJRj1p5qf+MnIqaiz5jsoxQemuUkcej+uBw==", + "requires": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/touch-target": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/line-ripple": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-9LL/d3jWNesupmwvZtNbV2B1rc1i5BHatFgVt62B1xvfaViRL7EyS0K/+kv9SPWU6nqPLfdj33vOMukn2zIgAg==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/linear-progress": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/linear-progress/-/linear-progress-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-SuEJPdtMbY9hN7X8s9Y8MzVfnmQy32gi4cSIv3r3aL5wmfO29Dg5Gw8OkggEuVjy0QKTXSN9N74WdCdpQ5rUPw==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/progress-indicator": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/list": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/list/-/list-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-Vai+ggNyDBuWM0ihBs3ELGEKCdRmFoTFEhfcZ321VEI2YE8EY6eW1tvazzBfSzpLZkrqcn2QkqD6UpQBzkp4AA==", + "requires": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/menu": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/menu/-/menu-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-8JMFM/QdIC+CRDf79uSe5b4/kCF+3Re90OYlCVaT8LyfYGzYNtBQ8LPKaWlmS2fRN0eIBd1faoUGO0bvslulhg==", + "requires": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/list": "12.0.0-canary.22d29cbb4.0", + "@material/menu-surface": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/menu-surface": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-kvfewRPo4sJtGzBK/T94jjRYnnIaQbC5xqQ+AmGZHGUBsV713cVE1IWVSm0d+7MbERsqKMG9/JZik2Um3YZetQ==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/mwc-base": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-base/-/mwc-base-0.22.1.tgz", + "integrity": "sha512-KtQf4lQUoTQuetfhfRbVJhsXVcpX74LP4JI/cLmx+SGbpG+pXXWf6VI2MvZY2UoHVEkldqPHndeuqctBoY7vgg==", + "requires": { + "@material/base": "=12.0.0-canary.22d29cbb4.0", + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-button": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-button/-/mwc-button-0.22.1.tgz", + "integrity": "sha512-Z+NOM+d7QkmIOGbVT7BA/rzLJMXGaxC4Bp+dXcm3ESu6ohPBtG878IyZGSGiMXXDtmAKgMAIp74z4gE/Y0j1pA==", + "requires": { + "@material/mwc-icon": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-checkbox": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-checkbox/-/mwc-checkbox-0.22.1.tgz", + "integrity": "sha512-JfUEVWAos/sscPH1k9oUKhjtCbTuU4rl7GgKcenCF6EnxTaXbzxGJKPz28BUS5I14JM7vHNUwfqTC+M/87tNxg==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-dialog": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-dialog/-/mwc-dialog-0.22.1.tgz", + "integrity": "sha512-NHHtsled57N2EjDLelEN5YeJSpW/PYxayA+d2B2zpQPbhqhl//VKxJ9fA6CPm1uc+Cvp2G7lbZ2oUUSQivu+Aw==", + "requires": { + "@material/dialog": "=12.0.0-canary.22d29cbb4.0", + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-button": "^0.22.1", + "blocking-elements": "^0.1.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1", + "wicg-inert": "^3.0.0" + } + }, + "@material/mwc-drawer": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-drawer/-/mwc-drawer-0.22.1.tgz", + "integrity": "sha512-klwo4VMIIeV4UY+0t4HJ5/2Z8hUjsPHoleEFamRf97yVgPnmCHHaXhe7fjq8srxgkXK81PzwA7PFGBofS248ag==", + "requires": { + "@material/drawer": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "blocking-elements": "^0.1.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1", + "wicg-inert": "^3.0.0" + } + }, + "@material/mwc-fab": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-fab/-/mwc-fab-0.22.1.tgz", + "integrity": "sha512-KFzZFFr/Nq3bJ0JJyEy7SHsvVLhoqMCTELEjcy2s4fZYT1mLUmHK+Iip1vuKP2I96Yvnym4wkFEcwz/zAMCWbA==", + "requires": { + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-floating-label": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-floating-label/-/mwc-floating-label-0.22.1.tgz", + "integrity": "sha512-BkFt9WL8RE05JESv73egh7XUsmXALL78u1ev98T579SER3kwfIepQhXTvAAnFRHFa7QjT8qa/U6RmsvHe1zYbg==", + "requires": { + "@material/floating-label": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-formfield": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-formfield/-/mwc-formfield-0.22.1.tgz", + "integrity": "sha512-jk8YyX1STjh+HCQOjlEmtr+kVG8Nlkemh9GoVNkJoIH6k7n+WgYcVXoJtfGWJFBkO8kfHziRVeLRPGP8Nt8ErA==", + "requires": { + "@material/form-field": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-icon": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-icon/-/mwc-icon-0.22.1.tgz", + "integrity": "sha512-LX4MUThlYEBfpTr1O53J27KbzFhPbe2dBGouY9piztCI3FObbRVQI+LXFlXJm6KU0BzemaQfz105ZAuLlPAN4g==", + "requires": { + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-icon-button": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-icon-button/-/mwc-icon-button-0.22.1.tgz", + "integrity": "sha512-UHwWwzn9LrAKFmQLuKSMQZe1m+X0Xi//xAhLiIBOHaXyEH3QxmKr7pR82e8HQPc42+jUAxKUFmohMrppG6Dmcg==", + "requires": { + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-icon-button-toggle": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-icon-button-toggle/-/mwc-icon-button-toggle-0.22.1.tgz", + "integrity": "sha512-4r2Hvmo8qhYfEmWNUPvXxmBY0PTdN3JIFvn7d8WPukPgVSCfhh8o4MbxySoHcuo81A+2K/eMRAiLNY7Y8O5Aew==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-icon-button": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-line-ripple": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-line-ripple/-/mwc-line-ripple-0.22.1.tgz", + "integrity": "sha512-Wx2BHD+/z4Fm8TXyiv59UVeNAirunTfR3uCEjGMU/R7mXUwjpjOhY5bNYGUcP9VyMGG5CkLovc8XX96/iKs1ag==", + "requires": { + "@material/line-ripple": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-linear-progress": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-linear-progress/-/mwc-linear-progress-0.22.1.tgz", + "integrity": "sha512-GqqUDomF1nZh6cN0Dgz41vphfvDR17+vdtYk1O5YU9ajW/yd+9SBqwbjfqo4g/jmCpJvMeKnBDZo3Hbc8KnK7g==", + "requires": { + "@material/linear-progress": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/theme": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-list": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-list/-/mwc-list-0.22.1.tgz", + "integrity": "sha512-NGfacR/vSHMte7BOrFM7Cafi+tRIeBH8vNFcpP7yjqPkYCXt/9cEw0j1KVtldCRi20V38vkewUKdh2v3DiP5dg==", + "requires": { + "@material/base": "=12.0.0-canary.22d29cbb4.0", + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/list": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-checkbox": "^0.22.1", + "@material/mwc-radio": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-menu": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-menu/-/mwc-menu-0.22.1.tgz", + "integrity": "sha512-fY7dyxv9aIccMqPp0+ihbXfB8g7Khvz7tYhtVMLqb6CgpdXf06a/lW50eN0Mk4GC+mFyN36HKHDP7LMLFfsvlA==", + "requires": { + "@material/menu": "=12.0.0-canary.22d29cbb4.0", + "@material/menu-surface": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-list": "^0.22.1", + "@material/shape": "=12.0.0-canary.22d29cbb4.0", + "@material/theme": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-notched-outline": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-notched-outline/-/mwc-notched-outline-0.22.1.tgz", + "integrity": "sha512-Bi+CKK24/ypgQZech+vUOWPR8hjPxXILf+mt5liVoNXddGITbdFAShFndNb4Ln4Rn3omzvC63enhpYSS4ByRNw==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/notched-outline": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-radio": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-radio/-/mwc-radio-0.22.1.tgz", + "integrity": "sha512-pFVuDl/bSCK7gVXC54Lsm6lMclt8MYk0u4yVsjaEUTeFk0xMK1ZvoXifIkW0IHhAJVmWgGpWX57wSzLrRZbUNw==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "@material/radio": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-ripple": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-ripple/-/mwc-ripple-0.22.1.tgz", + "integrity": "sha512-QQyWWPBZ6veWNbBMWo8WQw0iY9QUjLLANorug8mPHv13ETdhwVUUozeKOY0ZCXWupNlqtap1Gd0IQjv6HVRMjA==", + "requires": { + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/ripple": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-select": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-select/-/mwc-select-0.22.1.tgz", + "integrity": "sha512-P5o2DD48AtEpr+ZqbFlQ04GgSmcbhOTdQEeDBkDAxSsuErXQZgzY1aPCXlaDI0QzQ/gNP/13b4ejLqstVp9SQg==", + "requires": { + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/floating-label": "=12.0.0-canary.22d29cbb4.0", + "@material/line-ripple": "=12.0.0-canary.22d29cbb4.0", + "@material/list": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-floating-label": "^0.22.1", + "@material/mwc-icon": "^0.22.1", + "@material/mwc-line-ripple": "^0.22.1", + "@material/mwc-list": "^0.22.1", + "@material/mwc-menu": "^0.22.1", + "@material/mwc-notched-outline": "^0.22.1", + "@material/select": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-snackbar": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-snackbar/-/mwc-snackbar-0.22.1.tgz", + "integrity": "sha512-4ZTb4Gk/zKJWvvqqKuOFo1NO68DnCgyQlktPdNNTGhCERdxkEQnZz+mkAw+Mfr5tCBizomgaFzd6tuAZCUutyQ==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/snackbar": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-switch": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-switch/-/mwc-switch-0.22.1.tgz", + "integrity": "sha512-KDY3uqT2qTEw6Z9TS91Ucs0LViUcMsP1XHu6ZNhbv9Ai1uK/i8pwVWAIGIX9Cm1iCdjiYGfKm4DZLORDb/rfEQ==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "@material/switch": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-tab": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-tab/-/mwc-tab-0.22.1.tgz", + "integrity": "sha512-sNPE8kRQEH04vEStxiidTjpyuHc+5Wm8+OVU8wrf6ChJa8KUV5bi2blWm6PW4rfQRo2Bs8AarDXv15t4wv3XWg==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-ripple": "^0.22.1", + "@material/mwc-tab-indicator": "^0.22.1", + "@material/tab": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-tab-bar": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-tab-bar/-/mwc-tab-bar-0.22.1.tgz", + "integrity": "sha512-USn9pIMNfz2vPh7w2U55j0EVr82x3odq9VdcDGG5d4jWwzMPjJ9CKMjqgFrlIiPmxieD5zeSW0LauGhwv6ujOg==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-tab": "^0.22.1", + "@material/mwc-tab-scroller": "^0.22.1", + "@material/tab": "=12.0.0-canary.22d29cbb4.0", + "@material/tab-bar": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-tab-indicator": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-tab-indicator/-/mwc-tab-indicator-0.22.1.tgz", + "integrity": "sha512-/Q8vju7DAysqz3Fo+IINaGSeU9BinZbdaSUyRFjfrUWlzJCE6IYYB7zMyc2W+EjaxhjftpL/N3Sw50Xw+pAL+A==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/tab-indicator": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-tab-scroller": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-tab-scroller/-/mwc-tab-scroller-0.22.1.tgz", + "integrity": "sha512-dqAsXS7Nyw61vVb6d11zDg0xuvAYfOyPmz6wLwcXxzSlHOCfkuFu2fcjhssZIlW3DzzzrCw7aZ+T6mHOZcr0dg==", + "requires": { + "@material/dom": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/tab-scroller": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-textarea": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-textarea/-/mwc-textarea-0.22.1.tgz", + "integrity": "sha512-ta5ARYpxaCRvseXTKkp8tFBfJ0oP8FWsE4FymrjV5b+UEAEzAzjcWWolIDyS7DdixSj1ROI5dJHsU/on5lWPjw==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/mwc-textfield": "^0.22.1", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-textfield": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-textfield/-/mwc-textfield-0.22.1.tgz", + "integrity": "sha512-7xLlW2B1wMnCi2JSlOELELPEUda0w6bWpjn4LB4UPi1hAWG8VR+Rn5rR6q4NDav9pad+qA7+PGjNlE32xVUm7g==", + "requires": { + "@material/floating-label": "=12.0.0-canary.22d29cbb4.0", + "@material/line-ripple": "=12.0.0-canary.22d29cbb4.0", + "@material/mwc-base": "^0.22.1", + "@material/mwc-floating-label": "^0.22.1", + "@material/mwc-line-ripple": "^0.22.1", + "@material/mwc-notched-outline": "^0.22.1", + "@material/textfield": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-top-app-bar": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-top-app-bar/-/mwc-top-app-bar-0.22.1.tgz", + "integrity": "sha512-SHQLjMrHRYsJaT0+8rNjkYW9LDi93AsGX+USuCYhVPeMhBUcqVmr09lTCqj3xyJ3JAy43XONPhtXjxlMT1jCNg==", + "requires": { + "@material/mwc-base": "^0.22.1", + "@material/top-app-bar": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "lit-html": "^1.4.1", + "tslib": "^2.0.1" + } + }, + "@material/mwc-top-app-bar-fixed": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@material/mwc-top-app-bar-fixed/-/mwc-top-app-bar-fixed-0.22.1.tgz", + "integrity": "sha512-ZpQGKmqmSHp1izqX1U0S+3E8s5xLSB81cjFlQPFKG6arU6TO8Xqyzd05JPfFHfau5aZeHQuJB0MOGN2QT31UCw==", + "requires": { + "@material/mwc-top-app-bar": "^0.22.1", + "@material/top-app-bar": "=12.0.0-canary.22d29cbb4.0", + "lit-element": "^2.5.1", + "tslib": "^2.0.1" + } + }, + "@material/notched-outline": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-LgVwQri2sI/EnAbSjyyzhifjcBKpYO48oy6HyRg6Cq/ZxOgNv3u/VG4fE3ToyNLe8pMPkfQsn2g8czuZoRYwxg==", + "requires": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/floating-label": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/progress-indicator": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-XnG61vDDUPQWK3obQcPHaTPxEKFfPKo8qtiKxkFnGdzIeezDGj7n9m8gdvzcqed8rGZWCNKYOzodkRfplStpMw==", + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/radio": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/radio/-/radio-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-piGy+6YEtW3odicIImRGnc3uY0iD42IAe4+pnVo36KsfHLm5peYuEc0jrLI4zdmOPYlRxSskIbAAzfMKdwKG1A==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/touch-target": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/ripple": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-IzBtXi4EWx27Hkfd5Zkx/MrZAXJZe0AAQCo37Etl/af0/aJPIOyCOdHQiwoK2FqRH71pmNfUGrUWOeUxFyaSdw==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/rtl": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-R7u7w5U+mvRwsj15tpf/CbALs3FrGVidsTkv8C1uZDK1ae490De8HSe839lcFcXmM8c/PFSx5B3rKyQG2AyraQ==", + "requires": { + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/select": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/select/-/select-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-ROpNqkHkv/ZUWNf4tWxDo/L6P2QwWaNKADSqYpg/XXecAm7NdBX5aDo63VCBPCm57JkAdBWJQB5MRrbkaWLTfA==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/floating-label": "12.0.0-canary.22d29cbb4.0", + "@material/line-ripple": "12.0.0-canary.22d29cbb4.0", + "@material/list": "12.0.0-canary.22d29cbb4.0", + "@material/menu": "12.0.0-canary.22d29cbb4.0", + "@material/menu-surface": "12.0.0-canary.22d29cbb4.0", + "@material/notched-outline": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/shape": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/shape/-/shape-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-yKC+cqdjGYg3sseZ4baNe9OLhBENHwX2SpJGZORZ7ix4/8pxzFG3wO80eZ8LsldzYem9MmtcbRilBZ4rvvxh0A==", + "requires": { + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/snackbar": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/snackbar/-/snackbar-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-NDYR2rYyF2kbQYCec/I0NmAPtnXMBpGYEQ4/m10rAzTP2hsyySZs0cKk54/V3czT+gFz9C9W3zCm1CwgJwL5fA==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/button": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/icon-button": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/switch": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/switch/-/switch-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-kubSphtXl74TC/PAjp67lYi7Ngk0MEKTLzp1ZHiMHElew2Z9/IYHP0pPaQRTkBY0ddIx6hVdHMiMf8qB4zuz2w==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/tab": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/tab/-/tab-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-Tmb+8Dsx7wItbqOW4JHUVIq3I/inM3l/gk6EV/ctNeyz8coPIJL39yN4CcTX+VHsYykF+tK3jz4QSQX0ASfimQ==", + "requires": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/tab-indicator": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/tab-bar": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/tab-bar/-/tab-bar-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-cxGyfONh9tFK2tISHDSAWFfH/uxH/HfTTjuDQIiPkOLmr6oVgGPXP2AdsZ0Z60HJCAedbR9mdWCesEk8w4f8+Q==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/tab": "12.0.0-canary.22d29cbb4.0", + "@material/tab-indicator": "12.0.0-canary.22d29cbb4.0", + "@material/tab-scroller": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/tab-indicator": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/tab-indicator/-/tab-indicator-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-7MeJG5bN7WCyNsjT+7iGci2XuIkwUXA3QRz3La2zKPBxnPkRiz7GUwkpr1b5h6wPpYfCWKyCbixQD9Ufgq3kKA==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/tab-scroller": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/tab-scroller/-/tab-scroller-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-IaFQiwJ/MKhbFvKcGmlAFNHCxXf5THyjefgzav/k0Fu49vzQFA1ZiSTvPU7/d0vV/G2amaba+l5w9TP9/n4KFw==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/tab": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/textfield": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-OJMgS0iniOvnRJa5DWyFqg1VIC77KEdoXern9OQiQphUE1LJ2Kbbwwj0GgyULuxhcUlUSnnisw+J5IfWK7kMUg==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/density": "12.0.0-canary.22d29cbb4.0", + "@material/dom": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/floating-label": "12.0.0-canary.22d29cbb4.0", + "@material/line-ripple": "12.0.0-canary.22d29cbb4.0", + "@material/notched-outline": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/theme": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/theme/-/theme-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-r4xYCgc+CrbvDxCINVqXwAFWQ1WgV3s2+bUse/2iw53YqyemhhtzFjfp+DXLdC4zJSOuObWC45eaDKeseLMGMw==", + "requires": { + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/top-app-bar": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/top-app-bar/-/top-app-bar-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-fTS0kOHyUAKBhtz8olDvsCtZ6VxJEJ5QNUAZdHbJsTjig87poLLUP2CKJ18t5DjzW/KFMFjNYMSbah6NOREvqg==", + "requires": { + "@material/animation": "12.0.0-canary.22d29cbb4.0", + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/elevation": "12.0.0-canary.22d29cbb4.0", + "@material/ripple": "12.0.0-canary.22d29cbb4.0", + "@material/rtl": "12.0.0-canary.22d29cbb4.0", + "@material/shape": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "@material/typography": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/touch-target": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-aPEMmR+xRI5ywD9JM+njTgU14CCsgRSS7CLZwd+wsfJkMYPCi8rBM3t23bu/jILa4IT6TIe32Ew1xIBVxJNpgQ==", + "requires": { + "@material/base": "12.0.0-canary.22d29cbb4.0", + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@material/typography": { + "version": "12.0.0-canary.22d29cbb4.0", + "resolved": "https://registry.npmjs.org/@material/typography/-/typography-12.0.0-canary.22d29cbb4.0.tgz", + "integrity": "sha512-lIzU4IFjaSfVRbhsabTiri8CD+fEe9/DaGpoDm89sHm7b8RbN1+m+7OrePICcWgWFo2swRndph8qhzh7gTYdew==", + "requires": { + "@material/feature-targeting": "12.0.0-canary.22d29cbb4.0", + "@material/theme": "12.0.0-canary.22d29cbb4.0", + "tslib": "^2.1.0" + } + }, + "@mdn/browser-compat-data": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.1.0.tgz", + "integrity": "sha512-58eB5/ovJ5CfArzZwmZdenF/WlAGGS+1PG8RUb3oJ4st9exETBjClmFC0E1uVrZG1BwPaT205RKS8RhnUh5x3Q==", + "dev": true + }, + "@microsoft/tsdoc": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.13.2.tgz", + "integrity": "sha512-WrHvO8PDL8wd8T2+zBGKrMwVL5IyzR3ryWUsl0PXgEV0QHup4mTLi0QcATefGI6Gx9Anu7vthPyyyLpY0EpiQg==", + "dev": true + }, + "@microsoft/tsdoc-config": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.15.2.tgz", + "integrity": "sha512-mK19b2wJHSdNf8znXSMYVShAHktVr/ib0Ck2FA3lsVBSEhSI/TfXT7DJQkAYgcztTuwazGcg58ZjYdk0hTCVrA==", + "dev": true, + "requires": { + "@microsoft/tsdoc": "0.13.2", + "ajv": "~6.12.6", + "jju": "~1.4.0", + "resolve": "~1.19.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/arborist": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-2.10.0.tgz", + "integrity": "sha512-CLnD+zXG9oijEEzViimz8fbOoFVb7hoypiaf7p6giJhvYtrxLAyY3cZAMPIFQvsG731+02eMDp3LqVBNo7BaZA==", + "dev": true, + "requires": { + "@isaacs/string-locale-compare": "^1.0.1", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^1.0.2", + "@npmcli/metavuln-calculator": "^1.1.0", + "@npmcli/move-file": "^1.1.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^1.0.1", + "@npmcli/package-json": "^1.0.1", + "@npmcli/run-script": "^1.8.2", + "bin-links": "^2.2.1", + "cacache": "^15.0.3", + "common-ancestor-path": "^1.0.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "npm-install-checks": "^4.0.0", + "npm-package-arg": "^8.1.5", + "npm-pick-manifest": "^6.1.0", + "npm-registry-fetch": "^11.0.0", + "pacote": "^11.3.5", + "parse-conflict-json": "^1.1.1", + "proc-log": "^1.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "ssri": "^8.0.1", + "treeverse": "^1.0.4", + "walk-up-path": "^1.0.0" + } + }, + "@npmcli/fs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz", + "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", + "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + } + }, + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "@npmcli/map-workspaces": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-1.0.4.tgz", + "integrity": "sha512-wVR8QxhyXsFcD/cORtJwGQodeeaDf0OxcHie8ema4VgFeqwYkFsDPnSrIRSytX8xR6nKPAH89WnwTcaU608b/Q==", + "dev": true, + "requires": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^7.1.6", + "minimatch": "^3.0.4", + "read-package-json-fast": "^2.0.1" + } + }, + "@npmcli/metavuln-calculator": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-1.1.1.tgz", + "integrity": "sha512-9xe+ZZ1iGVaUovBVFI9h3qW+UuECUzhvZPxK9RaEA2mjU26o5D0JloGYWwLYvQELJNmBdQB6rrpuN8jni6LwzQ==", + "dev": true, + "requires": { + "cacache": "^15.0.5", + "pacote": "^11.1.11", + "semver": "^7.3.2" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@npmcli/name-from-folder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", + "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", + "dev": true + }, + "@npmcli/node-gyp": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", + "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", + "dev": true + }, + "@npmcli/package-json": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-1.0.1.tgz", + "integrity": "sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.1" + } + }, + "@npmcli/promise-spawn": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "dev": true, + "requires": { + "infer-owner": "^1.0.4" + } + }, + "@npmcli/run-script": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.6.tgz", + "integrity": "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + } + }, + "@open-wc/building-utils": { + "version": "2.18.4", + "resolved": "https://registry.npmjs.org/@open-wc/building-utils/-/building-utils-2.18.4.tgz", + "integrity": "sha512-wjNp9oE1SFsiBEqaI67ff60KHDpDbGMNF+82pvCHe412SFY4q8DNy8A+hesj1nZsuZHH1/olDfzBDbYKAnmgMg==", + "dev": true, + "requires": { + "@babel/core": "^7.11.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@webcomponents/shadycss": "^1.10.2", + "@webcomponents/webcomponentsjs": "^2.5.0", + "arrify": "^2.0.1", + "browserslist": "^4.16.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3", + "clone": "^2.1.2", + "core-js-bundle": "^3.8.1", + "deepmerge": "^4.2.2", + "es-module-shims": "^0.4.7", + "html-minifier-terser": "^5.1.1", + "lru-cache": "^5.1.1", + "minimatch": "^3.0.4", + "parse5": "^5.1.1", + "path-is-inside": "^1.0.2", + "regenerator-runtime": "^0.13.7", + "resolve": "^1.19.0", + "rimraf": "^3.0.2", + "shady-css-scoped-element": "^0.0.2", + "systemjs": "^6.8.3", + "terser": "^4.6.7", + "valid-url": "^1.0.9", + "whatwg-fetch": "^3.5.0", + "whatwg-url": "^7.1.0" + }, + "dependencies": { + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@open-wc/chai-dom-equals": { + "version": "0.12.36", + "resolved": "https://registry.npmjs.org/@open-wc/chai-dom-equals/-/chai-dom-equals-0.12.36.tgz", + "integrity": "sha512-Gt1fa37h4rtWPQGETSU4n1L678NmMi9KwHM1sH+JCGcz45rs8DBPx7MUVeGZ+HxRlbEI5t9LU2RGGv6xT2OlyA==", + "dev": true, + "requires": { + "@open-wc/semantic-dom-diff": "^0.13.16", + "@types/chai": "^4.1.7" + }, + "dependencies": { + "@open-wc/semantic-dom-diff": { + "version": "0.13.21", + "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.13.21.tgz", + "integrity": "sha512-BONpjHcGX2zFa9mfnwBCLEmlDsOHzT+j6Qt1yfK3MzFXFtAykfzFjAgaxPetu0YbBlCfXuMlfxI4vlRGCGMvFg==", + "dev": true + } + } + }, + "@open-wc/dedupe-mixin": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@open-wc/dedupe-mixin/-/dedupe-mixin-1.3.0.tgz", + "integrity": "sha512-UfdK1MPnR6T7f3svzzYBfu3qBkkZ/KsPhcpc3JYhsUY4hbpwNF9wEQtD4Z+/mRqMTJrKg++YSxIxE0FBhY3RIw==", + "dev": true + }, + "@open-wc/eslint-config": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@open-wc/eslint-config/-/eslint-config-4.3.0.tgz", + "integrity": "sha512-kCxFWQ1AR4meTmWJGnK36LJYqDJeFGjlj6n4vLjAW3/c1VUyYQKL90vrNKy/OHS9kTjc9dcH5D64myAbNx6r1w==", + "dev": true, + "requires": { + "eslint": "^7.6.0", + "eslint-config-airbnb-base": "^14.0.0", + "eslint-plugin-html": "^6.0.0", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-lit": "^1.2.0", + "eslint-plugin-lit-a11y": "^1.0.1", + "eslint-plugin-no-only-tests": "^2.4.0", + "eslint-plugin-wc": "^1.2.0" + } + }, + "@open-wc/scoped-elements": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@open-wc/scoped-elements/-/scoped-elements-1.3.4.tgz", + "integrity": "sha512-WD+ObocdzcFCpBxnc8bQa7NoATeA+tJrK0/c/yV1Nx4leV+1PmJNNu+WCcuckBEGd0Op6FP8w1TidoqmVVba6g==", + "dev": true, + "requires": { + "@open-wc/dedupe-mixin": "^1.3.0", + "lit-html": "^1.0.0" + } + }, + "@open-wc/semantic-dom-diff": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.19.5.tgz", + "integrity": "sha512-Wi0Fuj3dzqlWClU0y+J4k/nqTcH0uwgOWxZXPyeyG3DdvuyyjgiT4L4I/s6iVShWQvvEsyXnj7yVvixAo3CZvg==", + "dev": true, + "requires": { + "@types/chai": "^4.2.11", + "@web/test-runner-commands": "^0.5.7" + } + }, + "@open-wc/testing": { + "version": "2.5.33", + "resolved": "https://registry.npmjs.org/@open-wc/testing/-/testing-2.5.33.tgz", + "integrity": "sha512-+EJNs0i+VV4nE+BrG70l2DNGXOZTSrluruaaU06HUSk57ZlKa+kIxWmkLxCOLlbgnQgrPrQWxbs3lgB1tIx/YA==", + "dev": true, + "requires": { + "@open-wc/chai-dom-equals": "^0.12.36", + "@open-wc/semantic-dom-diff": "^0.19.3", + "@open-wc/testing-helpers": "^1.8.12", + "@types/chai": "^4.2.11", + "@types/chai-dom": "^0.0.9", + "@types/mocha": "^5.2.7", + "@types/sinon-chai": "^3.2.3", + "chai": "^4.2.0", + "chai-a11y-axe": "^1.3.1", + "chai-dom": "^1.8.1", + "mocha": "^6.2.2", + "sinon-chai": "^3.5.0" + } + }, + "@open-wc/testing-helpers": { + "version": "1.8.12", + "resolved": "https://registry.npmjs.org/@open-wc/testing-helpers/-/testing-helpers-1.8.12.tgz", + "integrity": "sha512-+4exEHYvnFqI1RGDDIKFHPZ7Ws5NK1epvEku3zLaOYN3zc+huX19SndNc5+X++v8A+quN/iXbHlh80ROyNaYDA==", + "dev": true, + "requires": { + "@open-wc/scoped-elements": "^1.2.4", + "lit-element": "^2.2.1", + "lit-html": "^1.0.0" + } + }, + "@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, + "@rollup/plugin-commonjs": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-16.0.0.tgz", + "integrity": "sha512-LuNyypCP3msCGVQJ7ki8PqYdpjfEkE/xtFa5DqlF+7IBD0JsfMZ87C58heSwIMint58sAUZbt3ITqOmdQv/dXw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + }, + "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-inject": { + "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.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": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", + "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.8" + } + }, + "@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, + "@sindresorhus/is": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", + "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", + "dev": true + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@sinonjs/samsam": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.0.2.tgz", + "integrity": "sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + } + }, + "@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "dev": true + }, + "@snowpack/plugin-typescript": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@snowpack/plugin-typescript/-/plugin-typescript-1.2.1.tgz", + "integrity": "sha512-wU+JNaMVkqGsqTaUY7TnEMhGt/3URTgA9dpMCtZX6wn/ceA7Gwlmue/sOLynf0OTNLygHPvjiQECQYkEi3LTtg==", + "dev": true, + "requires": { + "execa": "^5.0.0", + "npm-run-path": "^4.0.1" + } + }, + "@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "requires": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + }, + "dependencies": { + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + } + } + }, + "@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "requires": { + "defer-to-connect": "^2.0.0" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", + "dev": true, + "requires": { + "@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.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", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/browserslist": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@types/browserslist/-/browserslist-4.15.0.tgz", + "integrity": "sha512-h9LyKErRGZqMsHh9bd+FE8yCIal4S0DxKTOeui56VgVXqa66TKiuaIUxCAI7c1O0LjaUzOTcsMyOpO9GetozRA==", + "dev": true, + "requires": { + "browserslist": "*" + } + }, + "@types/browserslist-useragent": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/browserslist-useragent/-/browserslist-useragent-3.0.4.tgz", + "integrity": "sha512-S/AhrluMHi8EcuxxCtTDBGr8u+XvwUfLvZdARuIS2LFZ/lHoeaeJJYCozD68GKH6wm52FbIHq4WWPF/Ec6a9qA==", + "dev": true + }, + "@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "dev": true, + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, + "@types/caniuse-api": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/caniuse-api/-/caniuse-api-3.0.2.tgz", + "integrity": "sha512-YfCDMn7R59n7GFFfwjPAM0zLJQy4UvveC32rOJBmTqJJY8uSRqM4Dc7IJj8V9unA48Qy4nj5Bj3jD6Q8VZ1Seg==", + "dev": true + }, + "@types/chai": { + "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": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@types/chai-dom/-/chai-dom-0.0.9.tgz", + "integrity": "sha512-jj4F2NJog2/GBYsyJ8+NvhnWUBbPY4MUAKLdPJE6+568rw12GGXvj0ycUuP5nndVrnJgozmJAoMTvxvjJATXWw==", + "dev": true, + "requires": { + "@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", + "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", + "dev": true + }, + "@types/command-line-usage": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.2.tgz", + "integrity": "sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg==", + "dev": true + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==", + "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", + "integrity": "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/express": "*", + "@types/keygrip": "*", + "@types/node": "*" + } + }, + "@types/debounce": { + "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": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@types/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-bsKkeSqN7HYyYntFRAmzcwx/dKW4Wa+KVMTInANlI72PWLQmOpZu96j0OqHZGArW4VQwCmJPteQlXaUDeOB0WQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.26", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.26.tgz", + "integrity": "sha512-zeu3tpouA043RHxW0gzRxwCHchMgftE8GArRsvYT0ByDMbn19olQHx5jLue0LxWY6iYtXb7rXmuVtSkhy9YZvQ==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/http-assert": { + "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": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, + "@types/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.1.tgz", + "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/keygrip": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", + "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==", + "dev": true + }, + "@types/keyv": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", + "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/koa": { + "version": "2.13.4", + "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.4.tgz", + "integrity": "sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw==", + "dev": true, + "requires": { + "@types/accepts": "*", + "@types/content-disposition": "*", + "@types/cookies": "*", + "@types/http-assert": "*", + "@types/http-errors": "*", + "@types/keygrip": "*", + "@types/koa-compose": "*", + "@types/node": "*" + } + }, + "@types/koa__cors": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/koa__cors/-/koa__cors-3.0.3.tgz", + "integrity": "sha512-74Xb4hJOPGKlrQ4PRBk1A/p0gfLpgbnpT0o67OMVbwyeMXvlBN+ZCRztAAmkKZs+8hKbgMutUlZVbA52Hr/0IA==", + "dev": true, + "requires": { + "@types/koa": "*" + } + }, + "@types/koa-compose": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", + "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==", + "dev": true, + "requires": { + "@types/koa": "*" + } + }, + "@types/koa-compress": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@types/koa-compress/-/koa-compress-2.0.9.tgz", + "integrity": "sha512-1Sa9OsbHd2N2N7gLpdIRHe8W99EZbfIR31D7Iisx16XgwZCnWUtGXzXQejhu74Y1pE/wILqBP6VL49ch/MVpZw==", + "dev": true, + "requires": { + "@types/koa": "*", + "@types/node": "*" + } + }, + "@types/koa-etag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/koa-etag/-/koa-etag-3.0.0.tgz", + "integrity": "sha512-gXQUtKGEnCy0sZLG+uE3wL4mvY1CBPcb6ECjpAoD8RGYy/8ACY1B084k8LTFPIdVcmy7GD6Y4n3up3jnupofcQ==", + "dev": true, + "requires": { + "@types/etag": "*", + "@types/koa": "*" + } + }, + "@types/koa-send": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@types/koa-send/-/koa-send-4.1.3.tgz", + "integrity": "sha512-daaTqPZlgjIJycSTNjKpHYuKhXYP30atFc1pBcy6HHqB9+vcymDgYTguPdx9tO4HMOqNyz6bz/zqpxt5eLR+VA==", + "dev": true, + "requires": { + "@types/koa": "*" + } + }, + "@types/koa-static": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/koa-static/-/koa-static-4.0.2.tgz", + "integrity": "sha512-ns/zHg+K6XVPMuohjpOlpkR1WLa4VJ9czgUP9bxkCDn0JZBtUWbD/wKDZzPGDclkQK1bpAEScufCHOy8cbfL0w==", + "dev": true, + "requires": { + "@types/koa": "*", + "@types/koa-send": "*" + } + }, + "@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true + }, + "@types/marked": { + "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": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "@types/mime-types": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.1.tgz", + "integrity": "sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/mocha": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", + "dev": true + }, + "@types/node": { + "version": "16.11.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.11.tgz", + "integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/parse5": { + "version": "2.2.34", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz", + "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/path-is-inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/path-is-inside/-/path-is-inside-1.0.0.tgz", + "integrity": "sha512-hfnXRGugz+McgX2jxyy5qz9sB21LRzlGn24zlwN2KEgoPtEvjzNRrLtUkOOebPDPZl3Rq7ywKxYvylVcEZDnEw==", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/sinon": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.6.tgz", + "integrity": "sha512-6EF+wzMWvBNeGrfP3Nx60hhx+FfwSg1JJBLAAP/IdIUq0EYkqCYf70VT3PhuhPX9eLD+Dp+lNdpb/ZeHG8Yezg==", + "dev": true, + "requires": { + "@sinonjs/fake-timers": "^7.1.0" + } + }, + "@types/sinon-chai": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.6.tgz", + "integrity": "sha512-Z57LprQ+yOQNu9d6mWdHNvnmncPXzDWGSeLj+8L075/QahToapC4Q13zAFRVKV4clyBmdJ5gz4xBfVkOso5lXw==", + "dev": true, + "requires": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "@types/trusted-types": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", + "dev": true + }, + "@types/whatwg-url": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-6.4.0.tgz", + "integrity": "sha512-tonhlcbQ2eho09am6RHnHOgvtDfDYINd5rgxD+2YSkKENooVCFsWizJz139MQW/PV8FfClyKrNe9ZbdHrSCxGg==", + "dev": true, + "requires": { + "@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": "*" + } + }, + "@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "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.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.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "dev": true + } + } + }, + "@typescript-eslint/experimental-utils": { + "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.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" + }, + "dependencies": { + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + } + } + }, + "@typescript-eslint/parser": { + "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.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.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.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + } + }, + "@typescript-eslint/types": { + "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.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.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "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.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/config-loader": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.1.3.tgz", + "integrity": "sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==", + "dev": true, + "requires": { + "semver": "^7.3.4" + } + }, + "@web/dev-server": { + "version": "0.1.28", + "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.28.tgz", + "integrity": "sha512-964NqgatvFWX7LM8QGlB1XpcJoUQRXZPiEn3XKgDIUSNS6JNCjGfQQ+TfxBlT5KBHYJakDYbTk+sdEeRi2gaLw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.11", + "@types/command-line-args": "^5.0.0", + "@web/config-loader": "^0.1.3", + "@web/dev-server-core": "^0.3.17", + "@web/dev-server-rollup": "^0.3.13", + "camelcase": "^6.2.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.1", + "debounce": "^1.2.0", + "deepmerge": "^4.2.2", + "ip": "^1.1.5", + "nanocolors": "^0.2.1", + "open": "^8.0.2", + "portfinder": "^1.0.28" + }, + "dependencies": { + "camelcase": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", + "dev": true + } + } + }, + "@web/dev-server-core": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.3.17.tgz", + "integrity": "sha512-vN1dwQ8yDHGiAvCeUo9xFfjo+pFl8TW+pON7k9kfhbegrrB8CKhJDUxmHbZsyQUmjf/iX57/LhuWj1xGhRL8AA==", + "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/dev-server-esbuild": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/@web/dev-server-esbuild/-/dev-server-esbuild-0.2.16.tgz", + "integrity": "sha512-a82uKy9vQ4HvfWtjd7hJ3GtaqkL2ofxpEu3a1wIZyXB2dFWPvhRSmLNe/4IPPHe4vj6PVdRpLSFPEA3lXUW5Pw==", + "dev": true, + "requires": { + "@mdn/browser-compat-data": "^4.0.0", + "@web/dev-server-core": "^0.3.17", + "esbuild": "^0.12.21", + "parse5": "^6.0.1", + "ua-parser-js": "^1.0.2" + }, + "dependencies": { + "esbuild": { + "version": "0.12.29", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.29.tgz", + "integrity": "sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g==", + "dev": true + } + } + }, + "@web/dev-server-rollup": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.13.tgz", + "integrity": "sha512-QaxEtsdL6+fktIa1ZL8VEtq4U7WB7ikKEnxkbhUpFknB+WSvwx6DUrvyBDuPckunpczCnljXBFPugu+2W6N8Fg==", + "dev": true, + "requires": { + "@rollup/plugin-node-resolve": "^11.0.1", + "@web/dev-server-core": "^0.3.16", + "nanocolors": "^0.2.1", + "parse5": "^6.0.1", + "rollup": "^2.58.0", + "whatwg-url": "^11.0.0" + } + }, + "@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.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true + } + } + }, + "@web/test-runner": { + "version": "0.13.22", + "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.13.22.tgz", + "integrity": "sha512-s4P3X4z8RlxqbQgO4K7aPVZTlum9juuQ9ZIxvZlua+KMTG5J5Utr7Drey/tGcx+BwVFUAtQLr20IEWA+38d+fA==", + "dev": true, + "requires": { + "@web/browser-logs": "^0.2.2", + "@web/config-loader": "^0.1.3", + "@web/dev-server": "^0.1.24", + "@web/test-runner-chrome": "^0.10.5", + "@web/test-runner-commands": "^0.5.10", + "@web/test-runner-core": "^0.10.22", + "@web/test-runner-mocha": "^0.7.5", + "camelcase": "^6.2.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.1", + "convert-source-map": "^1.7.0", + "diff": "^5.0.0", + "globby": "^11.0.1", + "nanocolors": "^0.2.1", + "portfinder": "^1.0.28", + "source-map": "^0.7.3" + }, + "dependencies": { + "camelcase": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", + "dev": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + } + } + }, + "@web/test-runner-chrome": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.10.7.tgz", + "integrity": "sha512-DKJVHhHh3e/b6/erfKOy0a4kGfZ47qMoQRgROxi9T4F9lavEY3E5/MQ7hapHFM2lBF4vDrm+EWjtBdOL8o42tw==", + "dev": true, + "requires": { + "@web/test-runner-core": "^0.10.20", + "@web/test-runner-coverage-v8": "^0.4.8", + "chrome-launcher": "^0.15.0", + "puppeteer-core": "^13.1.3" + } + }, + "@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" + } + }, + "@web/test-runner-coverage-v8": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.4.8.tgz", + "integrity": "sha512-Ib0AscR8Xf9E/V7rf3XOVQTe4vKIbwSTupxV1xGgzj3x4RKUuMUg9FLz9EigZ5iN0mOzZKDllyRS523hbdhDtA==", + "dev": true, + "requires": { + "@web/test-runner-core": "^0.10.20", + "istanbul-lib-coverage": "^3.0.0", + "picomatch": "^2.2.2", + "v8-to-istanbul": "^8.0.0" + } + }, + "@web/test-runner-mocha": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.7.5.tgz", + "integrity": "sha512-12/OBq6efPCAvJpcz3XJs2OO5nHe7GtBibZ8Il1a0QtsGpRmuJ4/m1EF0Fj9f6KHg7JdpGo18A37oE+5hXjHwg==", + "dev": true, + "requires": { + "@types/mocha": "^8.2.0", + "@web/test-runner-core": "^0.10.20" + }, + "dependencies": { + "@types/mocha": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", + "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", + "dev": true + } + } + }, + "@webcomponents/shadycss": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.11.0.tgz", + "integrity": "sha512-L5O/+UPum8erOleNjKq6k58GVl3fNsEQdSOyh0EUhNmi7tHUyRuCJy1uqJiWydWcLARE5IPsMoPYMZmUGrz1JA==", + "dev": true + }, + "@webcomponents/webcomponentsjs": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.6.0.tgz", + "integrity": "sha512-Moog+Smx3ORTbWwuPqoclr+uvfLnciVd6wdCaVscHPrxbmQ/IJKm3wbB7hpzJtXWjAq2l/6QMlO85aZiOdtv5Q==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "abortcontroller-polyfill": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", + "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "ace-custom-element": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/ace-custom-element/-/ace-custom-element-1.6.5.tgz", + "integrity": "sha512-xU/9r94WKwjwEOjdfs6oVk2Dqc6X63eF2ECvKIMm/JCK1PDbXXdBYi5sQx110tR2sY4f96iXxyvscfT9qeI1RQ==" + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", + "dev": true + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", + "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + } + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "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.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": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "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", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "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-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "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.prototype.flat": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "axe-core": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", + "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", + "dev": true + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz", + "integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.0", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", + "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.0", + "core-js-compat": "^3.18.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz", + "integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "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.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "bin-links": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-2.3.0.tgz", + "integrity": "sha512-JzrOLHLwX2zMqKdyYZjkDgQGT+kHDkIhv2/IK2lJ00qLxV4TmFoHi8drDBb6H5Zrz1YfgHkai4e2MGPqnoUhqA==", + "dev": true, + "requires": { + "cmd-shim": "^4.0.1", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0", + "read-cmd-shim": "^2.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^3.0.3" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "blocking-elements": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/blocking-elements/-/blocking-elements-0.1.1.tgz", + "integrity": "sha512-/SLWbEzMoVIMZACCyhD/4Ya2M1PWP1qMKuiymowPcI+PdWDARqeARBjhj73kbUBCxEmTZCUu5TAqxtwUO9C1Ig==" + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "bplist-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", + "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=", + "dev": true, + "requires": { + "big-integer": "^1.6.7" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserslist": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", + "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001280", + "electron-to-chromium": "^1.3.896", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, + "browserslist-useragent": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/browserslist-useragent/-/browserslist-useragent-3.0.3.tgz", + "integrity": "sha512-8KKO6kOXu/93IkMi8zVqzU72BgpoxcITIHtkM1qmlnxJtIMF9Y+2uWL9JS2uUbzj/PaS3kaA6LcICBThMojGjA==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "semver": "^7.3.2", + "useragent": "^2.3.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "bufferutil": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", + "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", + "dev": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "dev": true + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + } + } + }, + "cache-content-type": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", + "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", + "dev": true, + "requires": { + "mime-types": "^2.1.18", + "ylru": "^1.2.0" + } + }, + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true + }, + "cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001284", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001284.tgz", + "integrity": "sha512-t28SKa7g6kiIQi6NHeOcKrOrGMzCRrXvlasPwWC26TH2QNdglgzQIRUuJ0cR3NeQPH+5jpuveeeSFDLm2zbkEw==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "chai-a11y-axe": { + "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.3.3" + } + }, + "chai-dom": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/chai-dom/-/chai-dom-1.11.0.tgz", + "integrity": "sha512-ZzGlEfk1UhHH5+N0t9bDqstOxPEXmn3EyXvtsok5rfXVDOFDJbHVy12rED6ZwkJAUDs2w7/Da4Hlq2LB63kltg==", + "dev": true, + "requires": {} + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "dev": true, + "requires": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "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": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "chrome-launcher": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.0.tgz", + "integrity": "sha512-ZQqX5kb9H0+jy1OqLnWampfocrtSZaGl7Ny3F9GRha85o4odbL8x55paUzh51UC7cEmZ5obp3H2Mm70uC2PpRA==", + "dev": true, + "requires": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + } + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "clean-css": { + "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": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "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": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "cmd-shim": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", + "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", + "dev": true, + "requires": { + "mkdirp-infer-owner": "^2.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "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", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "command-line-args": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.0.tgz", + "integrity": "sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A==", + "dev": true, + "requires": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + } + }, + "command-line-usage": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", + "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", + "dev": true, + "requires": { + "array-back": "^4.0.1", + "chalk": "^2.4.2", + "table-layout": "^1.0.1", + "typical": "^5.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true + }, + "common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "concurrently": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.4.0.tgz", + "integrity": "sha512-HZ3D0RTQMH3oS4gvtYj1P+NBc6PzE2McEra6yEFcQKrUQ9HvtTGU4Dbne083F034p+LRb7kWU0tPRNvSGs1UCQ==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } + } + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "confusing-browser-globals": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", + "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "conventional-changelog": { + "version": "3.1.24", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.24.tgz", + "integrity": "sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg==", + "dev": true, + "requires": { + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-atom": "^2.0.8", + "conventional-changelog-codemirror": "^2.0.8", + "conventional-changelog-conventionalcommits": "^4.5.0", + "conventional-changelog-core": "^4.2.1", + "conventional-changelog-ember": "^2.0.9", + "conventional-changelog-eslint": "^3.0.9", + "conventional-changelog-express": "^2.0.6", + "conventional-changelog-jquery": "^3.0.11", + "conventional-changelog-jshint": "^2.0.9", + "conventional-changelog-preset-loader": "^2.3.4" + } + }, + "conventional-changelog-angular": { + "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", + "q": "^1.5.1" + } + }, + "conventional-changelog-atom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", + "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-codemirror": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", + "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-config-spec": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz", + "integrity": "sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==", + "dev": true + }, + "conventional-changelog-conventionalcommits": { + "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", + "lodash": "^4.17.15", + "q": "^1.5.1" + } + }, + "conventional-changelog-core": { + "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", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.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" + } + }, + "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", + "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 + }, + "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" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "dependencies": { + "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" + } + } + } + }, + "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=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "conventional-changelog-ember": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", + "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-eslint": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", + "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-express": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", + "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-jquery": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", + "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", + "dev": true, + "requires": { + "q": "^1.5.1" + } + }, + "conventional-changelog-jshint": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", + "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + } + }, + "conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "dev": true + }, + "conventional-changelog-writer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz", + "integrity": "sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g==", + "dev": true, + "requires": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.6", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + } + }, + "conventional-commits-parser": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz", + "integrity": "sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw==", + "dev": true, + "requires": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + } + }, + "conventional-recommended-bump": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", + "dev": true, + "requires": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" + } + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "cookies": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", + "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", + "dev": true, + "requires": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + } + }, + "core-js-bundle": { + "version": "3.19.2", + "resolved": "https://registry.npmjs.org/core-js-bundle/-/core-js-bundle-3.19.2.tgz", + "integrity": "sha512-LoFua00O2j1ffgGDViAUQMKuwDXBB/XFOmEGY/9QcyQfIrjlom8XZzj0YymB2aUmPZtHmk1fAjPrz9OEXifW4g==", + "dev": true + }, + "core-js-compat": { + "version": "3.19.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.2.tgz", + "integrity": "sha512-ObBY1W5vx/LFFMaL1P5Udo4Npib6fu+cMokeziWkA8Tns4FcDemKF5j9JvaI5JhdkW8EQJQGJN1EcrzmEwuAqQ==", + "dev": true, + "requires": { + "browserslist": "^4.18.1", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-js-pure": { + "version": "3.19.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.2.tgz", + "integrity": "sha512-5LkcgQEy8pFeVnd/zomkUBSwnmIxuF1C8E9KrMAbOc8f34IBT9RGvTYeNDdp1PnvMJrrVhvk1hg/yVV5h/znlg==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cosmiconfig": { + "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", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "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-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dev": true, + "requires": { + "node-fetch": "2.6.7" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + } + }, + "css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-fns": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.27.0.tgz", + "integrity": "sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q==", + "dev": true + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, + "debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + } + } + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "deep-is": { + "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": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "default-browser-id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-2.0.0.tgz", + "integrity": "sha1-AezONxpx6F8VoXF354YwR+c9vn0=", + "dev": true, + "requires": { + "bplist-parser": "^0.1.0", + "pify": "^2.3.0", + "untildify": "^2.0.0" + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + }, + "dependencies": { + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + } + } + }, + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "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", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "dev": true, + "requires": { + "address": "^1.0.1", + "debug": "^2.6.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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "devtools-protocol": { + "version": "0.0.981744", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", + "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==", + "dev": true + }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "requires": { + "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": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.1.tgz", + "integrity": "sha512-JPFiouQIr16VQ4dX6i0+Hpbg3H2bMKPmZ+WZgBOSSvOPx9QHwwY8sPzeM2baUtViESYto6wC2nuZOMC/6gulcA==", + "dev": true, + "requires": { + "@types/parse5": "^2.2.34", + "clone": "^2.1.0", + "parse5": "^4.0.0" + }, + "dependencies": { + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + } + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "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", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotgitignore": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz", + "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "minimatch": "^3.0.4" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "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 + } + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "dynamic-import-polyfill": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dynamic-import-polyfill/-/dynamic-import-polyfill-0.1.1.tgz", + "integrity": "sha512-m953zv0w5oDagTItWm6Auhmk/pY7EiejaqiVbnzSS3HIjh1FCUeK7WzuaVtWPNs58A+/xpIE+/dVk6pKsrua8g==", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "dev": true, + "requires": { + "jake": "^10.8.5" + } + }, + "electron-to-chromium": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.11.tgz", + "integrity": "sha512-2OhsaYgsWGhWjx2et8kaUcdktPbBGjKM2X0BReUCKcSCPttEY+hz2zie820JLbttU8jwL92+JJysWwkut3wZgA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "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.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + } + }, + "es-dev-server": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-dev-server/-/es-dev-server-2.1.0.tgz", + "integrity": "sha512-Vrq/4PyMzWz33QmOdSncvoWLTJVcv2e96z8FLHQwP9zK7DyLeDZCckII8VTW+btUGtM7aErvLH/d/R2pjjjs8w==", + "dev": true, + "requires": { + "@babel/core": "^7.11.1", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.11.0", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-transform-template-literals": "^7.8.3", + "@babel/preset-env": "^7.9.0", + "@koa/cors": "^3.1.0", + "@open-wc/building-utils": "^2.18.3", + "@rollup/plugin-node-resolve": "^11.0.0", + "@rollup/pluginutils": "^3.0.0", + "@types/babel__core": "^7.1.3", + "@types/browserslist": "^4.8.0", + "@types/browserslist-useragent": "^3.0.0", + "@types/caniuse-api": "^3.0.0", + "@types/command-line-args": "^5.0.0", + "@types/command-line-usage": "^5.0.1", + "@types/debounce": "^1.2.0", + "@types/koa": "^2.0.48", + "@types/koa__cors": "^3.0.1", + "@types/koa-compress": "^2.0.9", + "@types/koa-etag": "^3.0.0", + "@types/koa-static": "^4.0.1", + "@types/lru-cache": "^5.1.0", + "@types/mime-types": "^2.1.0", + "@types/minimatch": "^3.0.3", + "@types/path-is-inside": "^1.0.0", + "@types/whatwg-url": "^6.4.0", + "browserslist": "^4.9.1", + "browserslist-useragent": "^3.0.2", + "builtin-modules": "^3.1.0", + "camelcase": "^5.3.1", + "caniuse-api": "^3.0.0", + "caniuse-lite": "^1.0.30001033", + "chokidar": "^3.0.0", + "command-line-args": "^5.0.2", + "command-line-usage": "^6.1.0", + "debounce": "^1.2.0", + "deepmerge": "^4.2.2", + "es-module-lexer": "^0.3.13", + "get-stream": "^5.1.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^4.0.2", + "koa": "^2.7.0", + "koa-compress": "^3.0.0", + "koa-etag": "^3.0.0", + "koa-static": "^5.0.0", + "lru-cache": "^5.1.1", + "mime-types": "^2.1.27", + "minimatch": "^3.0.4", + "open": "^7.0.3", + "parse5": "^5.1.1", + "path-is-inside": "^1.0.2", + "polyfills-loader": "^1.7.4", + "portfinder": "^1.0.21", + "rollup": "^2.7.2", + "strip-ansi": "^5.2.0", + "systemjs": "^6.3.1", + "tslib": "^1.11.1", + "useragent": "^2.3.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "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", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "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", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "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", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "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" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "es-module-lexer": { + "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": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/es-module-shims/-/es-module-shims-0.4.7.tgz", + "integrity": "sha512-0LTiSQoPWwdcaTVIQXhGlaDwTneD0g9/tnH1PNs3zHFFH+xoCeJclDM3rQeqF9nurXPfMKm3l9+kfPRa5VpbKg==", + "dev": true + }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "esbuild": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.9.7.tgz", + "integrity": "sha512-VtUf6aQ89VTmMLKrWHYG50uByMF4JQlVysb8dmg6cOgW8JnFCipmz7p+HNBl+RR3LLCuBxFGVauAe2wfnF9bLg==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esinstall": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/esinstall/-/esinstall-1.1.7.tgz", + "integrity": "sha512-irDsrIF7fZ5BCQEAV5gmH+4nsK6JhnkI9C9VloXdmzJLbM1EcshPw8Ap95UUGc4ZJdzGeOrjV+jgKjQ/Z7Q3pg==", + "dev": true, + "requires": { + "@rollup/plugin-commonjs": "^16.0.0", + "@rollup/plugin-inject": "^4.0.2", + "@rollup/plugin-json": "^4.0.0", + "@rollup/plugin-node-resolve": "^10.0.0", + "@rollup/plugin-replace": "^2.4.2", + "builtin-modules": "^3.2.0", + "cjs-module-lexer": "^1.2.1", + "es-module-lexer": "^0.6.0", + "execa": "^5.1.1", + "is-valid-identifier": "^2.0.2", + "kleur": "^4.1.1", + "mkdirp": "^1.0.3", + "picomatch": "^2.3.0", + "resolve": "^1.20.0", + "rimraf": "^3.0.0", + "rollup": "~2.37.1", + "rollup-plugin-polyfill-node": "^0.6.2", + "slash": "~3.0.0", + "validate-npm-package-name": "^3.0.0", + "vm2": "^3.9.2" + }, + "dependencies": { + "@rollup/plugin-node-resolve": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-10.0.0.tgz", + "integrity": "sha512-sNijGta8fqzwA1VwUEtTvWCx2E7qC70NMsDh4ZG13byAXYigBNZMxALhKUSycBks5gupJdq0lFrKumFrRZ8H3A==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.17.0" + } + }, + "es-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.6.0.tgz", + "integrity": "sha512-f8kcHX1ArhllUtb/wVSyvygoKCznIjnxhLxy7TCvIiMdT7fL4ZDTIKaadMe6eLvOXg6Wk02UeoFgUoZ2EKZZUA==", + "dev": true + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "rollup": { + "version": "2.37.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.37.1.tgz", + "integrity": "sha512-V3ojEeyGeSdrMSuhP3diBb06P+qV4gKQeanbDv+Qh/BZbhdZ7kHV0xAt8Yjk4GFshq/WjO7R4c7DFM20AwTFVQ==", + "dev": true, + "requires": { + "fsevents": "~2.1.2" + } + } + } + }, + "eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } + } + }, + "eslint-config-airbnb-base": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", + "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "dev": true, + "requires": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.2" + } + }, + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "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": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "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 + } + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz", + "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", + "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.1", + "has": "^1.0.3", + "is-core-module": "^2.8.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": { + "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" + } + }, + "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.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", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "requireindex": "^1.2.0" + } + }, + "eslint-plugin-lit-a11y": { + "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.3.3", + "axobject-query": "^2.2.0", + "dom5": "^3.0.1", + "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.1", + "requireindex": "~1.2.0" + }, + "dependencies": { + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + } + } + }, + "eslint-plugin-no-only-tests": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-2.6.0.tgz", + "integrity": "sha512-T9SmE/g6UV1uZo1oHAqOvL86XWl7Pl2EpRpnLI8g/bkJu+h7XBCB+1LnubRZ2CUQXj805vh4/CYZdnqtVaEo2Q==", + "dev": true + }, + "eslint-plugin-tsdoc": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.14.tgz", + "integrity": "sha512-fJ3fnZRsdIoBZgzkQjv8vAj6NeeOoFkTfgosj6mKsFjX70QV256sA/wq+y/R2+OL4L8E79VVaVWrPeZnKNe8Ng==", + "dev": true, + "requires": { + "@microsoft/tsdoc": "0.13.2", + "@microsoft/tsdoc-config": "0.15.2" + } + }, + "eslint-plugin-wc": { + "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", + "js-levenshtein-esm": "^1.2.0" + } + }, + "eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "dev": true + }, + "eslint-rule-extender": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/eslint-rule-extender/-/eslint-rule-extender-0.0.1.tgz", + "integrity": "sha512-F0j1Twve3lamL3J0rRSVAynlp58sDPG39JFcQrM+u9Na7PmCgiPHNODh6YE9mduaGcsn3NBqbf6LZRj0cLr8Ng==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-check": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.20.0.tgz", + "integrity": "sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog==", + "dev": true, + "requires": { + "pure-rand": "^5.0.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "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" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "fdir": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-5.1.0.tgz", + "integrity": "sha512-IgTtZwL52tx2wqWeuGDzXYTnNsEjNLahZpJw30hCQDyVnoHXwY5acNDnjGImTTL1R0z1PCyLw20VAbE5qLic3Q==", + "dev": true + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "dependencies": { + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + } + } + }, + "find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "requires": { + "array-back": "^3.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "requires": { + "is-buffer": "~2.0.3" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "^1.0.0" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "generic-names": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz", + "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "get-pkg-repo": { + "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", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "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" + } + }, + "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" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "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", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "git-raw-commits": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", + "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", + "dev": true, + "requires": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + } + }, + "git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", + "dev": true, + "requires": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + } + }, + "git-semver-tags": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", + "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", + "dev": true, + "requires": { + "meow": "^8.0.0", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "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", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + }, + "dependencies": { + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "dev": true + } + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "requires": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "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": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } + } + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dev": true, + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + } + }, + "htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "http-assert": { + "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.8.0" + } + }, + "http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + } + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "dependencies": { + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + } + } + }, + "httpie": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/httpie/-/httpie-1.1.2.tgz", + "integrity": "sha512-VQ82oXG95oY1fQw/XecHuvcFBA+lZQ9Vwj1RfLcO8a7HpDd4cc2ukwpJt+TUlFaLUAzZErylxWu6wclJ1rUhUQ==", + "dev": true + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "husky": { + "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": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, + "idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "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", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + } + }, + "internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "intersection-observer": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/intersection-observer/-/intersection-observer-0.7.0.tgz", + "integrity": "sha512-Id0Fij0HsB/vKWGeBe9PxeY45ttRiBmhFyyt/geBdDHBYNctMRTE3dC1U3ujzz3lap+hVXlEcVaB56kZP/eEUg==", + "dev": true + }, + "intl-list-format": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/intl-list-format/-/intl-list-format-1.0.3.tgz", + "integrity": "sha512-VNF1Mh0K1xALXkz/5QsK1gfKRvEQO/jWaniTGAzQvbzGr5uyGDskQrRjnf6Qnbc9/JRbNE8BQtTg6iWuFrZorw==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-core-module": { + "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-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "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-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "requires": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + }, + "dependencies": { + "global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "dev": true, + "requires": { + "ini": "1.3.7" + } + }, + "ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true + } + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "requires": { + "text-extensions": "^1.0.0" + } + }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-valid-element-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-element-name/-/is-valid-element-name-1.0.0.tgz", + "integrity": "sha1-Ju8/12zfHxItEFQG4y01sN4AWYE=", + "dev": true, + "requires": { + "is-potential-custom-element-name": "^1.0.0" + } + }, + "is-valid-identifier": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-valid-identifier/-/is-valid-identifier-2.0.2.tgz", + "integrity": "sha512-mpS5EGqXOwzXtKAg6I44jIAqeBfntFLxpAth1rrKbxtKyI6LPktyDYpHBI+tHlduhhX/SF26mFXmxQu995QVqg==", + "dev": true, + "requires": { + "assert": "^1.4.1" + } + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "isbinaryfile": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", + "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-reports": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.1.tgz", + "integrity": "sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + } + } + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", + "dev": true + }, + "js-levenshtein-esm": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/js-levenshtein-esm/-/js-levenshtein-esm-1.2.0.tgz", + "integrity": "sha512-fzreKVq1eD7eGcQr7MtRpQH94f8gIfhdrc7yeih38xh684TNMK9v5aAu2wxfIRMk/GpAJRrzcirMAPIaSDaByQ==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-nice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true + }, + "jsonschema": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.11.tgz", + "integrity": "sha512-XNZHs3N1IOa3lPKm//npxMhOdaoPw+MvEV0NIgxcER83GTJcG13rehtWmpBCfEt8DrtYwIkMTs8bdXoYs4fvnQ==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "just-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-3.1.1.tgz", + "integrity": "sha512-sdMWKjRq8qWZEjDcVA6llnUT8RDEBIfOiGpYFPYa9u+2c39JCsejktSP7mj5eRid5EIvTzIpQ2kDOCw1Nq9BjQ==", + "dev": true + }, + "just-diff-apply": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-3.1.2.tgz", + "integrity": "sha512-TCa7ZdxCeq6q3Rgms2JCRHTCfWAETPZ8SzYUbkYF6KR3I03sN29DaOIC+xyWboIcMvjAsD5iG2u/RWzHD8XpgQ==", + "dev": true + }, + "just-extend": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "dev": true + }, + "keygrip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "dev": true, + "requires": { + "tsscmp": "1.0.6" + } + }, + "keyv": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", + "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "kleur": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", + "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", + "dev": true + }, + "koa": { + "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", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.8.0", + "debug": "^4.3.2", + "delegates": "^1.0.0", + "depd": "^2.0.0", + "destroy": "^1.0.4", + "encodeurl": "^1.0.2", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.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" + } + }, + "koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", + "dev": true + }, + "koa-compress": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/koa-compress/-/koa-compress-3.1.0.tgz", + "integrity": "sha512-0m24/yS/GbhWI+g9FqtvStY+yJwTObwoxOvPok6itVjRen7PBWkjsJ8pre76m+99YybXLKhOJ62mJ268qyBFMQ==", + "dev": true, + "requires": { + "bytes": "^3.0.0", + "compressible": "^2.0.0", + "koa-is-json": "^1.0.0", + "statuses": "^1.0.0" + } + }, + "koa-convert": { + "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": "^4.1.0" + } + }, + "koa-etag": { + "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.8.1" + } + }, + "koa-is-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", + "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=", + "dev": true + }, + "koa-send": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", + "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "http-errors": "^1.7.3", + "resolve-path": "^1.4.0" + } + }, + "koa-static": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", + "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "koa-send": "^5.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lighthouse-logger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", + "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "marky": "^1.2.2" + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "lint-staged": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.2.6.tgz", + "integrity": "sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg==", + "dev": true, + "requires": { + "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.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", + "supports-color": "8.1.1" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "listr2": { + "version": "3.13.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.13.5.tgz", + "integrity": "sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.4.0", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "rxjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", + "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", + "dev": true, + "requires": { + "tslib": "~2.1.0" + } + }, + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + } + } + }, + "lit-element": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-2.5.1.tgz", + "integrity": "sha512-ogu7PiJTA33bEK0xGu1dmaX5vhcRjBXCFexPja0e7P7jqLhTpNKYRPmE+GmiCaRVAbiQKGkUgkh/i6+bh++dPQ==", + "requires": { + "lit-html": "^1.1.1" + } + }, + "lit-html": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-1.4.1.tgz", + "integrity": "sha512-B9btcSgPYb1q4oSOb/PrOT6Z/H+r6xuNzfH4lFli/AWhYwdtrgQkQWBbIc6mdnf6E2IL3gDXdkkqNktpU0OZQA==" + }, + "lit-translate": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/lit-translate/-/lit-translate-1.2.1.tgz", + "integrity": "sha512-jykKpkdRX0lx3JYq9jUMzVs02ISClOe2wxyPHat5wVKPyBRJQxgXxLxj1AbpuLNBCDZKEysMBpeJ1z0Y35Bk2Q==", + "requires": { + "lit-html": "^1.2.1" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "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", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + } + }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true + }, + "marked": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.10.tgz", + "integrity": "sha512-+QvuFj0nGgO970fySghXGmuw+Fd0gD2x3+MqCWLIPf5oxdv1Ka6b2q+z9RP01P/IaKPMEramy+7cNy/Lw8c3hw==" + }, + "marky": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.2.tgz", + "integrity": "sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "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": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "meriyah": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/meriyah/-/meriyah-3.1.6.tgz", + "integrity": "sha512-JDOSi6DIItDc33U5N52UdV6P8v+gn+fqZKfbAfHzdWApRQyQWdcvxPvAr9t01bI2rBxGvSrKRQSCg3SkZC1qeg==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "requires": { + "mime-db": "1.51.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, + "minipass": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", + "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "mkdirp-infer-owner": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", + "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + } + } + }, + "mocha": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", + "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", + "dev": true, + "requires": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "2.2.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.4", + "ms": "2.1.1", + "node-environment-flags": "1.0.5", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "dependencies": { + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true + }, + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "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", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "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" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "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 + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "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", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "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 + }, + "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" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "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.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "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", + "integrity": "sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0", + "@sinonjs/fake-timers": "^7.0.4", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" + } + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-environment-flags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", + "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "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", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + } + }, + "node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "dev": true + }, + "node-releases": { + "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": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "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", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", + "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", + "dev": true, + "requires": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "dev": true, + "requires": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "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.19.1" + } + }, + "object.getownpropertydescriptors": { + "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.19.1" + } + }, + "object.values": { + "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.19.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "only": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=", + "dev": true + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + } + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + } + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "pacote": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", + "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", + "dev": true, + "requires": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "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": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-conflict-json": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-1.1.1.tgz", + "integrity": "sha512-4gySviBiW5TRl7XHvp1agcS7SOe0KZOjC//71dzZVWJrY9hCrgtvl5v3SyIxCZ4fZF47TxD9nfzmxcx76xmbUw==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "just-diff": "^3.0.1", + "just-diff-apply": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dev": true, + "requires": { + "isarray": "0.0.1" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "periscopic": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-2.0.3.tgz", + "integrity": "sha512-FuCZe61mWxQOJAQFEfmt9FjzebRlcpFz8sFPbyaCKtdusPkMEbA9ey0eARnRav5zAhmXznhaQkKGFAPn7X9NUw==", + "dev": true, + "requires": { + "estree-walker": "^2.0.2", + "is-reference": "^1.1.4" + }, + "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 + } + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "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", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, + "polyfills-loader": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/polyfills-loader/-/polyfills-loader-1.7.6.tgz", + "integrity": "sha512-AiLIgmGFmzcvsqewyKsqWb7H8CnWNTSQBoM0u+Mauzmp0DsjObXmnZdeqvTn0HNwc1wYHHTOta82WjSjG341eQ==", + "dev": true, + "requires": { + "@babel/core": "^7.11.1", + "@open-wc/building-utils": "^2.18.3", + "@webcomponents/webcomponentsjs": "^2.4.0", + "abortcontroller-polyfill": "^1.4.0", + "core-js-bundle": "^3.6.0", + "deepmerge": "^4.2.2", + "dynamic-import-polyfill": "^0.1.1", + "es-module-shims": "^0.4.6", + "intersection-observer": "^0.7.0", + "parse5": "^5.1.1", + "regenerator-runtime": "^0.13.3", + "resize-observer-polyfill": "^1.5.1", + "systemjs": "^6.3.1", + "terser": "^4.6.7", + "whatwg-fetch": "^3.0.0" + }, + "dependencies": { + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + } + } + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "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" + } + } + } + }, + "postcss": { + "version": "8.4.4", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.4.tgz", + "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==", + "dev": true, + "requires": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + } + }, + "postcss-modules": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.2.2.tgz", + "integrity": "sha512-/H08MGEmaalv/OU8j6bUKi/kZr2kqGF6huAW8m9UAgOLWtpFdhA14+gPBoymtqyv+D4MLsmqaF2zvIegdCxJXg==", + "dev": true, + "requires": { + "generic-names": "^2.0.1", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true + }, + "proc-log": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz", + "integrity": "sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "promise-all-reject-late": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", + "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", + "dev": true + }, + "promise-call-limit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz", + "integrity": "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, + "puppeteer-core": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-13.7.0.tgz", + "integrity": "sha512-rXja4vcnAzFAP1OVLq/5dWNfwBGuzcOARJ6qGV7oAZhnLmVRU8G5MsdeQEAOy332ZhkIOnn9jp15R89LKHyp2Q==", + "dev": true, + "requires": { + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.981744", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "pkg-dir": "4.2.0", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.5.0" + }, + "dependencies": { + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "dev": true, + "requires": {} + } + } + }, + "pure-rand": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.0.tgz", + "integrity": "sha512-lD2/y78q+7HqBx2SaT6OT4UcwtvXNRfEpzYEzl0EQ+9gZq2Qi3fa0HDnYPeqQwhlHJFBUhT7AO3mLU3+8bynHA==", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", + "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "raw-body": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "dev": true, + "requires": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + } + } + }, + "read-cmd-shim": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", + "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", + "dev": true + }, + "read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "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 + }, + "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" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "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.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "regexpu-core": { + "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.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": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "regjsparser": { + "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" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "requireindex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", + "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", + "dev": true + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "dev": true, + "requires": { + "global-dirs": "^0.1.1" + } + }, + "resolve-path": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", + "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", + "dev": true, + "requires": { + "http-errors": "~1.6.2", + "path-is-absolute": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "dev": true, + "requires": { + "lowercase-keys": "^2.0.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.60.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.60.2.tgz", + "integrity": "sha512-1Bgjpq61sPjgoZzuiDSGvbI1tD91giZABgjCQBKM5aYLnzjq52GoDuWVwT/cm/MCxCMPU8gqQvkj8doQ5C8Oqw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-polyfill-node": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.6.2.tgz", + "integrity": "sha512-gMCVuR0zsKq0jdBn8pSXN1Ejsc458k2QsFFvQdbHoM0Pot5hEnck+pBP/FDwFS6uAi77pD3rDTytsaUStsOMlA==", + "dev": true, + "requires": { + "@rollup/plugin-inject": "^4.0.0" + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "dependencies": { + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "terser": { + "version": "5.16.5", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.5.tgz", + "integrity": "sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + } + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "setprototypeof": { + "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": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/shady-css-scoped-element/-/shady-css-scoped-element-0.0.2.tgz", + "integrity": "sha512-Dqfl70x6JiwYDujd33ZTbtCK0t52E7+H2swdWQNSTzfsolSa6LJHnTpN4T9OpJJEq4bxuzHRLFO9RBcy/UfrMQ==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shiki": { + "version": "0.9.14", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.14.tgz", + "integrity": "sha512-uLHjjyJdNsMzF9GOF8vlOuZ8BwigiYPraMN5yjC826k8K7Xu90JQcC5GUNrzRibLgT2EOk9597I1IX+jRdA8nw==", + "dev": true, + "requires": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "sinon": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-11.1.2.tgz", + "integrity": "sha512-59237HChms4kg7/sXhiRcUzdSkKuydDeTiamT/jesUVHshBgL8XAmhgFo0GfK6RruMDM/iRSij1EybmMog9cJw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": "^7.1.2", + "@sinonjs/samsam": "^6.0.2", + "diff": "^5.0.0", + "nise": "^5.1.0", + "supports-color": "^7.2.0" + }, + "dependencies": { + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + } + } + }, + "sinon-chai": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.7.0.tgz", + "integrity": "sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==", + "dev": true, + "requires": {} + }, + "skypack": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/skypack/-/skypack-0.3.2.tgz", + "integrity": "sha512-je1pix0QYER6iHuUGbgcafRJT5TI+EGUIBfzBLMqo3Wi22I2SzB9TVHQqwKCw8pzJMuHqhVTFEHc3Ey+ra25Sw==", + "dev": true, + "requires": { + "cacache": "^15.0.0", + "cachedir": "^2.3.0", + "esinstall": "^1.0.0", + "etag": "^1.8.1", + "find-up": "^5.0.0", + "got": "^11.1.4", + "kleur": "^4.1.0", + "mkdirp": "^1.0.3", + "p-queue": "^6.2.1", + "rimraf": "^3.0.0", + "rollup": "^2.23.0", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + } + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "snowpack": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/snowpack/-/snowpack-3.8.6.tgz", + "integrity": "sha512-EZ3Y7RtTiPvxnVFTKPfkvi2PKBrprXCvOHKWQQLBkHonf+xdtG51RiNjtrRLJeCjislAlD6OoeGHUxz76ToGHw==", + "dev": true, + "requires": { + "@npmcli/arborist": "^2.6.4", + "bufferutil": "^4.0.2", + "cachedir": "^2.3.0", + "cheerio": "1.0.0-rc.10", + "chokidar": "^3.4.0", + "cli-spinners": "^2.5.0", + "compressible": "^2.0.18", + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "default-browser-id": "^2.0.0", + "detect-port": "^1.3.0", + "es-module-lexer": "^0.3.24", + "esbuild": "~0.9.0", + "esinstall": "^1.1.7", + "estree-walker": "^2.0.2", + "etag": "^1.8.1", + "execa": "^5.1.1", + "fdir": "^5.0.0", + "find-cache-dir": "^3.3.1", + "find-up": "^5.0.0", + "fsevents": "^2.3.2", + "glob": "^7.1.7", + "httpie": "^1.1.2", + "is-plain-object": "^5.0.0", + "is-reference": "^1.2.1", + "isbinaryfile": "^4.0.6", + "jsonschema": "~1.2.5", + "kleur": "^4.1.1", + "meriyah": "^3.1.6", + "mime-types": "^2.1.26", + "mkdirp": "^1.0.3", + "npm-run-path": "^4.0.1", + "open": "^8.2.1", + "pacote": "^11.3.4", + "periscopic": "^2.0.3", + "picomatch": "^2.3.0", + "postcss": "^8.3.5", + "postcss-modules": "^4.0.0", + "resolve": "^1.20.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "rollup": "~2.37.1", + "signal-exit": "^3.0.3", + "skypack": "^0.3.2", + "slash": "~3.0.0", + "source-map": "^0.7.3", + "strip-ansi": "^6.0.0", + "strip-comments": "^2.0.1", + "utf-8-validate": "^5.0.3", + "ws": "^7.3.0", + "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", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "rollup": { + "version": "2.37.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.37.1.tgz", + "integrity": "sha512-V3ojEeyGeSdrMSuhP3diBb06P+qV4gKQeanbDv+Qh/BZbhdZ7kHV0xAt8Yjk4GFshq/WjO7R4c7DFM20AwTFVQ==", + "dev": true, + "requires": { + "fsevents": "~2.1.2" + }, + "dependencies": { + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + } + } + } + } + }, + "socks": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", + "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", + "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + } + }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + }, + "source-map-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", + "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "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 + } + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "requires": { + "through": "2" + } + }, + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "requires": { + "readable-stream": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "standard-version": { + "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.6.1", + "conventional-recommended-bump": "6.1.0", + "detect-indent": "^6.0.0", + "detect-newline": "^3.1.0", + "dotgitignore": "^2.1.0", + "figures": "^3.1.0", + "find-up": "^5.0.0", + "fs-access": "^1.0.1", + "git-semver-tags": "^4.0.0", + "semver": "^7.1.1", + "stringify-package": "^1.0.1", + "yargs": "^16.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true + }, + "string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "dependencies": { + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + } + } + }, + "stringify-package": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", + "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "systemjs": { + "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.5", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.5.tgz", + "integrity": "sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + } + }, + "table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "requires": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } + }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + } + } + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true + }, + "tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "dependencies": { + "type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true + } + } + }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "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 + } + } + }, + "text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "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-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "treeverse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-1.0.4.tgz", + "integrity": "sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g==", + "dev": true + }, + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "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", + "integrity": "sha512-zKmsCQs4dZaeSKjEA7pLFDv7FHHqAFLPd0Mr//OIJvu8M+4p4bgSFJwZSEBEg3ec9W7RzRz1vi8giiX0+mheBQ==", + "dev": true + }, + "tsconfig-paths": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typedoc": { + "version": "0.21.10", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.21.10.tgz", + "integrity": "sha512-Y0wYIehkjkPfsp3pv86fp3WPHUcOf8pnQUDLwG1PqSccUSqdsv7Pz1Gd5WrTJvXQB2wO1mKlZ8qW8qMiopKyjA==", + "dev": true, + "requires": { + "glob": "^7.1.7", + "handlebars": "^4.7.7", + "lunr": "^2.3.9", + "marked": "^4.0.10", + "minimatch": "^3.0.0", + "progress": "^2.0.3", + "shiki": "^0.9.8", + "typedoc-default-themes": "^0.12.10" + } + }, + "typedoc-default-themes": { + "version": "0.12.10", + "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.12.10.tgz", + "integrity": "sha512-fIS001cAYHkyQPidWXmHuhs8usjP5XVJjWB8oZGqkTowZaz3v7g3KDZeeqE82FBrmkAnIBOY3jgy7lnPnqATbA==", + "dev": true + }, + "typedoc-plugin-markdown": { + "version": "3.10.4", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.10.4.tgz", + "integrity": "sha512-if9w7S9fXLg73AYi/EoRSEhTOZlg3I8mIP8YEmvzSE33VrNXC9/hA0nVcLEwFVJeQY7ay6z67I6kW0KIv7LjeA==", + "dev": true, + "requires": { + "handlebars": "^4.7.7" + } + }, + "typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true + }, + "typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true + }, + "ua-parser-js": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.34.tgz", + "integrity": "sha512-K9mwJm/DaB6mRLZfw6q8IMXipcrmuT6yfhYmwhAkuh+81sChuYstYA+znlgaflUPaYUa3odxKPKGw6Vw/lANew==", + "dev": true + }, + "uglify-js": { + "version": "3.14.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.4.tgz", + "integrity": "sha512-AbiSR44J0GoCeV81+oxcy/jDOElO2Bx3d0MfQCUShq7JRXaM4KtQopZsq2vFv8bCq2yMaGrw1FgygUd03RyRDA==", + "dev": true, + "optional": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "unicode-canonical-property-names-ecmascript": { + "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": "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": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "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": "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 + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "untildify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", + "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0" + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dev": true, + "requires": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "useragent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "dev": true, + "requires": { + "lru-cache": "4.1.x", + "tmp": "0.0.x" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "utf-8-validate": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", + "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", + "dev": true, + "requires": { + "node-gyp-build": "^4.3.0" + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "v8-to-istanbul": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz", + "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + } + }, + "valid-url": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", + "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + } + } + }, + "vm2": { + "version": "3.9.14", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.14.tgz", + "integrity": "sha512-HgvPHYHeQy8+QhzlFryvSteA4uQLBCOub02mgqdR+0bN/akRZ48TGB1v0aCv7ksyc0HXx16AZtMHKS38alc6TA==", + "dev": true, + "requires": { + "acorn": "^8.7.0", + "acorn-walk": "^8.2.0" + }, + "dependencies": { + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true + } + } + }, + "vscode-oniguruma": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz", + "integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==", + "dev": true + }, + "vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "dev": true + }, + "walk-up-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", + "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", + "dev": true + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "web-component-analyzer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/web-component-analyzer/-/web-component-analyzer-1.1.6.tgz", + "integrity": "sha512-1PyBkb/jijDEVE+Pnk3DTmVHD8takipdvAwvZv1V8jIidsSIJ5nhN87Gs+4dpEb1vw48yp8dnbZKkvMYJ+C0VQ==", + "dev": true, + "requires": { + "fast-glob": "^3.2.2", + "ts-simple-type": "~1.0.5", + "typescript": "^3.8.3", + "yargs": "^15.3.1" + }, + "dependencies": { + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + }, + "whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", + "dev": true + }, + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + }, + "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", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, + "wicg-inert": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/wicg-inert/-/wicg-inert-3.1.1.tgz", + "integrity": "sha512-PhBaNh8ur9Xm4Ggy4umelwNIP6pPP1bv3EaWaKqfb/QNme2rdLjm7wIInvV4WhxVHhzA4Spgw9qNSqWtB/ca2A==" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "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": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "requires": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "dependencies": { + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true + } + } + }, + "workbox-background-sync": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz", + "integrity": "sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==", + "dev": true, + "requires": { + "idb": "^7.0.1", + "workbox-core": "6.5.4" + } + }, + "workbox-broadcast-update": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz", + "integrity": "sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==", + "dev": true, + "requires": { + "workbox-core": "6.5.4" + } + }, + "workbox-build": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.4.tgz", + "integrity": "sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==", + "dev": true, + "requires": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.5.4", + "workbox-broadcast-update": "6.5.4", + "workbox-cacheable-response": "6.5.4", + "workbox-core": "6.5.4", + "workbox-expiration": "6.5.4", + "workbox-google-analytics": "6.5.4", + "workbox-navigation-preload": "6.5.4", + "workbox-precaching": "6.5.4", + "workbox-range-requests": "6.5.4", + "workbox-recipes": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4", + "workbox-streams": "6.5.4", + "workbox-sw": "6.5.4", + "workbox-window": "6.5.4" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "requires": { + "whatwg-url": "^7.0.0" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, + "workbox-cacheable-response": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz", + "integrity": "sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==", + "dev": true, + "requires": { + "workbox-core": "6.5.4" + } + }, + "workbox-cli": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-cli/-/workbox-cli-6.5.4.tgz", + "integrity": "sha512-+Cc0jYh25MofhCROZqfQkpYSAGvykyrUVekuuPaLFbJ8qxX/zzX8hRRpglfwxDwokAjz8S20oEph4s+MyQc+Yw==", + "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", + "inquirer": "^7.3.3", + "meow": "^7.1.0", + "ora": "^5.0.0", + "pretty-bytes": "^5.3.0", + "stringify-object": "^3.3.0", + "upath": "^1.2.0", + "update-notifier": "^4.1.0", + "workbox-build": "6.5.4" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^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 + }, + "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" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "workbox-core": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.4.tgz", + "integrity": "sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==", + "dev": true + }, + "workbox-expiration": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.4.tgz", + "integrity": "sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==", + "dev": true, + "requires": { + "idb": "^7.0.1", + "workbox-core": "6.5.4" + } + }, + "workbox-google-analytics": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz", + "integrity": "sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==", + "dev": true, + "requires": { + "workbox-background-sync": "6.5.4", + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "workbox-navigation-preload": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz", + "integrity": "sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==", + "dev": true, + "requires": { + "workbox-core": "6.5.4" + } + }, + "workbox-precaching": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.4.tgz", + "integrity": "sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==", + "dev": true, + "requires": { + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "workbox-range-requests": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz", + "integrity": "sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==", + "dev": true, + "requires": { + "workbox-core": "6.5.4" + } + }, + "workbox-recipes": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.4.tgz", + "integrity": "sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==", + "dev": true, + "requires": { + "workbox-cacheable-response": "6.5.4", + "workbox-core": "6.5.4", + "workbox-expiration": "6.5.4", + "workbox-precaching": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "workbox-routing": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.4.tgz", + "integrity": "sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==", + "dev": true, + "requires": { + "workbox-core": "6.5.4" + } + }, + "workbox-strategies": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.4.tgz", + "integrity": "sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==", + "dev": true, + "requires": { + "workbox-core": "6.5.4" + } + }, + "workbox-streams": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.4.tgz", + "integrity": "sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==", + "dev": true, + "requires": { + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4" + } + }, + "workbox-sw": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.4.tgz", + "integrity": "sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==", + "dev": true + }, + "workbox-window": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.4.tgz", + "integrity": "sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==", + "dev": true, + "requires": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.5.4" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", + "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", + "dev": true, + "requires": {} + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz", + "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "dependencies": { + "yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "dev": true + } + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "requires": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "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 + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "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 + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "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 + }, + "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" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "ylru": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", + "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", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/packages/open-scd/package.json b/packages/open-scd/package.json new file mode 100644 index 0000000000..c7eeb9b676 --- /dev/null +++ b/packages/open-scd/package.json @@ -0,0 +1,170 @@ +{ + "name": "open-scd", + "version": "0.33.0", + "repository": "https://github.com/openscd/open-scd.git", + "directory": "packages/open-scd", + "description": "A bottom-up substation configuration designer for projects described using SCL `IEC 61850-6` Edition 2 or greater.", + "keywords": [ + "SCL", + "substation configuration", + "IEC", + "61850-6", + "SCD", + "editor" + ], + "author": "OMICRON electronics GmbH", + "license": "Apache-2.0", + "main": "open-scd.js", + "module": "open-scd.js", + "type": "module", + "dependencies": { + "@material/mwc-dialog": "0.22.1", + "@material/mwc-drawer": "0.22.1", + "@material/mwc-fab": "0.22.1", + "@material/mwc-formfield": "0.22.1", + "@material/mwc-icon": "0.22.1", + "@material/mwc-icon-button": "0.22.1", + "@material/mwc-icon-button-toggle": "0.22.1", + "@material/mwc-linear-progress": "0.22.1", + "@material/mwc-list": "0.22.1", + "@material/mwc-menu": "0.22.1", + "@material/mwc-select": "0.22.1", + "@material/mwc-snackbar": "0.22.1", + "@material/mwc-switch": "0.22.1", + "@material/mwc-tab": "0.22.1", + "@material/mwc-tab-bar": "0.22.1", + "@material/mwc-textarea": "0.22.1", + "@material/mwc-textfield": "0.22.1", + "@material/mwc-top-app-bar-fixed": "0.22.1", + "ace-custom-element": "^1.6.5", + "lit-element": "2.5.1", + "lit-html": "1.4.1", + "lit-translate": "^1.2.1", + "marked": "^4.0.10", + "panzoom": "^9.4.2" + }, + "scripts": { + "lint:eslint": "eslint --ext .ts,.html . --ignore-path .gitignore", + "format:eslint": "eslint --ext .ts,.html . --fix --ignore-path .gitignore", + "lint:prettier": "prettier \"**/*.js\" \"**/*.ts\" --check --ignore-path .gitignore", + "format:prettier": "prettier \"**/*.js\" \"**/*.ts\" --write --ignore-path .gitignore", + "lint": "npm run lint:eslint && npm run lint:prettier", + "format": "npm run format:eslint && npm run format:prettier", + "test": "web-test-runner --coverage", + "test:snapshot": "web-test-runner --update-snapshots --coverage", + "test:manual": "web-test-runner --manual", + "test:watch": "web-test-runner --watch", + "test:unit": "web-test-runner --watch --group unit", + "test:integration": "web-test-runner --watch --group integration", + "doc:clean": "npx rimraf doc", + "doc:typedoc": "typedoc --plugin none --out doc src", + "doc:wca": "wca src --outDir doc/components", + "doc": "npm run doc:clean && npm run doc:typedoc && npm run doc:wca", + "release": "standard-version", + "release:minor": "standard-version --release-as minor", + "release:patch": "standard-version --release-as patch", + "release:major": "standard-version --release-as major", + "build": "npm run test && npm run build:notest && cp .nojekyll build/", + "build:notest": "npm run doc && snowpack build && workbox generateSW workbox-config.cjs", + "start": "snowpack dev" + }, + "devDependencies": { + "@commitlint/cli": "^13.1.0", + "@commitlint/config-conventional": "^13.1.0", + "@open-wc/eslint-config": "^4.3.0", + "@open-wc/semantic-dom-diff": "^0.19.5", + "@open-wc/testing": "^2.5.33", + "@snowpack/plugin-typescript": "^1.2.1", + "@types/marked": "^2.0.4", + "@types/node": "^16.6.1", + "@typescript-eslint/eslint-plugin": "^4.29.2", + "@typescript-eslint/parser": "^4.29.2", + "@web/dev-server-esbuild": "^0.2.16", + "@web/test-runner": "^0.13.22", + "concurrently": "^6.2.1", + "deepmerge": "^4.2.2", + "es-dev-server": "^2.1.0", + "eslint": "^7.32.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-babel": "^5.3.1", + "eslint-plugin-tsdoc": "^0.2.14", + "fast-check": "^2.19.0", + "husky": "^7.0.1", + "lint-staged": "^11.1.2", + "prettier": "^2.3.2", + "sinon": "^11.1.2", + "snowpack": "3.8.6", + "source-map": "^0.7.4", + "standard-version": "^9.3.1", + "tslib": "^2.3.1", + "typedoc": "^0.21.10", + "typedoc-plugin-markdown": "3.10.4", + "typescript": "4.3.5", + "web-component-analyzer": "^1.1.6", + "workbox-cli": "^6.2.4" + }, + "eslintConfig": { + "extends": [ + "@open-wc/eslint-config", + "eslint-config-prettier" + ] + }, + "prettier": { + "singleQuote": true, + "arrowParens": "avoid" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged", + "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" + } + }, + "lint-staged": { + "*.ts": [ + "eslint --fix", + "prettier --write" + ] + }, + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ] + }, + "standard-version": { + "types": [ + { + "type": "feat", + "section": "Features" + }, + { + "type": "fix", + "section": "Bug Fixes" + }, + { + "type": "chore", + "hidden": true + }, + { + "type": "docs", + "hidden": true + }, + { + "type": "style", + "hidden": true + }, + { + "type": "refactor", + "hidden": true + }, + { + "type": "perf", + "hidden": true + }, + { + "type": "test", + "hidden": true + } + ], + "commitUrlFormat": "https://github.com/openscd/open-scd/commits/{{hash}}" + } +} \ No newline at end of file diff --git a/packages/open-scd/public/ace/ext-searchbox.js b/packages/open-scd/public/ace/ext-searchbox.js new file mode 100644 index 0000000000..fda92f1008 --- /dev/null +++ b/packages/open-scd/public/ace/ext-searchbox.js @@ -0,0 +1,8 @@ +ace.define("ace/ext/searchbox",["require","exports","module","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/keyboard/hash_handler","ace/lib/keys"],function(e,t,n){"use strict";var r=e("../lib/dom"),i=e("../lib/lang"),s=e("../lib/event"),o='.ace_search {background-color: #ddd;color: #666;border: 1px solid #cbcbcb;border-top: 0 none;overflow: hidden;margin: 0;padding: 4px 6px 0 4px;position: absolute;top: 0;z-index: 99;white-space: normal;}.ace_search.left {border-left: 0 none;border-radius: 0px 0px 5px 0px;left: 0;}.ace_search.right {border-radius: 0px 0px 0px 5px;border-right: 0 none;right: 0;}.ace_search_form, .ace_replace_form {margin: 0 20px 4px 0;overflow: hidden;line-height: 1.9;}.ace_replace_form {margin-right: 0;}.ace_search_form.ace_nomatch {outline: 1px solid red;}.ace_search_field {border-radius: 3px 0 0 3px;background-color: white;color: black;border: 1px solid #cbcbcb;border-right: 0 none;outline: 0;padding: 0;font-size: inherit;margin: 0;line-height: inherit;padding: 0 6px;min-width: 17em;vertical-align: top;min-height: 1.8em;box-sizing: content-box;}.ace_searchbtn {border: 1px solid #cbcbcb;line-height: inherit;display: inline-block;padding: 0 6px;background: #fff;border-right: 0 none;border-left: 1px solid #dcdcdc;cursor: pointer;margin: 0;position: relative;color: #666;}.ace_searchbtn:last-child {border-radius: 0 3px 3px 0;border-right: 1px solid #cbcbcb;}.ace_searchbtn:disabled {background: none;cursor: default;}.ace_searchbtn:hover {background-color: #eef1f6;}.ace_searchbtn.prev, .ace_searchbtn.next {padding: 0px 0.7em}.ace_searchbtn.prev:after, .ace_searchbtn.next:after {content: "";border: solid 2px #888;width: 0.5em;height: 0.5em;border-width: 2px 0 0 2px;display:inline-block;transform: rotate(-45deg);}.ace_searchbtn.next:after {border-width: 0 2px 2px 0 ;}.ace_searchbtn_close {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;border-radius: 50%;border: 0 none;color: #656565;cursor: pointer;font: 16px/16px Arial;padding: 0;height: 14px;width: 14px;top: 9px;right: 7px;position: absolute;}.ace_searchbtn_close:hover {background-color: #656565;background-position: 50% 100%;color: white;}.ace_button {margin-left: 2px;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;overflow: hidden;opacity: 0.7;border: 1px solid rgba(100,100,100,0.23);padding: 1px;box-sizing: border-box!important;color: black;}.ace_button:hover {background-color: #eee;opacity:1;}.ace_button:active {background-color: #ddd;}.ace_button.checked {border-color: #3399ff;opacity:1;}.ace_search_options{margin-bottom: 3px;text-align: right;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;clear: both;}.ace_search_counter {float: left;font-family: arial;padding: 0 8px;}',u=e("../keyboard/hash_handler").HashHandler,a=e("../lib/keys"),f=999;r.importCssString(o,"ace_searchbox");var l=function(e,t,n){var i=r.createElement("div");r.buildDom(["div",{"class":"ace_search right"},["span",{action:"hide","class":"ace_searchbtn_close"}],["div",{"class":"ace_search_form"},["input",{"class":"ace_search_field",placeholder:"Search for",spellcheck:"false"}],["span",{action:"findPrev","class":"ace_searchbtn prev"},"\u200b"],["span",{action:"findNext","class":"ace_searchbtn next"},"\u200b"],["span",{action:"findAll","class":"ace_searchbtn",title:"Alt-Enter"},"All"]],["div",{"class":"ace_replace_form"},["input",{"class":"ace_search_field",placeholder:"Replace with",spellcheck:"false"}],["span",{action:"replaceAndFindNext","class":"ace_searchbtn"},"Replace"],["span",{action:"replaceAll","class":"ace_searchbtn"},"All"]],["div",{"class":"ace_search_options"},["span",{action:"toggleReplace","class":"ace_button",title:"Toggle Replace mode",style:"float:left;margin-top:-2px;padding:0 5px;"},"+"],["span",{"class":"ace_search_counter"}],["span",{action:"toggleRegexpMode","class":"ace_button",title:"RegExp Search"},".*"],["span",{action:"toggleCaseSensitive","class":"ace_button",title:"CaseSensitive Search"},"Aa"],["span",{action:"toggleWholeWords","class":"ace_button",title:"Whole Word Search"},"\\b"],["span",{action:"searchInSelection","class":"ace_button",title:"Search In Selection"},"S"]]],i),this.element=i.firstChild,this.setSession=this.setSession.bind(this),this.$init(),this.setEditor(e),r.importCssString(o,"ace_searchbox",e.container)};(function(){this.setEditor=function(e){e.searchBox=this,e.renderer.scroller.appendChild(this.element),this.editor=e},this.setSession=function(e){this.searchRange=null,this.$syncOptions(!0)},this.$initElements=function(e){this.searchBox=e.querySelector(".ace_search_form"),this.replaceBox=e.querySelector(".ace_replace_form"),this.searchOption=e.querySelector("[action=searchInSelection]"),this.replaceOption=e.querySelector("[action=toggleReplace]"),this.regExpOption=e.querySelector("[action=toggleRegexpMode]"),this.caseSensitiveOption=e.querySelector("[action=toggleCaseSensitive]"),this.wholeWordOption=e.querySelector("[action=toggleWholeWords]"),this.searchInput=this.searchBox.querySelector(".ace_search_field"),this.replaceInput=this.replaceBox.querySelector(".ace_search_field"),this.searchCounter=e.querySelector(".ace_search_counter")},this.$init=function(){var e=this.element;this.$initElements(e);var t=this;s.addListener(e,"mousedown",function(e){setTimeout(function(){t.activeInput.focus()},0),s.stopPropagation(e)}),s.addListener(e,"click",function(e){var n=e.target||e.srcElement,r=n.getAttribute("action");r&&t[r]?t[r]():t.$searchBarKb.commands[r]&&t.$searchBarKb.commands[r].exec(t),s.stopPropagation(e)}),s.addCommandKeyListener(e,function(e,n,r){var i=a.keyCodeToString(r),o=t.$searchBarKb.findKeyCommand(n,i);o&&o.exec&&(o.exec(t),s.stopEvent(e))}),this.$onChange=i.delayedCall(function(){t.find(!1,!1)}),s.addListener(this.searchInput,"input",function(){t.$onChange.schedule(20)}),s.addListener(this.searchInput,"focus",function(){t.activeInput=t.searchInput,t.searchInput.value&&t.highlight()}),s.addListener(this.replaceInput,"focus",function(){t.activeInput=t.replaceInput,t.searchInput.value&&t.highlight()})},this.$closeSearchBarKb=new u([{bindKey:"Esc",name:"closeSearchBar",exec:function(e){e.searchBox.hide()}}]),this.$searchBarKb=new u,this.$searchBarKb.bindKeys({"Ctrl-f|Command-f":function(e){var t=e.isReplace=!e.isReplace;e.replaceBox.style.display=t?"":"none",e.replaceOption.checked=!1,e.$syncOptions(),e.searchInput.focus()},"Ctrl-H|Command-Option-F":function(e){if(e.editor.getReadOnly())return;e.replaceOption.checked=!0,e.$syncOptions(),e.replaceInput.focus()},"Ctrl-G|Command-G":function(e){e.findNext()},"Ctrl-Shift-G|Command-Shift-G":function(e){e.findPrev()},esc:function(e){setTimeout(function(){e.hide()})},Return:function(e){e.activeInput==e.replaceInput&&e.replace(),e.findNext()},"Shift-Return":function(e){e.activeInput==e.replaceInput&&e.replace(),e.findPrev()},"Alt-Return":function(e){e.activeInput==e.replaceInput&&e.replaceAll(),e.findAll()},Tab:function(e){(e.activeInput==e.replaceInput?e.searchInput:e.replaceInput).focus()}}),this.$searchBarKb.addCommands([{name:"toggleRegexpMode",bindKey:{win:"Alt-R|Alt-/",mac:"Ctrl-Alt-R|Ctrl-Alt-/"},exec:function(e){e.regExpOption.checked=!e.regExpOption.checked,e.$syncOptions()}},{name:"toggleCaseSensitive",bindKey:{win:"Alt-C|Alt-I",mac:"Ctrl-Alt-R|Ctrl-Alt-I"},exec:function(e){e.caseSensitiveOption.checked=!e.caseSensitiveOption.checked,e.$syncOptions()}},{name:"toggleWholeWords",bindKey:{win:"Alt-B|Alt-W",mac:"Ctrl-Alt-B|Ctrl-Alt-W"},exec:function(e){e.wholeWordOption.checked=!e.wholeWordOption.checked,e.$syncOptions()}},{name:"toggleReplace",exec:function(e){e.replaceOption.checked=!e.replaceOption.checked,e.$syncOptions()}},{name:"searchInSelection",exec:function(e){e.searchOption.checked=!e.searchRange,e.setSearchRange(e.searchOption.checked&&e.editor.getSelectionRange()),e.$syncOptions()}}]),this.setSearchRange=function(e){this.searchRange=e,e?this.searchRangeMarker=this.editor.session.addMarker(e,"ace_active-line"):this.searchRangeMarker&&(this.editor.session.removeMarker(this.searchRangeMarker),this.searchRangeMarker=null)},this.$syncOptions=function(e){r.setCssClass(this.replaceOption,"checked",this.searchRange),r.setCssClass(this.searchOption,"checked",this.searchOption.checked),this.replaceOption.textContent=this.replaceOption.checked?"-":"+",r.setCssClass(this.regExpOption,"checked",this.regExpOption.checked),r.setCssClass(this.wholeWordOption,"checked",this.wholeWordOption.checked),r.setCssClass(this.caseSensitiveOption,"checked",this.caseSensitiveOption.checked);var t=this.editor.getReadOnly();this.replaceOption.style.display=t?"none":"",this.replaceBox.style.display=this.replaceOption.checked&&!t?"":"none",this.find(!1,!1,e)},this.highlight=function(e){this.editor.session.highlight(e||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},this.find=function(e,t,n){var i=this.editor.find(this.searchInput.value,{skipCurrent:e,backwards:t,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked,preventScroll:n,range:this.searchRange}),s=!i&&this.searchInput.value;r.setCssClass(this.searchBox,"ace_nomatch",s),this.editor._emit("findSearchBox",{match:!s}),this.highlight(),this.updateCounter()},this.updateCounter=function(){var e=this.editor,t=e.$search.$options.re,n=0,r=0;if(t){var i=this.searchRange?e.session.getTextRange(this.searchRange):e.getValue(),s=e.session.doc.positionToIndex(e.selection.anchor);this.searchRange&&(s-=e.session.doc.positionToIndex(this.searchRange.start));var o=t.lastIndex=0,u;while(u=t.exec(i)){n++,o=u.index,o<=s&&r++;if(n>f)break;if(!u[0]){t.lastIndex=o+=1;if(o>=i.length)break}}}this.searchCounter.textContent=r+" of "+(n>f?f+"+":n)},this.findNext=function(){this.find(!0,!1)},this.findPrev=function(){this.find(!0,!0)},this.findAll=function(){var e=this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked}),t=!e&&this.searchInput.value;r.setCssClass(this.searchBox,"ace_nomatch",t),this.editor._emit("findSearchBox",{match:!t}),this.highlight(),this.hide()},this.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},this.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},this.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},this.hide=function(){this.active=!1,this.setSearchRange(null),this.editor.off("changeSession",this.setSession),this.element.style.display="none",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},this.show=function(e,t){this.active=!0,this.editor.on("changeSession",this.setSession),this.element.style.display="",this.replaceOption.checked=t,e&&(this.searchInput.value=e),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb),this.$syncOptions(!0)},this.isFocused=function(){var e=document.activeElement;return e==this.searchInput||e==this.replaceInput}}).call(l.prototype),t.SearchBox=l,t.Search=function(e,t){var n=e.searchBox||new l(e);n.show(e.session.getTextRange(),t)}}); (function() { + ace.require(["ace/ext/searchbox"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/packages/open-scd/public/ace/mode-xml.js b/packages/open-scd/public/ace/mode-xml.js new file mode 100644 index 0000000000..709c38bf52 --- /dev/null +++ b/packages/open-scd/public/ace/mode-xml.js @@ -0,0 +1,8 @@ +ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(e){var t="[_:a-zA-Z\u00c0-\uffff][-_:.a-zA-Z0-9\u00c0-\uffff]*";this.$rules={start:[{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:["punctuation.instruction.xml","keyword.instruction.xml"],regex:"(<\\?)("+t+")",next:"processing_instruction"},{token:"comment.start.xml",regex:"<\\!--",next:"comment"},{token:["xml-pe.doctype.xml","xml-pe.doctype.xml"],regex:"(<\\!)(DOCTYPE)(?=[\\s])",next:"doctype",caseInsensitive:!0},{include:"tag"},{token:"text.end-tag-open.xml",regex:"",next:"start"}],doctype:[{include:"whitespace"},{include:"string"},{token:"xml-pe.doctype.xml",regex:">",next:"start"},{token:"xml-pe.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"punctuation.int-subset",regex:"\\[",push:"int_subset"}],int_subset:[{token:"text.xml",regex:"\\s+"},{token:"punctuation.int-subset.xml",regex:"]",next:"pop"},{token:["punctuation.markup-decl.xml","keyword.markup-decl.xml"],regex:"(<\\!)("+t+")",push:[{token:"text",regex:"\\s+"},{token:"punctuation.markup-decl.xml",regex:">",next:"pop"},{include:"string"}]}],cdata:[{token:"string.cdata.xml",regex:"\\]\\]>",next:"start"},{token:"text.xml",regex:"\\s+"},{token:"text.xml",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment.end.xml",regex:"-->",next:"start"},{defaultToken:"comment.xml"}],reference:[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],attr_reference:[{token:"constant.language.escape.reference.attribute-value.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],tag:[{token:["meta.tag.punctuation.tag-open.xml","meta.tag.punctuation.end-tag-open.xml","meta.tag.tag-name.xml"],regex:"(?:(<)|(",next:"start"}]}],tag_whitespace:[{token:"text.tag-whitespace.xml",regex:"\\s+"}],whitespace:[{token:"text.whitespace.xml",regex:"\\s+"}],string:[{token:"string.xml",regex:"'",push:[{token:"string.xml",regex:"'",next:"pop"},{defaultToken:"string.xml"}]},{token:"string.xml",regex:'"',push:[{token:"string.xml",regex:'"',next:"pop"},{defaultToken:"string.xml"}]}],attributes:[{token:"entity.other.attribute-name.xml",regex:t},{token:"keyword.operator.attribute-equals.xml",regex:"="},{include:"tag_whitespace"},{include:"attribute_value"}],attribute_value:[{token:"string.attribute-value.xml",regex:"'",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:["meta.tag.punctuation.tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(<)("+n+"(?=\\s|>|$))",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:t+"start"}]}),this.$rules[n+"-end"]=[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:["meta.tag.punctuation.end-tag-open.xml","meta.tag."+n+".tag-name.xml"],regex:"(|$))",next:n+"-end"},{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\["},{token:"string.cdata.xml",regex:"\\]\\]>"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";function u(e,t){return e&&e.type.lastIndexOf(t+".xml")>-1}var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),a=function(){this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==""&&a!=="'"&&a!='"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,"attribute-value")||u(p,"string")))return{text:"",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,"tag-whitespace")||u(p,"whitespace"))p=h.stepBackward();var d=!c||c.match(/\s/);if(u(p,"attribute-equals")&&(d||c==">")||u(p,"decl-attribute-equals")&&(d||c=="?"))return{text:o+o,selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add("autoclosing","insertion",function(e,t,n,r,i){if(i==">"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,"tag-name")||u(f,"tag-whitespace")||u(f,"attribute-name")||u(f,"attribute-equals")||u(f,"attribute-value")))return;if(u(f,"reference.attribute-value"))return;if(u(f,"attribute-value")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,"tag-name")){f=a.stepBackward();if(f.value=="<"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),"end-tag-open"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,n,r,i){if(i=="\n"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf("tag-close")!==-1){if(f.value=="/>")return;while(f&&f.type.indexOf("tag-name")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf("end-tag")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value==="-1}var r=e("../../lib/oop"),i=e("../../lib/lang"),s=e("../../range").Range,o=e("./fold_mode").FoldMode,u=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName="",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t=="markbeginend"?"end":"":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?"":this._findEndTagInLine(e,n,r.tagName,r.end.column)?"":"start":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/";break}}return r}if(l(s,"tag-close"))return r.selfClosing=s.value=="/>",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,"tag-open"))return n.closing=l(t,"end-tag-open"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,"tag-name")?n.tagName=t.value:l(t,"tag-close")&&(n.selfClosing=t.value=="/>",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column"},this.createWorker=function(e){var t=new f(["ace"],"ace/mode/xml_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("error",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/xml"}.call(l.prototype),t.Mode=l}); (function() { + ace.require(["ace/mode/xml"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/packages/open-scd/public/ace/theme-solarized_dark.js b/packages/open-scd/public/ace/theme-solarized_dark.js new file mode 100644 index 0000000000..ee1ac318fc --- /dev/null +++ b/packages/open-scd/public/ace/theme-solarized_dark.js @@ -0,0 +1,8 @@ +ace.define("ace/theme/solarized_dark",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-solarized-dark",t.cssText=".ace-solarized-dark .ace_gutter {background: #01313f;color: #d0edf7}.ace-solarized-dark .ace_print-margin {width: 1px;background: #33555E}.ace-solarized-dark {background-color: #002B36;color: #93A1A1}.ace-solarized-dark .ace_entity.ace_other.ace_attribute-name,.ace-solarized-dark .ace_storage {color: #93A1A1}.ace-solarized-dark .ace_cursor,.ace-solarized-dark .ace_string.ace_regexp {color: #D30102}.ace-solarized-dark .ace_marker-layer .ace_active-line,.ace-solarized-dark .ace_marker-layer .ace_selection {background: rgba(255, 255, 255, 0.1)}.ace-solarized-dark.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #002B36;}.ace-solarized-dark .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-solarized-dark .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(147, 161, 161, 0.50)}.ace-solarized-dark .ace_gutter-active-line {background-color: #0d3440}.ace-solarized-dark .ace_marker-layer .ace_selected-word {border: 1px solid #073642}.ace-solarized-dark .ace_invisible {color: rgba(147, 161, 161, 0.50)}.ace-solarized-dark .ace_keyword,.ace-solarized-dark .ace_meta,.ace-solarized-dark .ace_support.ace_class,.ace-solarized-dark .ace_support.ace_type {color: #859900}.ace-solarized-dark .ace_constant.ace_character,.ace-solarized-dark .ace_constant.ace_other {color: #CB4B16}.ace-solarized-dark .ace_constant.ace_language {color: #B58900}.ace-solarized-dark .ace_constant.ace_numeric {color: #D33682}.ace-solarized-dark .ace_fold {background-color: #268BD2;border-color: #93A1A1}.ace-solarized-dark .ace_entity.ace_name.ace_function,.ace-solarized-dark .ace_entity.ace_name.ace_tag,.ace-solarized-dark .ace_support.ace_function,.ace-solarized-dark .ace_variable,.ace-solarized-dark .ace_variable.ace_language {color: #268BD2}.ace-solarized-dark .ace_string {color: #2AA198}.ace-solarized-dark .ace_comment {font-style: italic;color: #657B83}.ace-solarized-dark .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNg0Db1ZVCxc/sPAAd4AlUHlLenAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)}); (function() { + ace.require(["ace/theme/solarized_dark"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/packages/open-scd/public/ace/theme-solarized_light.js b/packages/open-scd/public/ace/theme-solarized_light.js new file mode 100644 index 0000000000..a66ca4c6a8 --- /dev/null +++ b/packages/open-scd/public/ace/theme-solarized_light.js @@ -0,0 +1,8 @@ +ace.define("ace/theme/solarized_light",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-solarized-light",t.cssText=".ace-solarized-light .ace_gutter {background: #fbf1d3;color: #333}.ace-solarized-light .ace_print-margin {width: 1px;background: #e8e8e8}.ace-solarized-light {background-color: #FDF6E3;color: #586E75}.ace-solarized-light .ace_cursor {color: #000000}.ace-solarized-light .ace_marker-layer .ace_selection {background: rgba(7, 54, 67, 0.09)}.ace-solarized-light.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #FDF6E3;}.ace-solarized-light .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-solarized-light .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(147, 161, 161, 0.50)}.ace-solarized-light .ace_marker-layer .ace_active-line {background: #EEE8D5}.ace-solarized-light .ace_gutter-active-line {background-color : #EDE5C1}.ace-solarized-light .ace_marker-layer .ace_selected-word {border: 1px solid #7f9390}.ace-solarized-light .ace_invisible {color: rgba(147, 161, 161, 0.50)}.ace-solarized-light .ace_keyword,.ace-solarized-light .ace_meta,.ace-solarized-light .ace_support.ace_class,.ace-solarized-light .ace_support.ace_type {color: #859900}.ace-solarized-light .ace_constant.ace_character,.ace-solarized-light .ace_constant.ace_other {color: #CB4B16}.ace-solarized-light .ace_constant.ace_language {color: #B58900}.ace-solarized-light .ace_constant.ace_numeric {color: #D33682}.ace-solarized-light .ace_fold {background-color: #268BD2;border-color: #586E75}.ace-solarized-light .ace_entity.ace_name.ace_function,.ace-solarized-light .ace_entity.ace_name.ace_tag,.ace-solarized-light .ace_support.ace_function,.ace-solarized-light .ace_variable,.ace-solarized-light .ace_variable.ace_language {color: #268BD2}.ace-solarized-light .ace_storage {color: #073642}.ace-solarized-light .ace_string {color: #2AA198}.ace-solarized-light .ace_string.ace_regexp {color: #D30102}.ace-solarized-light .ace_comment,.ace-solarized-light .ace_entity.ace_other.ace_attribute-name {color: #93A1A1}.ace-solarized-light .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHjy8NJ/AAjgA5fzQUmBAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)}); (function() { + ace.require(["ace/theme/solarized_light"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); + \ No newline at end of file diff --git a/packages/open-scd/public/ace/worker-xml.js b/packages/open-scd/public/ace/worker-xml.js new file mode 100644 index 0000000000..e3ad3018ee --- /dev/null +++ b/packages/open-scd/public/ace/worker-xml.js @@ -0,0 +1 @@ +"no use strict";!function(e){function t(e,t){var n=e,r="";while(n){var i=t[n];if(typeof i=="string")return i+r;if(i)return i.location.replace(/\/*$/,"/")+(r||i.main||i.name);if(i===!1)return"";var s=n.lastIndexOf("/");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!="undefined"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:"log",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:"error",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf("!")!==-1){var r=n.split("!");return e.normalizeModule(t,r[0])+"!"+e.normalizeModule(t,r[1])}if(n.charAt(0)=="."){var i=t.split("/").slice(0,-1).join("/");n=(i?i+"/":"")+n;while(n.indexOf(".")!==-1&&s!=n){var s=n;n=n.replace(/^\.\//,"").replace(/\/\.\//,"/").replace(/[^\/]+\/\.\.\//,"")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error("worker.js require() accepts only (parentId, id) as arguments");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log("unable to load "+i);var o=t(i,e.require.tlns);return o.slice(-3)!=".js"&&(o+=".js"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!="string"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!="function"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=["require","exports","module"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case"require":return i;case"exports":return e.exports;case"module":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require("ace/lib/event_emitter").EventEmitter,r=e.require("ace/lib/oop"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:"call",id:t,data:e})},this.emit=function(e,t){postMessage({type:"event",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error("Unknown command:"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),ace.define("ace/lib/oop",[],function(e,t,n){"use strict";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define("ace/lib/lang",[],function(e,t,n){"use strict";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){var n="";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\s\s*/,i=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(r,"")},t.stringTrimRight=function(e){return e.replace(i,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e=="object"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e=="object"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?tthis.end.column?1:0:ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.rowt)var r={row:t+1,column:0};else if(this.start.row=0&&t.row=0&&t.column<=e[t.row].length}function s(e,t){t.action!="insert"&&t.action!="remove"&&r(t,"delta.action must be 'insert' or 'remove'"),t.lines instanceof Array||r(t,"delta.lines must be an Array"),(!t.start||!t.end)&&r(t,"delta.start/end must be an present");var n=t.start;i(e,t.start)||r(t,"delta.start must be contained in document");var s=t.end;t.action=="remove"&&!i(e,s)&&r(t,"delta.end must contained in document for 'remove' actions");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,"delta.range must match delta lines")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||"";switch(t.action){case"insert":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case"remove":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define("ace/lib/event_emitter",[],function(e,t,n){"use strict";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!="object"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;othis.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal("change",{old:i,value:r})},this.detach=function(){this.document.off("change",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define("ace/document",[],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./apply_delta").applyDelta,s=e("./lib/event_emitter").EventEmitter,o=e("./range").Range,u=e("./anchor").Anchor,a=function(e){this.$lines=[""],e.length===0?this.$lines=[""]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},"aaa".split(/a/).length===0?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal("changeNewLineMode")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e=="\r\n"||e=="\r"||e=="\n"},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||"").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(e,["",""])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:"insert",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e0,r=t=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:"remove",lines:["",""]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action=="insert";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal("change",e))},this.$safeApplyDelta=function(e){var t=this.$lines.length;(e.action=="remove"&&e.start.row65535){e-=65536;var t=55296+(e>>10),n=56320+(e&1023);return String.fromCharCode(t,n)}return String.fromCharCode(e)}function o(e){var t=e.slice(1,-1);return t in n?n[t]:t.charAt(0)==="#"?s(parseInt(t.substr(1).replace("x","0x"))):(i.error("entity not found:"+e),e)}function u(t){var n=e.substring(v,t).replace(/&#?\w+;/g,o);h&&a(v),r.characters(n,0,t-v),v=t}function a(t,n){while(t>=l&&(n=c.exec(e)))f=n.index,l=f+n[0].length,h.lineNumber++;h.columnNumber=t-f+1}var f=0,l=0,c=/.+(?:\r\n?|\n)|.*$/g,h=r.locator,p=[{currentNSMap:t}],d={},v=0;for(;;){var E=e.indexOf("<",v);if(E<0){if(!e.substr(v).match(/^\s*$/)){var N=r.document,C=N.createTextNode(e.substr(v));N.appendChild(C),r.currentElement=C}return}E>v&&u(E);switch(e.charAt(E+1)){case"/":var k=e.indexOf(">",E+3),L=e.substring(E+2,k),A;if(!(p.length>1)){i.fatalError("end tag name not found for: "+L);break}A=p.pop();var O=A.localNSMap;A.tagName!=L&&i.fatalError("end tag name: "+L+" does not match the current start tagName: "+A.tagName),r.endElement(A.uri,A.localName,L);if(O)for(var M in O)r.endPrefixMapping(M);k++;break;case"?":h&&a(E),k=x(e,E,r);break;case"!":h&&a(E),k=S(e,E,r,i);break;default:try{h&&a(E);var _=new T,k=g(e,E,_,o,i),D=_.length;if(D&&h){var P=m(h,{});for(var E=0;E0))throw new Error("attribute value no end '"+g+"' match");d=e.slice(t,v).replace(/&#?\w+;/g,r),n.add(s,d,t-1),m=c}else{if(m!=l)throw new Error('attribute value must after "="');d=e.slice(t,v).replace(/&#?\w+;/g,r),n.add(s,d,t),i.warning('attribute "'+s+'" missed start quot('+g+")!!"),t=v+1,m=c}break;case"/":switch(m){case o:n.setTagName(e.slice(t,v));case c:case h:case p:m=p,n.closed=!0;case l:case u:case a:break;default:throw new Error("attribute invalid close char('/')")}break;case"":i.error("unexpected end of input");case">":switch(m){case o:n.setTagName(e.slice(t,v));case c:case h:case p:break;case l:case u:d=e.slice(t,v),d.slice(-1)==="/"&&(n.closed=!0,d=d.slice(0,-1));case a:m===a&&(d=s),m==l?(i.warning('attribute "'+d+'" missed quot(")!!'),n.add(s,d.replace(/&#?\w+;/g,r),t)):(i.warning('attribute "'+d+'" missed value!! "'+d+'" instead!!'),n.add(d,d,t));break;case f:throw new Error("attribute value missed!!")}return v;case"\u0080":g=" ";default:if(g<=" ")switch(m){case o:n.setTagName(e.slice(t,v)),m=h;break;case u:s=e.slice(t,v),m=a;break;case l:var d=e.slice(t,v).replace(/&#?\w+;/g,r);i.warning('attribute "'+d+'" missed quot(")!!'),n.add(s,d,t);case c:m=h}else switch(m){case a:i.warning('attribute "'+s+'" missed value!! "'+s+'" instead!!'),n.add(s,s,t),t=v,m=u;break;case c:i.warning('attribute space is required"'+s+'"!!');case h:m=u,t=v;break;case f:m=l,t=v;break;case p:throw new Error("elements closed character '/' and '>' must be connected to")}}v++}}function y(e,t,n){var r=e.tagName,i=null,s=n[n.length-1].currentNSMap,o=e.length;while(o--){var u=e[o],a=u.qName,f=u.value,l=a.indexOf(":");if(l>0)var c=u.prefix=a.slice(0,l),h=a.slice(l+1),p=c==="xmlns"&&h;else h=a,c=null,p=a==="xmlns"&&"";u.localName=h,p!==!1&&(i==null&&(i={},E(s,s={})),s[p]=i[p]=f,u.uri="http://www.w3.org/2000/xmlns/",t.startPrefixMapping(p,f))}var o=e.length;while(o--){u=e[o];var c=u.prefix;c&&(c==="xml"&&(u.uri="http://www.w3.org/XML/1998/namespace"),c!=="xmlns"&&(u.uri=s[c]))}var l=r.indexOf(":");l>0?(c=e.prefix=r.slice(0,l),h=e.localName=r.slice(l+1)):(c=null,h=e.localName=r);var d=e.uri=s[c||""];t.startElement(d,h,r,e);if(e.closed){t.endElement(d,h,r);if(i)for(c in i)t.endPrefixMapping(c)}else e.currentNSMap=s,e.localNSMap=i,n.push(e)}function b(e,t,n,r,i){if(/^(?:script|textarea)$/i.test(n)){var s=e.indexOf("",t),o=e.substring(t+1,s);if(/[&<]/.test(o))return/^script$/i.test(n)?(i.characters(o,0,o.length),s):(o=o.replace(/&#?\w+;/g,r),i.characters(o,0,o.length),s)}return t+1}function w(e,t,n,r){var i=r[n];return i==null&&(i=r[n]=e.lastIndexOf("")),i",t+4);return s>t?(n.comment(e,t+4,s-t-4),s+3):(r.error("Unclosed comment"),-1)}return-1;default:if(e.substr(t+3,6)=="CDATA["){var s=e.indexOf("]]>",t+9);return s>t?(n.startCDATA(),n.characters(e,t+9,s-t-9),n.endCDATA(),s+3):(r.error("Unclosed CDATA"),-1)}var o=C(e,t),u=o.length;if(u>1&&/!doctype/i.test(o[0][0])){var a=o[1][0],f=u>3&&/^public$/i.test(o[2][0])&&o[3][0],l=u>4&&o[4][0],c=o[u-1];return n.startDTD(a,f&&f.replace(/^(['"])(.*?)\1$/,"$2"),l&&l.replace(/^(['"])(.*?)\1$/,"$2")),n.endDTD(),c.index+c[0].length}}return-1}function x(e,t,n){var r=e.indexOf("?>",t);if(r){var i=e.substring(t,r).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);if(i){var s=i[0].length;return n.processingInstruction(i[1],i[2]),r+2}return-1}return-1}function T(e){}function N(e,t){return e.__proto__=t,e}function C(e,t){var n,r=[],i=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;i.lastIndex=t,i.exec(e);while(n=i.exec(e)){r.push(n);if(n[1])return r}}var r=/[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,i=new RegExp("[\\-\\.0-9"+r.source.slice(1,-1)+"\u00b7\u0300-\u036f\\ux203F-\u2040]"),s=new RegExp("^"+r.source+i.source+"*(?::"+r.source+i.source+"*)?$"),o=0,u=1,a=2,f=3,l=4,c=5,h=6,p=7;return d.prototype={parse:function(e,t,n){var r=this.domBuilder;r.startDocument(),E(t,t={}),v(e,t,n,r,this.errorHandler),r.endDocument()}},T.prototype={setTagName:function(e){if(!s.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},add:function(e,t,n){if(!s.test(e))throw new Error("invalid attribute:"+e);this[this.length++]={qName:e,value:t,offset:n}},length:0,getLocalName:function(e){return this[e].localName},getOffset:function(e){return this[e].offset},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},N({},N.prototype)instanceof N||(N=function(e,t){function n(){}n.prototype=t,n=new n;for(t in e)n[t]=e[t];return n}),d}),ace.define("ace/mode/xml/dom",[],function(e,t,n){function r(e,t){for(var n in e)t[n]=e[n]}function i(e,t){var n=function(){},i=e.prototype;if(Object.create){var s=Object.create(t.prototype);i.__proto__=s}i instanceof t||(n.prototype=t.prototype,n=new n,r(i,n),e.prototype=i=n),i.constructor!=e&&(typeof e!="function"&&console.error("unknown Class:"+e),i.constructor=e)}function B(e,t){if(t instanceof Error)var n=t;else n=this,Error.call(this,w[e]),this.message=w[e],Error.captureStackTrace&&Error.captureStackTrace(this,B);return n.code=e,t&&(this.message=this.message+": "+t),n}function j(){}function F(e,t){this._node=e,this._refresh=t,I(this)}function I(e){var t=e._node._inc||e._node.ownerDocument._inc;if(e._inc!=t){var n=e._refresh(e._node);gt(e,"length",n.length),r(n,e),e._inc=t}}function q(){}function R(e,t){var n=e.length;while(n--)if(e[n]===t)return n}function U(e,t,n,r){r?t[R(t,r)]=n:t[t.length++]=n;if(e){n.ownerElement=e;var i=e.ownerDocument;i&&(r&&Q(i,e,r),K(i,e,n))}}function z(e,t,n){var r=R(t,n);if(!(r>=0))throw new B(L,new Error);var i=t.length-1;while(r"&&">"||e=="&"&&"&"||e=='"'&&"""||"&#"+e.charCodeAt()+";"}function $(e,t){if(t(e))return!0;if(e=e.firstChild)do if($(e,t))return!0;while(e=e.nextSibling)}function J(){}function K(e,t,n){e&&e._inc++;var r=n.namespaceURI;r=="http://www.w3.org/2000/xmlns/"&&(t._nsMap[n.prefix?n.localName:""]=n.value)}function Q(e,t,n,r){e&&e._inc++;var i=n.namespaceURI;i=="http://www.w3.org/2000/xmlns/"&&delete t._nsMap[n.prefix?n.localName:""]}function G(e,t,n){if(e&&e._inc){e._inc++;var r=t.childNodes;if(n)r[r.length++]=n;else{var i=t.firstChild,s=0;while(i)r[s++]=i,i=i.nextSibling;r.length=s}}}function Y(e,t){var n=t.previousSibling,r=t.nextSibling;return n?n.nextSibling=r:e.firstChild=r,r?r.previousSibling=n:e.lastChild=n,G(e.ownerDocument,e),t}function Z(e,t,n){var r=t.parentNode;r&&r.removeChild(t);if(t.nodeType===g){var i=t.firstChild;if(i==null)return t;var s=t.lastChild}else i=s=t;var o=n?n.previousSibling:e.lastChild;i.previousSibling=o,s.nextSibling=n,o?o.nextSibling=i:e.firstChild=i,n==null?e.lastChild=s:n.previousSibling=s;do i.parentNode=e;while(i!==s&&(i=i.nextSibling));return G(e.ownerDocument||e,e),t.nodeType==g&&(t.firstChild=t.lastChild=null),t}function et(e,t){var n=t.parentNode;if(n){var r=e.lastChild;n.removeChild(t);var r=e.lastChild}var r=e.lastChild;return t.parentNode=e,t.previousSibling=r,t.nextSibling=null,r?r.nextSibling=t:e.firstChild=t,e.lastChild=t,G(e.ownerDocument,e,t),t}function tt(){this._nsMap={}}function nt(){}function rt(){}function it(){}function st(){}function ot(){}function ut(){}function at(){}function ft(){}function lt(){}function ct(){}function ht(){}function pt(){}function dt(e,t){switch(e.nodeType){case u:var n=e.attributes,r=n.length,i=e.firstChild,o=e.tagName,h=s===e.namespaceURI;t.push("<",o);for(var y=0;y");if(h&&/^script$/i.test(o))i&&t.push(i.data);else while(i)dt(i,t),i=i.nextSibling;t.push("")}else t.push("/>");return;case v:case g:var i=e.firstChild;while(i)dt(i,t),i=i.nextSibling;return;case a:return t.push(" ",e.name,'="',e.value.replace(/[<&"]/g,V),'"');case f:return t.push(e.data.replace(/[<&]/g,V));case l:return t.push("");case d:return t.push("");case m:var b=e.publicId,w=e.systemId;t.push("');else if(w&&w!=".")t.push(' SYSTEM "',w,'">');else{var E=e.internalSubset;E&&t.push(" [",E,"]"),t.push(">")}return;case p:return t.push("");case c:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function vt(e,t,n){var r;switch(t.nodeType){case u:r=t.cloneNode(!1),r.ownerDocument=e;case g:break;case a:n=!0}r||(r=t.cloneNode(!1)),r.ownerDocument=e,r.parentNode=null;if(n){var i=t.firstChild;while(i)r.appendChild(vt(e,i,n)),i=i.nextSibling}return r}function mt(e,t,n){var r=new t.constructor;for(var i in t){var s=t[i];typeof s!="object"&&s!=r[i]&&(r[i]=s)}t.childNodes&&(r.childNodes=new j),r.ownerDocument=e;switch(r.nodeType){case u:var o=t.attributes,f=r.attributes=new q,l=o.length;f._ownerElement=r;for(var c=0;c0},lookupPrefix:function(e){var t=this;while(t){var n=t._nsMap;if(n)for(var r in n)if(n[r]==e)return r;t=t.nodeType==2?t.ownerDocument:t.parentNode}return null},lookupNamespaceURI:function(e){var t=this;while(t){var n=t._nsMap;if(n&&e in n)return n[e];t=t.nodeType==2?t.ownerDocument:t.parentNode}return null},isDefaultNamespace:function(e){var t=this.lookupPrefix(e);return t==null}},r(o,X),r(o,X.prototype),J.prototype={nodeName:"#document",nodeType:v,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType==g){var n=e.firstChild;while(n){var r=n.nextSibling;this.insertBefore(n,t),n=r}return e}return this.documentElement==null&&e.nodeType==1&&(this.documentElement=e),Z(this,e,t),e.ownerDocument=this,e},removeChild:function(e){return this.documentElement==e&&(this.documentElement=null),Y(this,e)},importNode:function(e,t){return vt(this,e,t)},getElementById:function(e){var t=null;return $(this.documentElement,function(n){if(n.nodeType==1&&n.getAttribute("id")==e)return t=n,!0}),t},createElement:function(e){var t=new tt;t.ownerDocument=this,t.nodeName=e,t.tagName=e,t.childNodes=new j;var n=t.attributes=new q;return n._ownerElement=t,t},createDocumentFragment:function(){var e=new ct;return e.ownerDocument=this,e.childNodes=new j,e},createTextNode:function(e){var t=new it;return t.ownerDocument=this,t.appendData(e),t},createComment:function(e){var t=new st;return t.ownerDocument=this,t.appendData(e),t},createCDATASection:function(e){var t=new ot;return t.ownerDocument=this,t.appendData(e),t},createProcessingInstruction:function(e,t){var n=new ht;return n.ownerDocument=this,n.tagName=n.target=e,n.nodeValue=n.data=t,n},createAttribute:function(e){var t=new nt;return t.ownerDocument=this,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){var t=new lt;return t.ownerDocument=this,t.nodeName=e,t},createElementNS:function(e,t){var n=new tt,r=t.split(":"),i=n.attributes=new q;return n.childNodes=new j,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=e,r.length==2?(n.prefix=r[0],n.localName=r[1]):n.localName=t,i._ownerElement=n,n},createAttributeNS:function(e,t){var n=new nt,r=t.split(":");return n.ownerDocument=this,n.nodeName=t,n.name=t,n.namespaceURI=e,n.specified=!0,r.length==2?(n.prefix=r[0],n.localName=r[1]):n.localName=t,n}},i(J,X),tt.prototype={nodeType:u,hasAttribute:function(e){return this.getAttributeNode(e)!=null},getAttribute:function(e){var t=this.getAttributeNode(e);return t&&t.value||""},getAttributeNode:function(e){return this.attributes.getNamedItem(e)},setAttribute:function(e,t){var n=this.ownerDocument.createAttribute(e);n.value=n.nodeValue=""+t,this.setAttributeNode(n)},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},appendChild:function(e){return e.nodeType===g?this.insertBefore(e,null):et(this,e)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);n&&this.removeAttributeNode(n)},hasAttributeNS:function(e,t){return this.getAttributeNodeNS(e,t)!=null},getAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);return n&&n.value||""},setAttributeNS:function(e,t,n){var r=this.ownerDocument.createAttributeNS(e,t);r.value=r.nodeValue=""+n,this.setAttributeNode(r)},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByTagName:function(e){return new F(this,function(t){var n=[];return $(t,function(r){r!==t&&r.nodeType==u&&(e==="*"||r.tagName==e)&&n.push(r)}),n})},getElementsByTagNameNS:function(e,t){return new F(this,function(n){var r=[];return $(n,function(i){i!==n&&i.nodeType===u&&(e==="*"||i.namespaceURI===e)&&(t==="*"||i.localName==t)&&r.push(i)}),r})}},J.prototype.getElementsByTagName=tt.prototype.getElementsByTagName,J.prototype.getElementsByTagNameNS=tt.prototype.getElementsByTagNameNS,i(tt,X),nt.prototype.nodeType=a,i(nt,X),rt.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},appendChild:function(e){throw new Error(w[3])},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,n){var r=this.data.substring(0,e),i=this.data.substring(e+t);n=r+n+i,this.nodeValue=this.data=n,this.length=n.length}},i(rt,X),it.prototype={nodeName:"#text",nodeType:f,splitText:function(e){var t=this.data,n=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var r=this.ownerDocument.createTextNode(n);return this.parentNode&&this.parentNode.insertBefore(r,this.nextSibling),r}},i(it,rt),st.prototype={nodeName:"#comment",nodeType:d},i(st,rt),ot.prototype={nodeName:"#cdata-section",nodeType:l},i(ot,rt),ut.prototype.nodeType=m,i(ut,X),at.prototype.nodeType=y,i(at,X),ft.prototype.nodeType=h,i(ft,X),lt.prototype.nodeType=c,i(lt,X),ct.prototype.nodeName="#document-fragment",ct.prototype.nodeType=g,i(ct,X),ht.prototype.nodeType=p,i(ht,X),pt.prototype.serializeToString=function(e){var t=[];return dt(e,t),t.join("")},X.prototype.toString=function(){return pt.prototype.serializeToString(this)};try{Object.defineProperty&&(Object.defineProperty(F.prototype,"length",{get:function(){return I(this),this.$$length}}),Object.defineProperty(X.prototype,"textContent",{get:function(){return yt(this)},set:function(e){switch(this.nodeType){case 1:case 11:while(this.firstChild)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=value,this.nodeValue=e}}}),gt=function(e,t,n){e["$$"+t]=n})}catch(bt){}return W}),ace.define("ace/mode/xml/dom-parser",[],function(e,t,n){"use strict";function s(e){this.options=e||{locator:{}}}function o(e,t,n){function s(t){var s=e[t];if(!s)if(i)s=e.length==2?function(n){e(t,n)}:e;else{var o=arguments.length;while(--o)if(s=e[arguments[o]])break}r[t]=s&&function(e){s(e+f(n),e,n)}||function(){}}if(!e){if(t instanceof u)return t;e=t}var r={},i=e instanceof Function;return n=n||{},s("warning","warn"),s("error","warn","warning"),s("fatalError","warn","warning","error"),r}function u(){this.cdata=!1}function a(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function f(e){if(e)return"\n@"+(e.systemId||"")+"#[line:"+e.lineNumber+",col:"+e.columnNumber+"]"}function l(e,t,n){return typeof e=="string"?e.substr(t,n):e.length>=t+n||t?new java.lang.String(e,t,n)+"":e}function c(e,t){e.currentElement?e.currentElement.appendChild(t):e.document.appendChild(t)}var r=e("./sax"),i=e("./dom");return s.prototype.parseFromString=function(e,t){var n=this.options,i=new r,s=n.domBuilder||new u,a=n.errorHandler,f=n.locator,l=n.xmlns||{},c={lt:"<",gt:">",amp:"&",quot:'"',apos:"'"};return f&&s.setDocumentLocator(f),i.errorHandler=o(a,s,f),i.domBuilder=n.domBuilder||s,/\/x?html?$/.test(t)&&(c.nbsp="\u00a0",c.copy="\u00a9",l[""]="http://www.w3.org/1999/xhtml"),e?i.parse(e,l,c):i.errorHandler.error("invalid document source"),s.document},u.prototype={startDocument:function(){this.document=(new i).createDocument(null,null,null),this.locator&&(this.document.documentURI=this.locator.systemId)},startElement:function(e,t,n,r){var i=this.document,s=i.createElementNS(e,n||t),o=r.length;c(this,s),this.currentElement=s,this.locator&&a(this.locator,s);for(var u=0;usZ9=( zoQ2J48#CJ&PpM>$rbn!&6M27no<5)V{o}npzu)(|uJ7mjy|4R^`@V0S@O0Utq^Se| zz!o=GCj^)q*M9|B5S3K_0uk642J?UcK>Z!%m0&rr*9~z+cmM!V9{`e50pKf0C5r*z zycqz@p9KKh8~{*{DQG=u2LKy_Pr$vML4l9YBMhD%g{Px&y~)XIk+F143>|}`$Hjrj z0E;MGFNi-r1`5Uchy0-dNi^vFQAb4${FH%~e-=UiZH!@nBi4b9#njUY1{4$^v&H;Bp@fwDL!}#iSw0Tb?t8R7_%C zO6hw#MvoydBATg)+VWR#M$>v4Z7T{Zhr4|1EBYn};ydbI&Wz>^v>v6DwD1^VPbvIq zwn=I3_1-7*BA$I!kzG}h6NOYb)LuRE%&(!s<8j&SEVqAZ@Iq%@E1zLb&dV8Wb)l9V zt}dQ>HDXql*E`WKc*(v=Z%XQFn0w1RL#ulCmiLI$MPha!n;zv2wHcM<)Q)yXv`|q` zDa@%M_nOi-Z@AXw1*6YdEqr>`K+E~|T0|ZBP<7Gd%i*4h0rGI?#jg55TBQX!Z)j?$ zmeYNVS_-YmZ|2eO^)*Mg)*x!hZ$;dLm4)LkhYytIc8~WLFxvtfDjlkepTFh|Ob%8J zcU|deJWZ>FRuphvFdMi%8I0zrmKtJb{o2~v`+$Ss83P;%2v09S)-#{6!ETJZCHK42 z%c)7FyQ_C_D=~oqTNfnZ)m8M)4#)0iyG65mI3uST=TW~0!IVE{WvaY>wQt&B+hT^o zVIO;!&xPP>GUwb~oQ9Sgp(3zRjB)jk1%OEK+(&xI#4Uxa-;YfMHxK7cZ#FBc${T54 z+I9lGDvNGTFz*YK3(tLGcbadPJ6q}D)tA*`XldD|tB!!@jv_^^aIgbomC}m4KiNh( zbHAo- z2>KNC2zxTyqsywX<7f_AP=#@2=Vf`+wj7`COq3euCq+o#9d}(z(hSmzhGZ6q{hBVa z>%)DU;@Mxb*$5g6NfS`Lgc1na3ra=V52XpHFrghJFQ5?>M~{LYsI3cm{^$AwAbk|VM`H*HibD_gjTgT$O-Ij_ZydB?m_;ws~f3i8Yt%O7(}b>50r2R zG#OE9`vMoEbxh8QjN9NseAbbWK8w4G8U~>mD9H{b(rKbbnC0ri;Acg+=te2ZQU7+O zM!_^Mt5(<7a(8AbI~wU%6>jZUns}>w@V3a%Yj2KX?$N8>O?edW@}#)0o1s#;p~!!% z`fjAaolLx2B!r6=wKPx`<8p}SDUV+*2@~MrF9=p>kuteLu5f-yC|!w zsJogdw>B}ut{9`5`nT2=DdJ*z^(5xa(uV`)ZKY!-;>|FE0AYjjBcy#CrWmCK=?_ZM z9*2EcsQtkvPSnjfOS{%KmXC@6lKvR;cUb(l>g=*y&b-}^<78xZ z;gwskUsdk@X(KeOv^3dFscwN-? z#zbyB3`|knPiMh&p8Lsq{!Wu8k-43uAsdw|y>jh@rMxYU8@B5*dxx0rcHnZp3gSFzj!LHIm= z*|NdvJfzm&#`Y2y`vRYzy-s9IQ?&}M=P)ufJmEcg`pB*l^U;>f?~5ntR88%CY0+^< z6kj|+K71?Jrz}=~)tN)xp-uc1atV3iSF-BYKgpjGR^6UPi^b%wM0Kdq(c%%U4@dr> zs%dwWUpi(+asHjP!uY0;e(exVT)vqWApNr!!HOJhdy`ZDVnVYKwzCmt0MR@kAH|Wc zfqlP7aK~VR0%SNE6BF%?@}#LohMIY>w$0pc`y`f!xQx;KuypDCAPj2$-{F?FBD4DzshPSveGPmL_Y#~>5ki9r zNZSxR5=?-FnT45&xrK?Djkmdttr^tT%F@Wp+}6x&@^Od5{}`gMp%JKr|8Jly%dLP0 zjr9p$SQH^X7>@+vPEy6LIB`G!OYTT1)T4`eM85YEVo$%AgiZr8ltSKr|O=$T~<}sDcPzwR927Xt;?L? l4bWM1E&3*AvMcGBDKM|DLRfNyWP>9BH)l_$$Bt)H{sRV^njZiF literal 0 HcmV?d00001 diff --git a/packages/open-scd/public/css/normalize.css b/packages/open-scd/public/css/normalize.css new file mode 100644 index 0000000000..192eb9ce43 --- /dev/null +++ b/packages/open-scd/public/css/normalize.css @@ -0,0 +1,349 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} diff --git a/packages/open-scd/public/favicon-16x16.png b/packages/open-scd/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..5128e2277cd59c853d6e9d5c252e281b92dffb5a GIT binary patch literal 816 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>NN(=7yrQGIMMtMjJDHV#w4n58NyV|^ilYT3 zAjJ?ZK-q!!yjtub%=1qP#zNxCD24a%KV*GbVYvyEqA4xBUX-a29w( z76U0TX8hSEEZm2HxKAa)e_f; zl9a@fRIB8oR3OD*WME{VYiOivU>Ra)X=Pw$Wn!sqU}$AvP2D?NY%?PN}v7CMhd7XyecH3Bq*_5p`a)~ zEi)%op`@}PRUxyWB$Jc1ICAEQ%n|m}4IT@;^cY@=3zmFxGMx&vg2B_(&t;ucLK6V&PE)i1 literal 0 HcmV?d00001 diff --git a/packages/open-scd/public/favicon-32x32.png b/packages/open-scd/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..15999c8a3ae4d9bc6837a3b612b351d735eb0dc0 GIT binary patch literal 1050 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+081EXw!Plzi}L1E#s?83u2 z1&4A9k7O4f&CWgvViW<{hk=ZY!ec-Zj6mGn+!H`DyWl8@T?7&bD$9c@&MG*bmUbq) z@JK?#{!Fm;!m=YY30#J zk1suZa&iBGvs0#?Jagxi*1{Q4o0dO&dU@l9v$gv-g>GE-_{qh+d(N9IoxN+vxw)tI zynS)iYt5pN4ND(AzIgEZaib-(%$Lqd*|zHS^D8+!*SfA=@Zj;qihUd6x2!Z=Jp1_V zlif$Q=`5PL;nJa=quZW8yJWC<*6wRZeb+61`t*|Z^0`;8CbsJp2Fu{{W#w8o&UOFA4GsW)PYf@Z4W`>5{+~(p$Hry_eZ$`O0F=YR98jG`a3` zC?!wjS_D+enB?v56322aaW{~|S>O>_%)lV@41^ia?sr%L6l5>)^mS!_!ow-dW>hJ% zYXVS@k*AAeh{fr-lQV-4IqH6*XuNkCIeuSr2kt7*}qN3{?B|CdhNzSg<) zreuwM?q?g%&Bkj_o5tRe>yJLV*N)--8J9QnStnZVpL1THA?2F6k;xJ5gHa7tn=OyT zOyldml`qG`_{4nT@(okjIap;Qp1*ZvUMt~R#glRF+oX*9_Y5~jOGz(kKdImS%{Fb> zru-=@C9YY?*t8vV0wrqyo;;y=BANT-lsU^M zeKVgKH(Aa0Y5ni}HOv#&CpYh^ya!Ci45}rr5hW>!C8<`)MX5lF!N|bKK-bVn*T6Ew z(9+7l%*xb2+rZGuz(D=Ya%U6`x%nxXX_dG&gl&}n57ZzDvLQG>t)x7$D3zhSyj(9c zFS|H7u^?41zbJk7I~ysWqVTGah?1bha)pAT{ItxRRE3htf>edff|6tghKf0lKk;xB zhG}S=@;`mX^Jx$Rvog0{GPkg@u=ivUW?==F29v`n%*vZX6i(l`a^lFDBQi(WPd9ih b@X}*=B`#R<$;oso&j}1i{(M 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 literal 0 HcmV?d00001 diff --git a/packages/open-scd/public/google/fonts/roboto-mono-v13-latin-300.woff b/packages/open-scd/public/google/fonts/roboto-mono-v13-latin-300.woff new file mode 100644 index 0000000000000000000000000000000000000000..042abfc8944f0d70d75e3185b0a7daff853cf79d GIT binary patch literal 15564 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 Snwz2w0OekbTfZP10RRBFrfetx literal 0 HcmV?d00001 diff --git a/packages/open-scd/public/google/fonts/roboto-mono-v13.css b/packages/open-scd/public/google/fonts/roboto-mono-v13.css new file mode 100644 index 0000000000..2059fd1ddd --- /dev/null +++ b/packages/open-scd/public/google/fonts/roboto-mono-v13.css @@ -0,0 +1,10 @@ +/* roboto-mono-300 - latin */ +@font-face { + font-family: 'Roboto Mono'; + font-style: normal; + font-weight: 300; + src: local(''), + url('roboto-mono-v13-latin-300.woff2') format('woff2'), /* Super Modern Browsers */ + url('roboto-mono-v13-latin-300.woff') format('woff'), /* Modern Browsers */ + url('roboto-mono-v13-latin-300.ttf') format('truetype'); /* Safari, Android, iOS */ +} diff --git a/packages/open-scd/public/google/fonts/roboto-v27-latin-300.ttf b/packages/open-scd/public/google/fonts/roboto-v27-latin-300.ttf new file mode 100644 index 0000000000000000000000000000000000000000..37ccbcc678390bcf875fb7b776e1358dac7ec206 GIT binary patch literal 36216 zcmb@v2YeJo8$Uj?yLXqKOD{mU6cS1x370|#H4v(ylh9j2OXww#0HOEZdzB{OW$A)q zp(r3kilU+-pdx~x@`^%k@AsYA+bhWX{(k?@=YN;oz1^Liedd{Go<0*o2_b>lNyL?>nHd-$;-9bz%t_f1D7yb-?(srlgb7WCYEZv1 zBZ&tILj9Sz?=z@iV*Z|9X}P$UNJ!!I!2=76Y9vO~LH&Dh%{Vx(-@uC8t3wDGc?;#! z2jha*Ui~86kHdM~;KH#*|6~qaLdd9KG{{&mVnDyLPgWivWOzB?^(yRFG*V0zd*a-J z@}}Ya3iB#?)c+aqvHD9!juPrsy>B_OkmflSA*oWC5Y;4?pAei7zb3h|BoI6) z>(qlmJ$Ueg#p{;rqh9b;F9=49->u}7=;(lGF@VwlDn`>Z8ZB10HWJRHE59l4QlEQ* zs3=shT6LD^J9P%@WMRUK0HMg*Tj)Jk=uHH&&h|HL!r}KNjby!_KZ9J)Ab$m%K7i8) zaF*$H7Oz@4(KjnS&9%^S3r$K+p|PS_OiiyF8WOCJiKmrE=u74&wyj;eZ6aMIReHWU zCMhWRmn0HR1TenQX@b$Y9}1ofSV&b5_cjQva9$AXl#k4 zN>X?k5uFW^$}LrRr(y41Zt+ek^KiNA4Xop$(Gpm0@i1C~dEwA<3o%;4`IRWZk6wrk zicO0SipFLZ*=7y_fmAe4-;C5u+jdM#2ci;1<-6k_p8;!X5K6Fs%Y zyP?H|JEmYeCSq_B!!RMlc(QKyG?oQXCmsZ2S%k}JjL}lH+!A9ftKqzemZruh#K)(l zre~y?LqbDCVpHQ|WAq`xp%PAl^@fnxG~6}^hnnlAi?fys-F{rQ#;C+t|Xc*}Cy zXG`{Hhw?tXRdjU6;zM-Mh(%4aKHjk7qThuJ#{1_tomf>;G-pELs=+%y^?Uz4-@9iw zmVwRaNTKal-AvtCjJ8M;Pf|%eGMre_k}Mf&>)nP{9NHMix*ns&s~iX_GfHkv40Ab+ zGg_*kKa(tR#e_j*;?YJp-$q(H{q48sW|h9ZXTG6V(Zs&3 zdQB`ESaEIozP2jQUCy^h(EXvHz zo1h3z4ray(3sZje|5!0{$XgxO$=gbnE+|pzta$hD zx9=~1Gv|gp^u6)c*V<*#oBpv|SI^iYB~IEku+H$-Zw{FPW=$qYuai6AIy%seMY8i8 z&T0bF%y$C1>+*GDlqZ zbqlCF0CgJz8LBxrevF3(3xXjbJuomWRS*&~LIVQ@q40}oRr>Gl+jno@DpS4~DKx&N z3{eig*{%hRr*nS1LZ{KB=Iz=k2Neh+N~#Ex#n#}8e#E5mL`0j?7`TM3?#)k7SoJV~82W5Z+!Zc0*w_JUD3 z0=majLQ)xZz8fvWD+QwxO}`h~=dseuAmbX5jnFJAt5`7rD+Z8ync(`i3^sI`@LE>8 zeVsb(YqyL|Nom0(79~-(8NvfDC4*3dJDW*P35%uX1%*Q2g2{R=-->Jx#b+3czQ9jQ z*{gCDHWIyzmH_)0^up`Cv@s~+L}X*o%UBlRYz8D@S-A5QtuhL+F@hLi3^dmb3^JtR zOm7GXW@j1VvpctL{v_V}=H@-AXvbUIcM5yAZGDRheUwYehqOMeMRn9n8!1W)BvX`o_92Z(eUcuv)X=vXtPq%zS7mMnr5*~9!K5K%%lilB7(G+JtHe|T4&l%0A3OB@+(~13ynaQ0+=#n2{4v< zy1X%zUu9}f8r7Hwq)vJ|=Qw%;jg}%RM$$h^`fgvm;>d&%pUwE>hpAhYp@OxikiO*I zocY^MtuDSW=IW9BKaMDAfU!S%>nUKYMW)G>?Q)dC=%ztb2EdgWbEK7x3@Dl;_o1|x zoP^!sY}$tkqbx>anTHFY-p0zjBt(hJ)zF$0SLJB6n##tqIOk1tGNh!PA-cASi&DrM zO^`B{8B14`3|ik|^U8&Xibh{3K6h`{*trXzUYh>ZgrbkuZa8rAXptDvYHFv2o8Ou< z>SX@SQ$xxU<4=^Hyf^q{$%1#btXaOEX<~1nf7*bqy}&VAtG(~0J8<^Fo9!v7%`Ow1 z@G`}gG95|w(0j91`SMb%86mNJ=!5E_0}SHeyLXGMorLW(tiy%KGr z#AZ;wDcJ+*6$&`2kRftpR8`ca0z-jzs?murPJG!&p++|vG*Dj#n;}UK@MXxg_!`TC zU7$1=%Oahpaur@2%q1uq>KMo-P!;3}=1``jsN%@*b(V0`y2Lzg)7c02uDt&+U`)WC zB^$TM>$^;8Av_SyjZlKy+sKWdlxEiP7(SBpvt~fZ zlC(4XK;O@|KQ$JUp(}6VWo6%>ZKi;_TzyaOKAe>wW79caZ1eWWMmSMUkmQ>-yM_s$`9 z20>{o9V9t8}gN!NZ3FYn~W^p^#dMWQH79yAHz}v@zIB*hks1 z7Yu|2YuMv-%1E=OCzH>Xni!Ea*@(pMaCXf;HHA@b-7eOQL^0VvvL-7HdF6seOYqC% z5Sptt=$LNHRT@*Mm>O@=8yQydOI35(@4GV#rmR&yzh+%NwV?DDTKa3pkCdw)yt`$? zsrUo4=kDD*Z_e9N{ZWT%*7{(|$#1?sRq|1-nukUm`Qm29s=4p%S022zQ*1tY_qG|O z8#gf;%Cr4Pdh}D$t$!-Q@@j z7gtpd^urZ1rob~23J5Wh=-3Q%9H|C1&92fyQ5)Or{ShVa4<2!T`ZrG%i?TbE)`Ung zDtn7gS3j|7@zHmL?Y#$;-kH7h;S5mHPX)?&W$a*ynm%4Ky7_ni`SIZH?}^Pura}%U zN*U1E1Aik-;@h5x8*rWJ0MWRffGa%7x<tPyRdl=frMMeZXu$iyL@Xk# z(4;cr9Ap+S5XpH8oH3mSoA_nL`{L_t6B`e;z8K12E+IdQpGu7Zb6pi!ZjAs~w;`@G zFw@hbOLB*lGB|0P_=dH<*skJ`u!1HPE3^A4vq}JIXWQRm8_-2K=%S76snUffvsly@ zxydWdv@5IZ)Nq)d2Hgc>%0-@{HBBTt&x>^kQGEzZc~zi7?9d{i(Yg9nXH6(tAxsdy z-n0LF|9PY4)Jll2T{}LZ7F{`h>Bk-VHJQ9*-ngA-KiyyO-jqH^6xqezAEh+Z|D;<; z(#h+jRE~QileHb=x)~s^m1Hri`jjSXoE9vjYlE2y9@)qbkjZT1HgGY=VcnRGWmN>H zO;-zJ+2s_?ZR$KlbN!$>#V0UxB%_IdHin6MHli~ENpy@P2!Rqi31h<|P6!GNj5F7j z0x1&>89{8!3;M5h{SS=pHz~N_{e|-b{U@9*Y&W)@*({qZ69y`f$pZ2Xed4K>kTDep#uwTf|OFGe9GuI3S9XI zaAgBzcxTzm+lS#6x~62O3a0^}Ih`1jX8H}c1R07wBu_4$!?V<0pkf3ZVFX@2X*{6u1NSnKk+KjS!{CAK9RLpx zb0Da+>L%A6DrPw43SW4VoD@!bmH9izob2Hr&MJbWG&-*`MZm=_O-?ZfM05X>op)25 za(P}YTGgtekJEz>{wN+cb;Cd3DJ$uy%_qt>Dzj+&^?TnbQ$EvKK0GyQcUfEF0`-vjo&;ZqRt8p;GA!T8A>e$Y6V&!`4*=#?29-jeXf$&-F}ikbpNxz=a?!lF?oFbknvO zod!UkQ#bLJwVUW)F@DjcsIAhIW?{t{*?zYK(% zY{6S$;r!C{GBxMqvJG*_WAMCt#2vcDSz+ZWm{M`I*}F) zwqx)y@5zp@=t(!*RvX!z-#Gf%Q_qLFC;HeEee7aTa66J=6azWHEIlr%_@KC0Y*vCE zY@xGQM+=Mb{%atoH}QTE)&j5C&EKcJl2>J>Zx$D$D4xoKm3It3{YkQ{`_|xn6ig&G9@D3aZ74*tq-<{vQ<@jce&VT0EX)AmB zFvH{(WXAmunhM9k*O)R#A7jdd6QHcuxUhj^1&o-+3golmV&TCC>toWlH zSPZZhRot}qj|d2K@B}&$|MJ^hsX95O8Y5vdO%<+G94Q%$!J^iqH{+Kd$$bT?+>owy zEq|Q{R8kMEJzB&-ri9CJgL?4dhvXDb!HjkVLAnItNP7qoLZzL>Ue-H(toOXobI)Js zbdWBSg!#`aB%5`rbvgjDxA7@{dXly>^FwP{wr^r1$P{o;VCqR0*KvDMElyi%yK-*KgP%QrK%EjNG zT>kulFz-{Pd?ziW>8sCE^IO}Mn;#pgf!0)RC{NcaR^@Xze!T5+VL7nng~(dA>=his z*avh3A3M|>9U7uELr(SiCu`Z@S?e2Y4SXBI5 z`GwyfUoL+r%qv$eX8+ul(y*Ph_Sqc_y*ri5pHO%7)&zRdjw6t5C;3PTBLn2n@Cb(A zP@_d>$L}je3@1d*r6C*nIEQ}gifq}N4-+Q&Lfx9kg$_r$0ro$&YdO)vO(nO4e)S90 z@0?EyW>ow`CvG@(rc8ND=xyDuv)sA3@QWJORldS`%fj{hFp6?O%>}@J0?C&>tJiRh zA~zRM6%6Mpj3WtESdd8e^W^SKsNt^OO2mp>ycBW_FN-i*Sv5DnQ{&?jU~8gJ{uL@> z!b|gSiBI+^jRvozL0>HUaZ1Uh{kzY}bnbW#+?AMX#(xuNX*@${gG@4hPpo_`;RGCGNRqL=ADd zQt>TT{G`6Rtmh|mS#V}jvK=_vfm#DdV_9eS-ZO35O^&!B&>>X(+)xp~?2xzwh`QiV zQ+ir}w1bxZvgRk{SKXwmbnxe3=}{}b9{1uq@z;uk;}n2vT*UHrHfvFaj!S#5vFv7!=UYKLOGv0b<_Tj2krHbe6Q70vE?&~2-;8VAAe7D-& z*s0sl)Pxo%Y0ayJ_j)mU(W?hvegMDVP}o69Fo5%$>Dk&Dw9yD!FFlzWrYH->D@Uuv zDF??Z3#ZU|cWz24FRpxjPfB>+UK+D>>5D}G5U^$d6JRLNbvvn;a5E{~v=9d$X8okO z{$)bBK+>xRgzp)!s%io#xu9h}D{2-eYTmM`xtQI3H##(O)apFQ& ze|OYB8ufdU7HW&#s?_M&m6&CTaLW$<3!RhpWKW#|ZB0(efY3+2Kw5OjV{yid`(odU zcg61p5AG#B7?Okc?NC0UkMyM&KXE)jWpLw7j48PU0?-5qPNoObM^~>ZM`>$)_)IzTQ${;)W|>v(~C2F7LbIHB)2o#mfvC{6I*HvGNt$DlMtsLrhc%wlm< z!l5iir$LdRZImO|uIWqvZkexth??37UkMd>ub$L$^B-wsEmH&6q~Xjbs<6|s(QmhR z-?}%J*6L1cj@1QP&kJ8#YoJDI+aQjHZ%Wi6NxUj>M_05br|6h-XmrIAaa3L&o*E?G zr$-Ta6fu5TbGV1;u)kPU6ncRK7z{i($B-zR>CwVFOYuZFB+Ec(t>>jTc~p0<99FXy zidw>)5;6?TISkGvCrUNN%Q5_gFs|bG@PoxC>2Q)yQy-xhYH>BC<)AR;IViCNAw~!X znu}SD43@H3C;322g7*aCmGg14-A9fjxgj)AHpYHJTQrYA+rtF>x(ZLxbkm;5gCxN7ni90q(^QtVymK*}v@b zVDRPy1G7V5p9cmcaBr_6fcc3e@%DRn#_C2+7=8PL?~8V=8MC!U_j@aM3xQVU%RMXg z#JZ_W`9^sme(}qwLM8mt1N47y^x`G-VinR(Ho8PNxW`TdThnh`DM=PRShPtFHZtcY z^W3=zS!nI>7MPhB5s-breRrzWr-!v3DkM(cYZ#*&{a(S1e@1@3Q2yCtjK}V&+YcS; zuxR9f9X)CF=W$#AntlDi)Qu0W#a_A3FpV4n@fyc;B=nf@N<4lQZUns&c#E9)d>LeZ z$D!%#LoVM-2Avfc*w=9ELHLCwrQr8N%Ql4F~Lu z-*Azv0j?PXa%E3$idIf?^?5KalZ%ckhp2_1@wh>+WAQk<-#jEFT8*~AaYzw*iAK_k z&~*OyB@=H>Is0=(#kH+{S2SufQ+Yh+M6fVVw8TW&1dG*8A~G?|;`}b|H;4drAVVAAP;$GU1~oihcyJ$` zKqt-`@pg>~6T}()hMqZNZ6KUqws^sKYb5}IF|Z26(*XLshzysevfkH^)sI|0Y99k! zN6^skpb`*)n&sw_)Teq+csd`?=8GvRTBIiPNeyUyxb`#aAPG~jtyS94G`!IVvAZ_1 zZy0yd`Wg{wP$|}pF>|d49qt-_VCj({!5|DkXP^Q|;2sy=b!h=XEGq-@CN-T_S-LRY zEF{*E8zm$rCdAjOB{g`_eD&s_0luF}C+K_zR%VjDXIQR}59y!+!r!e89X^gUJZOp& z?;K8(taH2s&T(NRlX6+_!PO{^Nx-JMVwf@w{czK~qM}iB^BN_M{<%bmo~aDblZqOX z=o+P-m3gc7p-*A}iMzK-gGB2D72gzSW<5#CYG~p!F{(_YNY-&5x=S-O$p6jKv^yFv z=4}drju4`$1yMMOVhyC8Oy0|SeqccrmvLr^WNJ_t2+_oM%r^sK)Fa=-g(|71)adYV zN}4zLXdLZnD5Av+rpaDKblU7u+Y^eU2A2N)ujUmhGp%)mPnRtec8s&83Rf4*n>N)N zDK*eW584<+I?KNH(Ze`3?<%b&96{QNCL(#WILqTLk$6`@A9eFvbNCV6aRb>;YJ7CK z%RrJEoESL7bszyUE=wd6AoGXb)m)aUn%FpU@$$GqsNvd8(gB!Ct|}7}2EkehdBmm{b7|6Z&yW83 z=Tcb7qi>7$tsTC(X05G-YxZ&-X`}U~?(202 zl&_T+(v>Ge^Q`~$>i;`yPl3``yvEy8i4@8as-732Y9FjU|6P)By3pFA^#>#gr*JQR zaO<6y)jfy6hz&sRyeuU?{${j(WYPF9-@i9;@9Ho6*4{E?%|0$0cCUCIFT}5BLgDJ; zlR{v>A&=SEg;Wq$pdEfBOZN6>`r9jbp&JWwXskfGU~oh-(G^T*#ZY8K!nqDZc9^g< zzShVM(G$iAeXiE6B3?I4o?wlT8tnhT7jMsl9<&i}uLc}?#wR%5?nVHPY$l;H_v!e0 zGF9(zE#HQ|unfQqj85WZ#+QrtNjC9EEXZ7PGYXIg9Op>ukk zv4um%4QIFwvpp1A>9V02^^^TvG$U?mYixpNwQ47thYd!fJ^t;UJ;aiQT(Y)UvJOI( zfs6sdo{fcb27%u&kVSkNQ;`B_*W0&WYa8{3E~!KD$n)oQ*~+i|tx4T;y!r<$Ss+~P zPeT}-YtaiAz)OszgA6Z-qZiy1AP$-ar{*@{yiJoyGV$dJKwi%7fY#4|VSXc{*_6SQ zXR&j^qXUP93D2q2ylCvaO`o0>KCosh7rzw!Uz}sm#6$d)0UAB2=Vk}HVT~J%8Z-{3 zKy-{7;H9eTh(4mNij{(X%FyDs#8ofOp;FWjeO31%e!BaOw7T3#-Az&bFMgu{)o-L8 zeE9(Y*!@P#TY&Uo?96maU^tcXDXkp#U5RowUwPo`t31wE&J}~Dh>a>PjvgX5d2vqc z-mp={ZWYpGU_!=EcdwBKDThZp;Y?l=o0m%z|^n#KuBnX)1LWxOfBU%8Fkz~q1wS!XJ`i2vS2AIaZW#Z4+Lzz2q z04)X(NJ2swlwPKz{7D;4Q|gB2zFP~K9yx{aY0BUk`^CjC{OXr62yFE2+d9+ZpsWhw>2dVOPf&1%cu5iB)} zSbU*7C&>n1Zj-^?q%)%E})!O!GuZPBJIR7fg#d4^^9CfjnT)zXHUkL0t@NO@)C>kObXkCDG>60h zV!grhPwB%CpGLmD`{$qc?NLs3pmDdYnVBzc&_->u%|E{Tz4BtP^3S&?@6=^)Uq*LJ zKZ!xWRRcND{&s)hsvOyXmXLBwh+9rBOA&mDqxmp)#&qa9a2Du8463t+1%}hpq@Q+A zYdQI7PTkxA1>0x0p4Ib>z8N`#g^E=lWNfQ3ek5J>UXzYZ%~J{?p%*IaXbNP@%l3t) z?YoU1PBNh|?~vDQaO(Cd6J}n&px7X0Td<_-gCh(j^HlpnkYD_)%Zq^?&nygN?c2P? zA9e908l1FJOf07p*jRSQj~hGD2C3U*9s{5D5x^(vz#gvTOdYcOPoUMZIV#MB5~$8$ zado0JFW&1p#^bYrap%3 zMK^7e289}!Z`Yijk)9wzYT1*y>|z;tuXLrS@Vf9zMWz1c$Y80V_zP(#_q@jap%qNeomCadMwn6!BFw@iuZ9nSzNWa4$SChOZi?tHb zD@<@|aXU?VSd8T?V+-n*ON5Sjv8ubvGsdqB2^c1+83`F->87xZFpOzT8!=Fxy}*-q zka?+>hQ0a8s5@_M=(43`)}AiA-=h29+Sm2%>63PJeew6SJEhZZm(KXkMsClT)w09d z&0V+c`R4B1Z+F|baPfhhclO=>a_`P=Lh<}33l=_}zu@uQxsO3z%x4d?7uM@2nQ-e> z)z#cw_YR|wc=OzC1La8?j#NRNGrf$Z3VOPnqNhNB{^b@OS1W)c7`xC!LfC)=b4D+5 zM+*-(rNL{A2!KB=oUe?c^_BHBUs+$QY^MFO)mKI@5WW#^SOan||GK^() zon0Mdf08CnvvUA^R~xGa9?oM{#s79~{U{^rmy*sJhJ zCrEvY3w!jd_^R;3%-Ka(%C??rzE#?im3++6R9#wgvZY)ottW(EiKZ5fP!`!#O&|l%CI$~h!Mto*l}8O*MOTtOQ#eJEv)!x2aVseo5t+krF^^lZRP8&T~5+Aw3N0! zd007e?yPd;sL*Ha_UlKwAH1<`?d|Q0dd%K2bo?ZXa_O*4&4*-~Qg&1+KX`$5KYw1? zb>XbC=kqHxhmD*~!Xe>r;IcBTrRlOix0aYl)$+|lfwoXa_)>f*!xCnILFPh55kk2Z z=q>TfPy|AaW&TddA_saiwY{0IPhjQ1#K1;@Z3BA->U*(}Srum~mWmziJO#?stW@TO zbq}kAAgrQBRbqgqdH(utbH>fwy?sIZ4&4V0+cmpnd88tzjj1~AC*i|d=7MnphfiwU zrFT|Keg2Fkvz4T5Zdy1@W#Y8%tRz}9NMDjtAe*lZVz++v~kZhJ4G-}My)qrK8 zvV8>KN82frO9zcIHQrhl;3OU2Z^oSDngJ}w zS245qM;R@(%Pl5jSwkoFf)hIF%@ikOfErCsV$^|0@)T0Apy1H3kXXp1_}B!dCxNTP z=BtF)=HyZ32vXdS9PP3jhRB;V4!JkqzP(5Jb{DE4#(4;>oj`MHa5j3^T?p&u!hKbMr2( zkS9aIRhkM4RBsIaaLZ7{r5({{P73Ko~-=S|A^ z91vy+i-iS%FrG}1O+0#{Y9MY9MgZIhKq%7)22u%v$l>w`N=I1$oWTV+FUmoNi=&#$ z)!=GeZ>ds^CniNe9dq793(T%l&X{CnlV4au7jxU##V@9td3Wv5r)!6{eTQtCP`bQr zi|w1IPunqcNat?7F1M082`w8nY2CU(-;$#IdcDJIuE;N$I;cs9wy!T{^jm^xHj9&p zOeV7UKVzbY{Sm2yw+Z0~5pz;SJ}1?T*n7ieKM&Cp1rbSP+i;&?14z?6+0VsC{BO6g zW~p+EK=TER+fD7*LL9(npCdoXUG-ArUnd_?*6&m{AINoi7 z)WACP@QE>FMd8J{^#>;-`SNQ9X(u!<8k(dxat%b6yie|TbE7owvnEWFg4aI)NLB;s z0m9yb)!&V$UiWSb9%FATxM6$V9`)`JifKF1gshTSS@dMUs`SClt8lc&#kOM14HU>U zi5-b-3TvY9S!{B0i=-q5VSl9^#Y!0POZJ58!0DIN{0Usw(*hDleZb8ViP-C~NuR6- zr=>hWhGj1xValL)Dm9=rU*{XuujS;*?11#iBV(IC-d zD&UzStfS?+ci@$J)qFB-P$Gwg&+%dNPTi#q_ZSJimeQ=BWxv?NXfKv!F(G%`G*qh^8h@C)xV2BV-b-ZhiBd)Ny0kqnP_mCX#O7HF-Msuc9z;< z=58$L#Z%4A1i#j18}Y*0pyM%3X6r{o!*Nk~A^0PbWYNg^j{CeLIV6ISAcmZuz!w8x zL0YptuLO2$Mh5o|KpCnV3SU{>Q(+xumrhtL6bV<~mM;!n(#0UmwR;TSDIR|+YRHUf z3m1;tb@r13BQDIzDr`=(HJurYr2y$wF*g0-pcR>;9jXi=)K8*4AM{JL|DX;r-_a1m9RXOF>d}zV-Wj>vpZLViwqRciI>55 z>amqnkaNz-8p-vN$bI`>p6mkj2F5#>m98t74cvXnOg3*Aq8XIpFO223(q6DR_h!?s zv|F~am*!_H>y-_MkYU`ry|SI}loi>uKv@Z1KG}9adanC{&-AH*Oa)2JPC}dvYiM8} zZ^y3Nyfg(-gEs8ZB|Grm}eFMbHb+mPT?;Mm*1$MnEJ3 zJSRwJ3}bN;A)s1n0)=Nw%bb39R^H%wN0H&X=l05BgI3L^6+V-Mq6w!j{w_{zZ(TNQ zot8)4Z|hgbY3CIz)pz0EM~9W4H!CmJi4SJ5Y-;_r#TBugc{(-5#xbb9EkRGdh(qMc zMs=Qz(K*kC^Dd3&YZ@*%D0dqm+03Z^GA6l2!of&gNQB8EXrf#gGo>d8XX(cH1We0l zzU2C-r`ME&MMX4o(+9`a=qyTk{(HqIevp(?_&vq0;#WtE*6mt#UW1BNroWga^ZSaUaGNU$H4!id7g6b9zzz2siplJkD5KFUEkZCdreR-Gwq>^?V)}W{ExL@`8Fk=$YQhC>@=NJ z&M3Q~o#OaPCK_+z5pV586K@;?eAqK-EJksa&R4IdFTk(s77mw#ec27Ul3J`0KUf+i zmBl!*#0GeR^Hi>(76OBCac(fZHrZJS`8k$)7=K74(h};@GotOfq&=ZdO$M=N7s1`l z%)o$XL<0@Mp=zR0YP|IOg7b|U-CMBt-ETjmep9DR-!oIdk#kWjoWxUgUUg1t*O9TIb9uADx^cj@6_LkEuf{i~r> zKD|4>+suJIo6*EcLxTH_6xW{FQ+53z(Ech=R8@UVsI`oY}Ef-E~Rq<>6PJOSQ7<4EPxu_y(Nv=wDq!sw(gR$O8 zHmGAAK0WBL*c;Jm0n3j#gSJec^=8`9%}Td&EnG3;zu@%qcU%tEeqod|r=O;^1!zB{ zIu()PPu34rEzYjX%^XWxs_L9o&yH}AizL@JR;nt!&*gM&#)a!7u`vPuYvNqEroCU> zauyu96ICP@r;ro)!IHpSAB^F;x@+N6s$R}g$=pW2n$W;GFV~LHMVuvbi-9v@eMmK! z%#0JKr{yBQVf4T^dk^eAc+#zf1wFHS4;VOnLRND+t4)t>7lbcgZ>mhr?7Hn!p74;o z^-{|RE21}6%&oEQV%BeKhri!gjI8zIqW7SqO)DP6{BsFZxCOZn23QpS&{B~T>X!TP zUvok=t3Y#4BPW!L#{aJw4=?3}vKC5)+wXllzNl#2E#!pqgom1&M>-Q83|p-`_wlSy zp7HRk`+(mWciw}Y2{AYK+@P0v6=$_(YAQlb4YR2WY`+@VY6)S`%r?kW)yzO%k@lYE z2@sm}aWf;`xSxgvHUy1MrX&ZdR&OAbm_R5ot_x{^$GKzzfaAIiWh5`SNN=XwuyHFS z1n^0&Va#^to31WT@f6tNH3rX$!|zSn_;ju?`>&0&4vSfAz9yTy`C{^{vEyf*zD@6h ztfapCXoLMUaCI=Ia1OQ}4EK}%@KgT&LAiKW`IE^7iU z5&*%lBqy@DeUZ-C8t3y`7O9$Vz-5AKs*p(^qOttm6Tg|i_*RofUragslT|vm{_2?2 zSx@JF*P!t?$RK)FbZ-0Bv*(o$&Pki69}f~r_XxE&Rm@#5Ys&I}zUf=##Gey7&R<$G zeLhPmI{VjOSHeF2`|r#2+=VSs%h|eeTcroWMcrSp6R?5-e1T3L2A&7LBJjNd{4eRK zzoDuj$sqQUMFUgkz|KNq!3WYZ%)-SHdv+K8)>eAzb?lh04RkwBI!>SIQ!ooHl+9j2 za6!$3Zz^UZ51x5}{G4_qBd%cQslyOswyh&10Ny`tRQv4F!*>mD_j=uw%oa&0Z|KIf zA3nT&c0oaQ-Pd0;r@fwu77dl2h~Bzu;NVU8YJ*s|MxP}6>uE2%hOIFISRko=orWKK zeW1%JQW|;4hU+*?y&kjmwg?BMd15f;ZoKssY5Q3-c5RAqPE(U7XNHA7~yww{&DrmS#wrNNp$#6dc>a#* zUrkG$v;YT&h2=tJK_~8jb{+;-0CU9iPWN)kTnH~V=IloO^88L6^M(9Qo%4k!*#rBv ztKOk+{|;!wF5BPI7-Vx{wG!m?U~Llm4%&cKOGL~)!g~tHZdw7Wo~>5G=m};l<2nLE zHN3)U)O?=?4^h6N2}6WhN(n6vqQ&gFeq=lSLwgRv1ku3r9Yp?I2%e-DX@c_AP#UZ} z6fH_=5LPIdN$2CqCS;{S_9Rd8-=;e6|fd?7%<-4M=@qq>8z?lDmc z);;FjuqdA95kT}fIfcQ|37T9WF7m<>!Zj9H?#IxJIfEOU?&ga;zcA@Z{zUa3GD{;dy01j7&p# zPqS%5p4_u4Qhq_gLRgdyI~L+aPPHDPdX4JXC4c7GcBGeKB~aLP=Aa<>8WCB+7qOM! z*QTy*)nn_{?kyF%rPUTXN0))6KX)s+LWI(h9<=^UuPcf4dUN#OTf#x{KDft!T?0?N z&s^fd!F<+Imie?5a|(hHIh-qd@GKHc2e5?NWg}MyG}XgxVv5@wBc9BqsrPRBgl0lA zEB^mF>i{v(AapZY?mFurAcSSyMFT1K4j(@C_Uy&MlcqegT7}G_BFsD(ao}{rL1~Ju z5Hk;$CdBj3#Di#47}nek;r4Kbpj#ZJ&XzzE=I=bv_<42o z2FsZH6OhLvgQ83hR5K_*`_*678*WK1Zsu$acYH+pr$keg@nztbx>R5hgV6o*$M z<)tYze8{k23?~=x63dYSHM9DE!HbowW&VzX zpcxk`V)Jfvq^I?U;Y*J(82yzoOCS!}0GJgTorGi!Rc68!%QQ71N%mDIfg-sMYZV74 z$yL?WqpK##QC0cEc?hglj^g=8l_5|(MI9DA(?UW91c#UdJlKE)i?G-bZ5`uSDO@~V z@mfWuB5BzZ6xHTOZtu#DHSQ=mERjQ2v3;Px^&Hg zspiyXseKx~*0XJoeb%;;*JcUhxGfme2E;f*NsoU==@8@KbgNOcYm`nF2#ae%%ySX? za-@!1GLA@HG$ydZ8|&7#eGs^As#f^~dpn847(B zo)R`K&|Ei7n7?x7jMc)5*>hG5$<48J&v}Qo*t2)fwx!!GmYqIhi~m|VW(r>!Gz)Mo z09^58^uJ@18a&!KlBpka^Yhpwvnk!elKd7#;48zDJf_JUL;rt=CF#5WJuE38QvvIq ziXnXM%T6vjlGZSXs~QtsxJ-w+L#x97Dq_tVC#DfaP{qCM;mx!Fw?#0KSs0zb^1K2J zLdMjoLzGbxT{J=&Pot~Spq!H@Ul+oy3N7VXo&_uh1bEnNjtG|(rnE>O9|exkIg)Z* z;$gBu(AL1z8Q3o@g~>f`Y$;3^Sm9rbaGuJQBUoAJt1S9pPzO3Q+SR2nxhK+KC{3Z4 zm3dLG_byq!Y|fbVhQWru&EM(Uy;I%FST|#Ck9+a+#!XsMJh1s2huZZvA*Wd&ebJIN zViiPNs*>JvkUAF=GgGuVfqW=yXx9AW%!5i@VAH8iax9S-!2UdYu@#$IZ9GWUE5 zR?Q19tK{-#u@+lfSN5;OCy2w8uIjuA&DwR?an9h#uww|*rfpzNOYTf{U)@re+_G_t zE}Lh}+T1y-am!_sikEjDygh%=&b*MGE!%YM-l}zu(4ukA@W=s~gNljQBajmsln-U=l z{(Od)fB}fCwIo68#d4fonIA@jE15%PyI=<`W<;%WLT2?Lc4Uqd;YnA0?U*Yanl)|Q z;w_WrtPrkU452}^`mSbuLi%@T*RK!F$z3tNXzQ-!Ev|k+y9!ijoNOLCbi~#?SX$kL zMZ$dDaadXh(YUpmrN!AbGoS*X6EJJIp|BPf*#Wyn<|yYdF1SU8as{YwEiYHb>ocmP zz=aFyX)1a---@8m;@y_2cc?43>U&K10_L#}nX#gem8*9s2*VO}P}h4ffm z2+6@JV;Uc;v5l}yDCMQG-i@=hyvx+mYPk~Fm4fah#!lpO_S_Jhd%(`rlgc(Ww(7wW zIR=}{eQdEBn31JPQZ}|+)|bF+S+}tz9<%PAD0Hb%#HsdmWbvkvfNQLdtz;eYK6`VD zx=Of!U@P}NL?dqZ4c^RFZyKhyRl|pyih;}@9`ZsswU5Y_l*R6Fw%A9+lCrMhUrZDN z({jmoWk9>?&XD1iHN6n=J8c=gAn3;Sb@cG-iz7#zi|Iuxm#F`*d^J7g4%Xu;%NN!; z7S$8Vtj8RS>RFlpB?>M2!O&2MhZWD_`I%THvY|$YT!1mW`ryBWFnqjRdK^9NEbYLA zuUqL9N8O9bWoKze-TrQ+!yKiTl1nsGgTzrc`+p@)NQhb*K9!-YZU=;;9JMT=?PxRT zg}i$l?+m_$ltMllW+<6#RYsIg;J%rO^p5Qr>NyU)yl!|6*K4SFAvXG&293kQ*IN2= z>2Y+=D@tpytEDp>buT8zUQya;Z>d^Zua@R5MQK3j3%Gi62(e^5>p9ylXDwX7u%6S| zYqrtkj7|2p;a`vcW)N458E29~*P};1vhi1_%4dYzKGYG5N+w*eiahNXk@6sl> z(v2N;FGg?vyL60O=~zeUrNm0xYmhjCBhhZ9ebmyte^57C&)0e4Bdfl>Jx!d{@8Ix3 z_F7&pJ&ykDEX}P`*7{(#(rjd@buT7=IZHe04s|Qd#tKSv2vHgkhJ(fr8q#o`{Zj@5 z8ArF#G_9SQ%&>UdYvC)&=vghz)%K7tQJdX2=y37W`Y)x&(b89xPIN7;`^!=HV#4yw zUaq^2Tj^Vl(o4xAo-fbGxC4^fZl%wvrFrX7H(IZ@C*4uY66y!5*v=^&wU}@52s_I6 zRx;TdEGVA^*bHPM?Z!C;UpIu~rIj5o7;75rTtYMdibgFjmmWvQyrQ&5iM%w&i(2<$ zGW`{$Ea_D9w8Ub))rsRxfW)uDv~S204&5+{jU#gpPy@lVN1 z>L)G1TH1YdJM;$qIQ@1*4Z~`~cEdr#Z4VERG>_$;%{=FLKJ{whwbJXRx6yl|_X+Ro zJ{~@;d@EKB_*X`l{+zYXm#K zQ8jARXi=kIjj1&j)L2vF(;AOzSZhYqOt0ChX0Mvx*J@m=bFKFiDI|>*ZBn(Q`ANSfhbON|R#E~};#2CSv`y)qGA?Ca%CeMoDd$oyz=NAvF@F^|Co*D%4V~X;SO1qZ!AnmVo-}JcjhUr=9z0-%J zk4m4IJ}rG-`m*$O>D$uxrkACkNdFL&z^Flp4O||+??xa0M*krZ9=JfrnI{2t*zpGK zc=x%c-KE3m7uR~C|i>MvCBhkd(D)(LGfI(CyT(g-p}_X{bM9+CpulS~j6 zk%htr5-sMDD$-2ShR!98gw`a5{z8_CwMi7p7h#jJ4Z+qQ+Z)*SV4IGu9k!v^^5{V_ z6*=3Dq%d47B&(!qq(t0KIvd_3qa^6_($D0$t}dCOYfO$yi?EgAyofB*?Ip*BXmU*& zM6z@~xSm0dV@15<$QwSc8%icikN9z-E|?sV-Xl5Ed6KGoootsLld6V9(pdVDWJniC zxb!LMPJbmk!~~LzBN023cH&qCT@U4|}%^=e{IQSWd!lZ>{(hiAT0#Q}G^27C$2< z9J>iSVbz==GLD|QNtg?LhAfnNfJ-eWy>y=f=Oz+PPmwLsmn2^tMds=A5Y?McHi>VM zVyPD?(GSJ-p=6$@M_)B2orQat6><;rE}CIp!dPTxe?~gdXJiNZwLh*;5!aJB;#TzM zB{D|uLk8;8$#`);$uYDd0a7yF$?*3+IVM@i8vPmc{ciNjLedg-5r`m?MG?|1IYkk2+0&W;P+~> zTo+At3H^Ylex#qc8aDks(h#`oBt0R+q^0C7sVzwcE}H7Ms2i)-BaQSF?xKx%kza5Z z_`8d?-h~h1F6y~U`eJK>EgM@K)YpyGiLC%zUu^6h+1T2kA4{+e5ucNK;&d{S(LJMK zT@Mn?X^+w0OB0e8YMHHz;&GNZJPQUzqR}aYFIu;pr)%G6DaHO9vxP6eXP? z3X;z85d{2{JoNbJbb7s@)9d&NKl8v|V38U;jSuz$PCeA$qE0eMxFv{qN@vgs{9I>1 zVNt|Qyi<}41_Qi1sD?izcz8$*0?ZaMFqrVs10<0Z&>0NGlU;H905%CPuz%Q#@tmNY zGnkzpcE@?fo^zZs+;EgKys(%!aD$^nv2-f3IGdp#7_0XsQ^;1bpBx~k$vJ4FKat0< zB~xf8;goPr_*%GS5=@>ZZ&R=-(iCNiF~ytArUs@=(^%8~=$M#5#b&cY17ROu^uboL z4K*DkACU8;ocv6lpr(#5)f8k3H&x~})iu@sS54IRm+c;jwtYlGY#*XlKyR~R>uzhH zG_`(WJz_n4d&%v2_)fn)_4bt8#kY%YpTC`dyVvbH-#`0)`gben+ju`~tLq2Bar}1! z{8L-ki~mo*&ycgg%X#t%`IJl}A7ick>*NOc0=D8!*e)~3SLAE*4Y@_WB{QKxe@DJ2 zx5*FW4!KKaL;rq6egi(Akl)E4WG?jAKgm<_AMzJ@M&^^hEhMpx#j|}5k^>g!9;dch zmdq+;o?@TgwJkK!WNJPn(?a{!wg`z9S~I$~MNBlcu!z-Kbj*p(HO)88Z#8hfsfB59 zzkwF18b9Jj-u&DolZAB38G?Q1oM=n4+)9q0dAYd_YFi{$4W2;h`MIcIsJ#Ll`K2Ul zZHq3kjmaX$x6kR2V=2w7WNDU}TPZr))ZFqx`y9&$nU$h*b8B1l4j2LJa=)mRJC5ntR*`yxFg@R{ADdn$10KBHeS!YLU!JCrB;vekQK_ z)UqJ!UZy@mEh_s`?2q|2NUjluEVWv2e--97uUiE_j|o!-wXes2iR1gWN$0<$83W&J zz<=qo8mNyP(=VIQvq3C-!r*w;qr>Z|)xy{{&-zJmkw*5*%TdnTQJ>GYnS)v<;x3W> z{0sn0?GM=!NXN+S1L;_~lgb2kUHLO(aCZdW zz}{a6Z#QEWNJDpF}3`ZynS-659Z@C=a!bz*`34ZUNpg z09S@{ILF{hTeRv8_{`pfFQ7R*r0m_vz!3k~hC1y6^@@E@A&We)KBf(^2KF2FDF3{P z-(K+5H^J5B=p_owPQ-p1zW5(Q_)>7v+1Ss+m%`(-2>V@RFP{6D{EgqNHny%Mo9Rcf zXIEGa1obAPUMaIh+s-6%z{Jr7By!N`ykR7=px@ZxSf3SY0=J*}Q^WE`59bn5tpiIr z;U-{{TA;4=ylhKaM@pB{X)0|Yo`Hq@K)g-c3VuSc_&|sh;)Di5TVXh&c~6Ap!dj`O zfC*rtQL4$lViU2glq}|BE0NO0)vO*of5zo|RlIHgKENII`$T>ErG2uL%$}Fh0a;5x z#{3dK@M%Iw-{hH{dWKcsY{_k-*qDu`x6^((3rs%oW=)Y{N0ooD0*Ola89QMGB zxjx8KU5i$308U*c-UV`zTtX)7Wf!UUE%^~z!q4Qsn{<1IzW4_@tuFvmJ=;w{g%OMQ z2I9@3kdC3a9%M5CE~70J|J5#(RI_y@b(FsWUodHI`wst)=2y}ZTPtjBuyw-L1zT6! zPngs30P7jwC%v#O!nJjHej~Qc*v_Dyv)ImIJCE%XY@cHL4t0Ky?KZX_u-(CS7u!8N z|0A}au>FkfKDOVmJ;wF~+wa)^!1gEJ`4roKu>FPY8Q%RjHcEOxGhzFkppP6-@-*8P zXjAoUH%J5ME)8uDNn_i$BE*uKK{HMVcC-NF`z zdze#)O|2^s*u4+z-UoK?1H1Qu+55ciML4cOxwY8VV*}p>hVBDH_kp4Nz|ehQ=sx<^ zh~71#e_6fw-$AJDA!>Vw+8(lbXy})Rc=92he26C>;>m}2@*y}wYe1g^KG6eh(z7gE z;QJx){Sf$m2z);Tz8?aEM%zqK#!U3?O!V$d^zKaF#)oL*L$vWB+V~J{e26wa1QczF z3AAh??Xh*Tl_G0sDc<3Y+DlP;DQYi8?WL%_6i~$4KF0s|cnrLMk27CT)obwg_QMr{ zvs}x6e>|EBft2^xFqylZ~y_ zzZU&X(PFmpB!flJwMYLE-6caX@>t;SbNK|SzioFxHR^{&W&i63ea}C(A3(q*+hf~Q+jjh991vpd?8z^b_w^0ZIkVuZ3Xt*Y-P43w&N&a#7J9cJLBl# zL&V<}k89yJBg*rB*Y2_U{`bfBE9+D2AF;RFe*E91QQ{}t&%8XRX4?<{wY;D0>Z|YB z?!NlEdKH`jA9eq~%4zrP^r=2|6J!154{(C|W@(r0^Z>fCjR&>y-gn&lfzvlm6~v2B zqMml=zaO0xtCg{xX1{FL!TAXyTNji^HW$92Sa5X|whn4}+gbd62;PQ~ZM*EK1EuWu zU!qJEH~bw+G}Il_$xl3)ldI@88U)@Y}XlvY*#^bN3iEy=oO`_ zqRcn{zW(nkkmRl(0o;SfUBFwt!DB(o;NOAxiqL;*fY&BM@9~6I(FE6;Lm!WT*3$~S zw=KR^p!sx0)<;)-;Vr`#YdJvcjDtNsAKKFz#Ph0?&G^=VCUhTq)FW8#U0|=j05=z) zO|f@}@pp&ucUR)?u7r12!~J-CBT!EQ#$W z744~quPsWEtW6MX&Ap5}Oe3w#Y|Sr!T5ZS&x5lektV zL9gosTy)0Qz}p$b+v$mR_5`fG@byHCd!yG`o7oJdwP?{gd@FGcFbp`@h~Eqgm4Jnh z0p}TbKLm0C-vDTYm(il@@PANvKW+hL=sJK9+7)2Chi?cp#QV^69^os&1M+|BI=9v) zf+&uk*|bg4YIJLiqE-4Xh%e%ci17welZH^dJy|MMAx))3kUsedd=UHqK8YZrctPu> z;wKUxd=aU?|9=~;f*E$$ojr5r%x^EuIlDXghCLb|RvAV7psgXt+#GXrtfM)Hi;iU7 zG{?*_!^=KI4H4X9Y8j*2qm&#Y)y!_(?5bwB+w69k-43&xFuR>*Cu--hdxn(Et7Kjy z=Ee8)B+dMKiT+&i(=(kTl`ZTlX1Cp*3G;uFGCUIbBoCRRzG0fVY1U0MH_f_f*6|*{ zAS0S%rkR;zW{y>JoG`~S6gAQm!IBA%5Igz~cX6zkW6pm0IBSV$#(#XABN}^frESoj zJfl&LcZK6{ILghdXQ!igx;saHuG^fBQ?1zx({Z`oyhz@iZIRD)XV~ldW!J~s-qawS ziXSHI8%2AeSEYrdO8+g(ewU43?=LUKiN%%qg*el@bz?r-&gYz8>-Fy}#m(OGLNEHP zuEgNBN>&HT@3~dA&1A#0QT4XGHN82Xd6DN<_=W1TtkjQLYn{ti<=+=!*T7e5$6X?Z zU(+OCM0L`NWfOfPV#}iRz!ZzJlWgP1vaiP1${O3Y@J2IokuGGWw#YoOOeY>A)1h2r zLs?U3IT+hgDL(U!;77<=M8fwIWBPC0Ugledjp@jN=pDlbg)(UG?f0AX<+dNjWg^!5%2Jz$9 zmLB%&IQBjx68x0;be_ix-pqU%uPif^*oVZMSS6}3VD^x=@h;ZleSAP?+U#}w0`YwQ A2><{9 literal 0 HcmV?d00001 diff --git a/packages/open-scd/public/google/fonts/roboto-v27-latin-300.woff b/packages/open-scd/public/google/fonts/roboto-v27-latin-300.woff new file mode 100644 index 0000000000000000000000000000000000000000..5565042eaece497993160e833070a5b8ae665cc8 GIT binary patch literal 20404 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 literal 0 HcmV?d00001 diff --git a/packages/open-scd/public/google/fonts/roboto-v27-latin-300.woff2 b/packages/open-scd/public/google/fonts/roboto-v27-latin-300.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..46445bf807becda5c338b1bb09d2e93398fc4861 GIT binary patch literal 15732 zcmV-)J&VG3Pew8T0RR9106la75&!@I0FG<`06h@^0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/packages/open-scd/public/google/fonts/roboto-v27-latin-500.woff b/packages/open-scd/public/google/fonts/roboto-v27-latin-500.woff new file mode 100644 index 0000000000000000000000000000000000000000..c9eb5cabfba7d5ff961fce4c067f0d3fae77db11 GIT binary patch literal 20532 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 Uty>ypgDn7i>oZo>mcGe<1C*j7%>V!Z literal 0 HcmV?d00001 diff --git a/packages/open-scd/public/icon-512x512.png b/packages/open-scd/public/icon-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..f8fb470b0062948641ea918bfe64d3f59e1a5beb GIT binary patch literal 10406 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 z + + + + diff --git a/packages/open-scd/public/js/plugins.js b/packages/open-scd/public/js/plugins.js new file mode 100644 index 0000000000..9565c706cd --- /dev/null +++ b/packages/open-scd/public/js/plugins.js @@ -0,0 +1,237 @@ +export const officialPlugins = [ + { + name: 'IED', + src: '/src/editors/IED.js', + icon: 'developer_board', + default: true, + kind: 'editor', + }, + { + name: 'Substation', + src: '/src/editors/Substation.js', + icon: 'margin', + default: true, + kind: 'editor', + }, + { + name: 'Single Line Diagram', + src: '/src/editors/SingleLineDiagram.js', + icon: 'edit', + default: false, + kind: 'editor', + }, + { + name: 'Subscriber Message Binding (GOOSE)', + src: '/src/editors/GooseSubscriberMessageBinding.js', + icon: 'link', + default: false, + kind: 'editor', + }, + { + name: 'Subscriber Data Binding (GOOSE)', + src: '/src/editors/GooseSubscriberDataBinding.js', + icon: 'link', + default: false, + kind: 'editor', + }, + { + name: 'Subscriber Later Binding (GOOSE)', + src: '/src/editors/GooseSubscriberLaterBinding.js', + icon: 'link', + default: true, + kind: 'editor', + }, + { + name: 'Subscriber Message Binding (SMV)', + src: '/src/editors/SMVSubscriberMessageBinding.js', + icon: 'link', + default: false, + kind: 'editor', + }, + { + name: 'Subscriber Data Binding (SMV)', + src: '/src/editors/SMVSubscriberDataBinding.js', + icon: 'link', + default: false, + kind: 'editor', + }, + { + name: 'Subscriber Later Binding (SMV)', + src: '/src/editors/SMVSubscriberLaterBinding.js', + icon: 'link', + default: true, + kind: 'editor', + }, + { + name: 'Communication', + src: '/src/editors/Communication.js', + icon: 'settings_ethernet', + default: true, + kind: 'editor', + }, + { + name: '104', + src: '/src/editors/Protocol104.js', + icon: 'settings_ethernet', + default: false, + kind: 'editor', + }, + { + name: 'Templates', + src: '/src/editors/Templates.js', + icon: 'copy_all', + default: true, + kind: 'editor', + }, + { + name: 'Publisher', + src: '/src/editors/Publisher.js', + icon: 'publish', + default: false, + kind: 'editor', + }, + { + name: 'Cleanup', + src: '/src/editors/Cleanup.js', + icon: 'cleaning_services', + default: false, + kind: 'editor', + }, + { + name: 'Open project', + src: '/src/menu/OpenProject.js', + icon: 'folder_open', + default: true, + kind: 'menu', + requireDoc: false, + position: 'top', + }, + { + name: 'New project', + src: '/src/menu/NewProject.js', + icon: 'create_new_folder', + default: true, + kind: 'menu', + requireDoc: false, + position: 'top', + }, + { + name: 'Save project', + src: '/src/menu/SaveProject.js', + icon: 'save', + default: true, + kind: 'menu', + requireDoc: true, + position: 'top', + }, + { + name: 'Validate Schema', + src: '/src/validators/ValidateSchema.js', + icon: 'rule_folder', + default: true, + kind: 'validator', + }, + { + name: 'Validate Templates', + src: '/src/validators/ValidateTemplates.js', + icon: 'rule_folder', + default: true, + kind: 'validator', + }, + { + name: 'Import IEDs', + src: '/src/menu/ImportIEDs.js', + icon: 'snippet_folder', + default: true, + kind: 'menu', + requireDoc: true, + position: 'middle', + }, + { + name: 'Create Virtual IED', + src: '/src/menu/VirtualTemplateIED.js', + icon: 'developer_board', + default: false, + kind: 'menu', + requireDoc: true, + position: 'middle', + }, + { + name: 'Subscriber Update', + src: '/src/menu/SubscriberInfo.js', + default: true, + kind: 'menu', + requireDoc: true, + position: 'middle', + }, + { + name: 'Update desc (ABB)', + src: '/src/menu/UpdateDescriptionABB.js', + default: false, + kind: 'menu', + requireDoc: true, + position: 'middle', + }, + { + name: 'Update desc (SEL)', + src: '/src/menu/UpdateDescriptionSEL.js', + default: false, + kind: 'menu', + requireDoc: true, + position: 'middle', + }, + { + name: 'Merge Project', + src: '/src/menu/Merge.js', + icon: 'merge_type', + default: true, + kind: 'menu', + requireDoc: true, + position: 'middle', + }, + { + name: 'Update Substation', + src: '/src/menu/UpdateSubstation.js', + icon: 'merge_type', + default: true, + kind: 'menu', + requireDoc: true, + position: 'middle', + }, + { + name: 'Compare IED', + src: '/src/menu/CompareIED.js', + icon: 'compare_arrows', + default: true, + kind: 'menu', + requireDoc: true, + position: 'middle', + }, + { + name: 'Show SCL History', + src: '/src/menu/SclHistory.js', + icon: 'history_toggle_off', + default: true, + kind: 'menu', + requireDoc: true, + position: 'bottom', + }, + { + name: 'Help', + src: '/src/menu/Help.js', + icon: 'help', + default: true, + kind: 'menu', + requireDoc: false, + position: 'bottom', + }, + { + name: 'Export Communication Section', + src: '/src/menu/ExportCommunication.js', + icon: 'sim_card_download', + default: false, + kind: 'menu', + requireDoc: true, + position: 'middle' + } +]; diff --git a/packages/open-scd/public/js/worker.js b/packages/open-scd/public/js/worker.js new file mode 100644 index 0000000000..5ce38fed25 --- /dev/null +++ b/packages/open-scd/public/js/worker.js @@ -0,0 +1,9 @@ +importScripts('xmlvalidate.js'); + +onmessage = function(e) { + Module.ready.then(function(mod) { + if (e.data.name.toLowerCase().endsWith('.xsd')) + mod.init(e.data.content, e.data.name); + else mod.validate(e.data.content, e.data.name); + }); +}; diff --git a/packages/open-scd/public/js/xmlvalidate.js b/packages/open-scd/public/js/xmlvalidate.js new file mode 100644 index 0000000000..b4dc60d78f --- /dev/null +++ b/packages/open-scd/public/js/xmlvalidate.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};Module["print"]=function(text){try{postMessage(JSON.parse(text.replace(/\\/g,"\\\\")))}catch(e){console.error(e);postMessage(text)}};Module["printErr"]=function(text){postMessage(text)};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var WASM_PAGE_SIZE=65536;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE,"maximum":2147483648/WASM_PAGE_SIZE})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPreMain(cb){__ATMAIN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var wasmBinaryFile="xmlvalidate.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return Promise.resolve().then(getBinary)}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmTable=Module["asm"]["p"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function demangle(func){return func}function demangleAll(text){var regex=/\b_Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var error=new Error;if(!error.stack){try{throw new Error}catch(e){error=e}if(!error.stack){return"(no stack trace available)"}}return error.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd);if(size>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_get_heap_size(){return HEAPU8.length}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator==="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}__ATINIT__.push({func:function(){___wasm_call_ctors()}});var asmLibraryArg={"e":___sys_fcntl64,"g":___sys_getcwd,"i":___sys_ioctl,"j":___sys_open,"o":___sys_stat64,"l":_emscripten_memcpy_big,"m":_emscripten_resize_heap,"n":_environ_get,"f":_environ_sizes_get,"c":_fd_close,"h":_fd_read,"k":_fd_seek,"d":_fd_write,"a":wasmMemory,"b":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["q"]).apply(null,arguments)};var _init=Module["_init"]=function(){return(_init=Module["_init"]=Module["asm"]["r"]).apply(null,arguments)};var _validate=Module["_validate"]=function(){return(_validate=Module["_validate"]=Module["asm"]["s"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["t"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["u"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["v"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["w"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["x"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["y"]).apply(null,arguments)};Module["cwrap"]=cwrap;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run();(function(){Module.ready=new Promise(function(resolve,reject){addOnPreMain(()=>{var init=Module.cwrap("init","number",["string","number","string"]);var validate=Module.cwrap("validate","number",["number","string"]);var jsInit=function(xsd,filename){var code=init(xsd,xsd.length,filename);postMessage({file:filename,loaded:code===0})};var jsValidate=function(xml,filename){var length=lengthBytesUTF8(xml)+1;var buf=Module._malloc(length);stringToUTF8(xml,buf,length);var code=validate(buf,filename);postMessage({file:filename,valid:code===0,code:code});Module._free(buf)};resolve({init:jsInit,validate:jsValidate})});var origAbort=Module.abort;Module.abort=function(reason){reject(Error(reason));origAbort.call(this,reason)}})})(); diff --git a/packages/open-scd/public/js/xmlvalidate.wasm b/packages/open-scd/public/js/xmlvalidate.wasm new file mode 100644 index 0000000000000000000000000000000000000000..cba9071104d9c6c61cd6ca23160a66bee8a09336 GIT binary patch literal 524846 zcmd?S3!G(DedoKM=bWl@s%lqtK^NT}+2`1kvkp`LtaHv@IrJ@IiutijgQ$h$OyHQCous6E!4(L=zHQ#rO<%j2VdteZRl| zT6>>;s!kz}CZEs!+%7nK?Y-CIzy9y_UymKV;L=}?qbQ0$nVfV{yd3d=ynIoztlxBb znFspykD`k*(z>y0bWyHbvP3-cX%a1a$kUMEQKYN~_!nI?;on-ZPL(E0JEWsJ#lwt3 z2El>l_`pSV_UNL?s-#+PE$`PY`4jRjUo<;>8B*2>8c&w_NvTxH7wc#LNL{L8c|X7D zfl%K8yE&jsrVen8l>sarAg}%M^u>CxpY{*vcR%UmqM7&w@qdY8et*G!e=%y2{;yHS z?|+LDet*e+Uue(&Z+pIIze~|1Z!fm=FI(CF$8!F6`+Y$YuOurgNqV^T!B%oY(uuQn z79SU7$0t#or)iQ!Nh^-yq}$4pWM(?f;&#%_kK?9@vnWr3`+i?-ctvsD;Wm%jhSu0Dk zR%=5Zw-%y_Ru<2;CILT*sXmS;@@%p-7sa%Y#{d#%X)EUy>8zznqYTifZ!Vsi&3f77 ziCGjSd74keG#gRPRFq8dD0@mW9VP8-j!s5Vr#q2MP`;J6TJiCdY1U4XENf4;vI5|f zb}LWvEF*gor}QjOCasfnIRb{b)l<)=^Z3W3=_kj@rXSrf-Hs=Jg3LS?sFM`bKg&ly z6aDLTlB5IJt)xYJQIr?zeV(+^w3Wo2UNjMP5Grt)XA_iF{!P(&&@(X=4U%m?l1;^NPG%a+eyrPp9QnqDelkxT z* z~>Am9|mcs|j}CtIzYBCQE+@IVugYJUzaqab|Bd|R`L+2q z`LE}{mcJ~&I)7>snE**CI>vVX|Fo_#I*YW9`v%h{K*zt6syJ(ztV`+WAf>`3<6?C-L_%^t}9Cj0B` zGufxJzsmkHyFa@x`-|+)vp>u3&Hgm|RQAd26WQ-&Z_nPJeIUCtdmw&a_QC8!+2QQn z*?Y2AB)4X_Ww&R)pZ!7hj_jS;yRzTS-kRN{|Axb-SfM(JklPO1el-qyD^l&BfjISlXX0vt4CJc+a*a z<)A}1G8dJdZOK`i`}4}TAr*MM%{&p~{)}kDgZTkj&+N}o1?4xmiL-%GUG8t7JF#_c z9&`_D_gxbJBdt*XjH>XBoT=2);?scIdOhKe9ZSyysEN&bQ+y{@f7DHY<2 zOY77mzJ=)OLD?zhPE86SWnNgAE$1Nx1SsYPyvAYfv*h-kw`yYI)MUP# zw7Mo$*Fv}K+Fe(7Te@Y>?s~c_RUk9)%jr`EemQk&vXx7EYH|`?gDa45pD2D`631P_ z`)D?g020An2K2a`6JdjJ0XEDjDJ2!T`y%&gFZG+nn`jB%X6hl9$vtd@(!+9YD%#}U zY4X|aqh6#N%Ggcp=4W#EUVgi~_wIuBvFn|=Swc2TspA~-P~4hYg>Fi`5xY*~J9)2 zkIs_jk!U|q>x{%$8>pUSnv({BAu0xgXwgNdM<7M|w4YLSI!GiVX_=r*sajc=2ASF> zlQop74H_bo6tCVGRB2r>?&tK0YLYUS9s#zr%oYc^z#8h9Ay@`LQl^W*l@)_cw3>U+ z0HFJp7#o1vE|&(msqNS$n1fOxmWy2g#{W?+a*0cICm{}hUzjWNVg~(FJ!$5vo^ibr zl}SFRY}FRkD`kg>iSCEh(x)6+72qy+rD*m`ae}QfWXn?Z<8((EdxS!Bk5I>B)wjg+ z=sEO2h-%Qvo3)x&&@475G*g!i^YB}T@K)9q18oR z%Je&QwnMJevbZZc7envXWo3RTiZ`W`1DFc+*)2P6;^IN-x|fydrS6KAGXjV?fCK|M}9qJt%-|lxnJhr!Jx{9qDg1xaXflDz%aILh%%Y*3Ld?`LI8WSp83ah`)Vi$o}U4#HRB zGpBm0u0i08oDeuEvk?Mky|imN`)wFjilIG9+DxR)F73BRN!wmc+OA;gr_k4TW-XCv z*oX|qED4dTBt))~5V=Z1LX5+`%J&JiiJo-0U*(O~-OhP`L)B;|?eVb7YPRz>$=t z0mPoQ)T5CJm!bFctb@LN>v5(NVfog@#Wxc(=lxc1`E`GNCeFk714D+@ z0Q{a+IY?2x=`b&Ks%!FR^apG}mycd~B2>CBz8wAz8GZIOzhx{o&jk3UXkrG?yWJW6 z%d@G;-ptHIr`7JJ({v?Sc5l8mR{rhM7|9;_K=0v6>JCSC^Ra7V_m}oyCEl|cCvG6j zmvDqib&6sDZFC>IFA0C#^o|#jzCyvThPqv6&*nx+TK&hWRWz7y^--R*s#ah6^4Pud z<$B;-MS7^%(J85q?bNqx>iA89!oB|GwEDe)Vo-VTHU<_=@^%cm5s3FL?>){FUx;S}=PMqoXR$g|ur*_93P6Ue`S&mY2TxmJ$YGg;hGH z`imjr8hkk2bzk|7n8pl-1>|9XTX(J;Z8W62`Y#iW2yh0()-@YHS|Je-BKI4=QB!ag z64kUPU6XFZ=1U_XGTXBb#|?20bWFg3JV%iDA2l9|%)4?Q`n4apNi@@%=HwfIh+_Aq z9?n+gZn%8W_0E=7M0N2q0FRk>wG&*DJ})A7vvpr&OoB#|(h$nGni4bG;uT2a8Yi_q zClMV+(UxrpD3@dn3mKI$U-Cqh394dTOrdm*6e^avo5XKjv0@L{F)$UKZJ3{}>7!{^ zgS?@Sgno57axblk>F$3`VvJ$z6A2mcMz`jTS2uWLoQlJYj6#=r#%zgahrCp&M6^%d zqfA`&$VAAPm+X=>Q|@D^=6fWwLxWXyjBMm-K{rv)$R_uNKiR9d(o3%qYnqW~>mWwZ zNpv*0)dk^|=&wN{U`i+W@mfC?Z3HPoHo!Qeg+V6(ttF~;Nig(0)8C?yp%cy%x%mAB6S^`ddWI#4j7F9??)rJ(*PznS= zM%h~pw&P-1+GxprCteKWEXsm+%gWQ@o|J6DzI4$IF#|YXtHKx5=K0qi;&d(HFiB_D z1%96lsPLrwh@kXi-wt4RHoORqLch~R8T|o|lyCNN6#i&U+QBn?b zgLCJSYSiqnps7>L7z_i86*RcZ_Xfck)EVERjXXi1z{>5P z&ouZox$P~vE4XLG3R{VuMn!q1uGlTgo*aEO!C5d5l)CPd2yneEcFVg}h{(yQ$@#c# z*M1yK&y#rf8PF#51>(DyKO9f~$l{;#`;w2#*HbirDk`_`=0r`Z#`{!taj8%r7sqdE zbOgB+r1R(2U3jj+QCupxM&T2)SMa?-@Ih;XFTkOu8}N~36u#BK!G0b%!R0Y^azxa} zV1)ZT75<5-FD6Za8A+x;^6^tlXBk`Q$X^nd%F#|4!#AGGZG3U_K|-Z%pK*WlIXZy| ztznB6mR!1LK)eXdxMT4icg2+li6($X(>i6gWyz7SROVqQ{F zNPvw5DoOAokvL-JKpsr&bqk8~6sQFEoMw`J8dUBqn$+W0cD;ya{VC-r2*MK(h%8QS z9$$ujo5UH*J&#^w!9HarWFzuRmImn*ri*9WEHWtlPoyDNc#u9zLMMaKS7kDDv{Cjg z_OJyr#T}Z40;*%dk9`Ok%Z6B`G=y?9k0PWLk66{m)!J*Mk2nWv14mDxsmZdZKK4pR z?TRC#U=&9 z0B{EO+mbWNY_kTMlM)a{W__Y%)|D;3D+|6W^S&!ZIn5Lhe}Jpl>e};a-CTf{n)3WM#xayw4@S4C^x4GsvG7 z1K~N8^_j$UJi`z^7v|FR9d!|1*04T)Hmq(6Q5;n_6RVlt`pu+j25PQphFaEb#yFEk zyI<}25%^Jp+G#CULaMg_hF=^baXN6|-{>;09z|aBrZzD5dX;B9t?hyC{NMc>vCX5F zKn|2uVWz;>6%`*%gaL(y^&Zmzs!jci`EiqQIe6!z4}x+9{1K%U>Y0KtJj014R3`Hl z6Zb7vqwY()hbdGC!B|Gll*rv-B81@oCyQ%8fu|JH?2@^e!9n*`)nDg5VVnErbg_Z_$=$P}pG1)P~Cle0lss2pE z{4;!l46b4oRUGUxk|JG{s1I_Lb))E-Cgi?PCa8;=lHEE0_JS@?#W*I%Z}RoQG&ok6 zUpZ83I%n>O?;Mkh>8MjQ(mCto_1M=j9ue&goerpG?limzxkN*=o8p2~QG2l7sc1rs zifkHAf~E#jcQ5l+*T?RoYGC_f@e{_oqlAD5DndwLw^G>3AuQu)5-P2z^A*)Bbx$Sh zICF0DRHV@hO{7Z*Z=z*jc+CcVH9^-%pPF*fyk%-Ps26f8sGjgwrl5e(T#0*X6n)X6 z`8)|46Cs~sA%P$HPHIU3)R(xE7>YY&K?{o~FsSyX7W_oo7E|icn{qeEWuno%-3K@x9$Hi`IqtE>VNhqmM9ckN)Lh!^QIEt z-FUj6M&Vyds=lcn>XAzSgWN^+Kq3uz+Z?M4VqSbkGHNdj@}&EQ*iR9%vcpCSr42P! zOK0Uj-$xy8`BZd1S9t1tupwP)&f*Ar;MVFMyjQGo(?+zV<_O2-t8+!}{TnrxD1&Fy zxsSB`PzC@q4L{9_2(ucN;nnF62n2=9A;S^Os#w6nlRg&I2FzwShIc+110l^^H6k!@ z1lAgtO-`L0>8aKxe3uY*Atd1=cZ$O8Lf>#H&8>mZU4gb{?atGI^REp5Eh zh~SF{<;;;Qbyr@epo*dtls}}KuD=r!24KI}j}dT@l^beQ7yaxmu}iU{7%o&H9Q&Z^ zD$>xBkp|?Z6_jvoqv+cBh(SpMiF>8M64|P`*yJ)%M zs*6HQ#jSD}R>hDk<_E_ips*0#Tpj4^^QIXPg5%%-W@o07A;*c8s=!zx8!a@5EQW4d z7|{qLcz9{bx@#c`1$&r+Vbm{8e0$IiEFcI@p9E{1c8~^;?WUa(^9DGk2pR(Z#yG1Jf)O6k^D;;cf+ODfadl~WY$!# ze_r4EMJVQgDFh&wq)(MHF9;;@3(_eu7F%SM+F+e|9F31PQO1xq2lSL~NIhU*^_&z& z-dr}=L8Ewk*0T}0-ZIj%ff@a>z>JXV9@7OV+U+n3Xa=*APn==-~+TvC}}GP7|}>H668q4dH>a zhe!ku%#D^&;}Pif^?vWgs9a)Gkx zeojIlyO=`Y>aRpnApzEA`l+(!jen8;#rDgk@q%T{DQ4faeMgI`$r9o^;RSV=>tcOmtT03j= zFK;srii(fL8cDW#81AU}l&xM>%!IDO2gRJEk5QU_I>mnikHt5wK#Il=$wcV1_aV2H z21pi&O2bnHSSvmm(~*zHLP~Lv2i>>FNop}WLH?BVl0kN!%n!-S%k1ZUfblxwI4u42 zQBS1sg>G38$srLzsKys$2AD>Gn8G`kU$P%2=AFEhWa+k_*IRi0EsN;g7usX2s6|zM zYjK$@L517)KRvx%CW$FGtr{zB9Um7%eA>N-W#7y0=wtFQfwXu~dAFg;+86LQ6O1!#C+)yR1t`gT&iCe40ZB^oqD)G)L zajMC(vmAI`+TvH|PsY<=NdU8XRxT#9qS|x6-61P-|yQ|`NR*6qkiF>QWeO2Pi zRpPr<;(;o0v`T!sN_@Ra9H|oDsuB-YiHEDiT~*?6m3Y{QqF6%Q?I9h~0Jz^5cHh&E zTMDBdVZB}3;ypH##grKA+VSja%p4&*ZTG1wwtdBke$ZI&vRfiJ7Og z#e(M9tykrjRAs%Akb;dWdAFuY^C)C=(TWR$4$HWZThdzy2C@uH%9{XTYoJAagO;sj znt=WM8Z=VON?|KC`NvJiuVNxa*pHx(Vwdr=q${a~O6LbH^GY2Cciw3gckFI%t~Mt! zx}|JMGfR7DtYk6MS1^7g~u5pHcb4P9tS-Y+vr@-VDtE$c69 zJK}vc9Q2q6+b(Xb7d2Sd2jsjb2nf*w2KH!7`cLRGz{AoKTa8T2$s=BC0b6neQBq(O zt=1Co1(8(7TRqJ^3mcY28WB)9FidR$mL2QD zl8nG&5iMKuRT_dlL_+X3&FTv_jR|e(F3z^y3wc}B(ve6m`;TJ|klQd^hN-IwQ;qn3 zCq`PmZ;!2eh^<4)dsqvVgN!rAU|p>2hexfCoSvzT54ckihR+8>P3t>Vu-4(cWnkn&Y|`G$dU9XX({h*!kqENqE%#K+6m4 z9SE#n&@Z3e7P1>x*&+&3)szhG6+>Sywxu|AVV_(0m4=TmI_bUjIpCb~E09ogB$co; zvEU_u36Q-C9>I{T{ar3wIjm64fK;u4#7Z$p_K%<>{0s=ilJ$!bhNz0c;z4C-5`|*s zD2%ow#59$Oay2So%ojSBBG(3S&?aPz!t940SK36Pk3;%gRu^f6CW~#jkrGnApfD^O zVFL{{$R$n}-Yf^RyJ*)n_&{me;uo9YWnsj*Q!(Oo;|cg#Z(t-Pbx@%WLa0}ox+i`e zxk;%5DMDh{pt?-VR9d{+azVEmi~xcPrXvMuw=PKasM*jpb=_BQ(?3>$pWWGO-7IWD z1+bx9jFbHQhAAoYM@&fxHv!B(4M|C1=#?_s+9+Xbv~ttAQ*5xLDmplMJm zwkzb#8s_>r0*_xq5$#($l1&lnan&zMw$i?uB)cQ%pZ6h^!8T5ykS3)0SnDk65fs&S z5Qu@=lMk4(0*K`~T2G2^z;Yp$>c|^(Z?bip>Y6~Y4Dd;DqP-RQCXit*uCv~A<5w5? zTO7eMh8R)|Af{xJyr5>Of>opb0G(Q}NZc*mBwwC5fVGxKu0_y^mP^Dt%c~D+yWh^I z9V*kEv)oK^qirn5jy?0L!Sv1-oJ0;iHb%c6E} zzxpjq;Kh6TZBRrEtbQ< z&aWiAFAuV?K{9<_4Zp9T%HS(#-uVi$Mg?WcB0ISSBMrUe;CU!BXsm0SkicP&1q*%g=u+dp8md0nPn4rfR#!KsssN3(tj4Id0wmn_DiT}(kh!Ml0AF2T z%yHhJwfR?ZpIiHG-~Sc{EqfM=v&;M`=>-F*#bTMKq~{GP7Vz|A4MuCpmgd)Vc;@pJ zYRC!6(V=PkfBL*Zhl)F);!a)hS%X9zL&ZA=HQO|KEAi~nDmzOsW*1SPG5BY$B7oPe zlG%a5bU9Vsb;|-YW(Nno1N#S4<@EWtv&dr3-nOqY1a}USf40g$OE%VFoPYa%mSeE7 z@xXv3Mu0`u$Bxku@?{kjRuK|a6^waYSV6TjqY8TE^nv{-!07`6wkDKp z$*lCWN=+-L&zF?~o*f+4GV5nl1-Yq~N-Cy9e7X|50gDLBiA6S(EVAv(hObDb#<$}b zSKiCc_z+_B%&QLq9$eJk-0vdU* zswA~a@HAORLzjAoaF`EhK*vP4W9Ub8fDr+~@k*3(CYH&lLEo{6fuI-`&yv0}g0Y*z zzi$`69m_26+$W!sZWrU7c5r9(bGIv1>Zdq(5K$wsO+O0)j4LZUbkTO|z;#l0W$X5x z+YcQ?o)KcNikAN`kWs0;m1VCoSk|*M77m1V)DD#ZaU&a|uHk)#!17M3fGBX)u!MZF zSc}l2a#BmuSm$Abub&>>$B4zU5Hog6VQ#{AG2lnKLw{R%Iqv?SIK?tSj0n;lwlNew zU?juB6Zv3O*-%Kqi`r)`^Cfc_x*tjXqPL^ihHPu(KJf^{3JV85V#^)02Cj@wQk|rd z9qw++KoCP73wu1TjR#tk=ooGQi!C1H6}NG^!+k-65W&Ih>K7usWU!Sj()W0gDpj^k z*)k?qTfU2Rj9Ptk*xlpXq5^im(nSXT44#?T1gpgb!gKwE;k9WO@Yfo+v5a(FG>Q?(cJ-p4DXTAW~td zQT(*RZkanO&LRBvyRr99%4#qU@2nlTfeSKguFZz_W9Qlc4ASXO%1ML3Rm(AA0HTij zjJvI#kl#wF_g2GbJ(_3J7?Bvm&ne`5K&))T4+a7WeN^Yf-PG-%FjP)xuLL5}4DeD#YXJAiQo(UrsC(l?YbcQC& zQ2l^{k`+pk0mX<>jEDkiTOloy3joh0Y^=z%SEr)`I!^MJt%6%2;uhmBX4+uPaa$?m zF+Lycr@_wzBlp@;_}Q30LP&I~3Iif_>? z;ZwM952$>N4f2n+ph|6B>6$vNIAiCo`4|}v4v3+HbNc2DV|PHaqt7%Q>gw2Y0g$dLOG3uN7|`cF(uqF6Xv_TMk^V} zXYjIKl5I-J$GDc<6=9O6rbz7aT*J+<*eMeK4$ysncaGnxYzkmx(o6tJXxEYx;v6X90q}T0_ zPWn|yU(28@6^+euND&YBLQuu#K&7NMc+`gOm~%xTVEu&egMj8I2lhd+z4xKKP~7 zL~$o$20PvWTgZ0x*CpZc(360H zuggWySC7eWkD65=7OEmOkUI?5i_gUrmb9ql>K+OiYPP@yJOy!E5j%C0GQHxKlrrQQ zSCxu3tAg(vn}hB=jMZFscMue|#+Y{>ZA=W;0q%}1&H-f)z9w;Rd~G5k=o}UG98Ujf zJM(}63&6ri5LeY;0jV!9-kNCXk;c1rGLWz2?qMZwoQ4vrX1jdA%|=?c=3$xp8G=-q zByY5?V6*HIGO@`?*(od$?aOmki;j`*9Th#iZ(+>Y*Ot z2`Zq01EyNq=n)ZslYWphUCMN+*vbmYW#a&0Tfs-kfO!#dafVb+c<#Wxz$?z^Qsb&a zJzx$A22ZI>l#&2}6xnN2y;Hjsz}K$ioNyk`Gw`v=N_7c{d*tIIPz)+RhcVIDUyD-E zApxwNSj6*b4}>ZfdW>=j&L?muK<8NmPsLaS{ee@hsv`HQ8&wtFdoC;SMl^!l;hAbG z)3lIjN~)d&Lr+ZKDYJOw`_y?|4?xDg1PJ80_lm&18V(SwgC7&X=r}v52iQ}{wJo`D zz*%$R0B&ucVUu!|DiDbfrC>cm6NPjV z;N(!x!_6{&l7>G14KEq~n8WJZlClfyC7&$Kt&CyKY4K#KWor(&p$3)9<}_=U(W=YP zuj0wl&>H8Lo$ht!DnQtY*Ba)X*05y8Dif4}jte=eCli za{A#E3-NWD-mhu}-g=;kZ%niiHa_&*aWQKSk(}~~re%oAgrg~`2#-!qwSt(|aTr)D zIRv7t$8E2Pi)r;XJeR(Pz8$T2uot3eQas%_f5BFpk5*{~N2?1?m2&%a3aa7%&^((I zqUQSpEO>TXxdTd49e2wctw|Vz=M5O_0iCE8Ggq+IeemVJpFVWmj}+VFP?;@798LYx zrun;%ZX7qN??6V-pP_iUEHDB^`D?__ys`3QJJ7TM3uPYN=n_an$MtJ}A5pN%+*bXCeJl$70K|D%g5_cZptOcU1_+78MV_Y}8HP-d>{0xV z?}1`CK>!7intT#)tQv>>LAAz3A8t}Wl>1oK2QrK@Pu1~eI|8p+kKGvu)b;S%^Ajsi z+$^*syaT~Oig-C7MG8VlK|Bp9je$l$N~-`V=Hz#1)9AN_%N8Q+IEYM`v)Ooy@xW)E z5D#b;mJAx*b=VyAsPPn80te(*mgv}peB89-2Bugl^M>Odr94Q;hf*tlNY)=DjYkz0(#>5I+&M z5+W=h&g>Lt#!4YlM~|nx#}ren!6c^S*hV+zDUO`gH6#_8CH_Ua1LCkpo>@W4u}mJ& z>!`-R9T-h6g2PP`I1)iU4#<YMX1ybQ6%IP6_4T7MK=i0s878*KOillq?*Z6hB$K z-k&{G6B5s3x0FvtEowx1XjO4ht}cziDW0#!Gz&!aETIz%h9GUJ8B4+);!s5>{<|>; zO$bt8r5p_6Qbh{{u(AaZrR8f7(ZoC_LZk6NK8wGx$O6T5xG1?107Y~p2O;o;lS0poSPJl>1anNnHz{V$FhWK!t<$9r1$4u!zf}6?* z&~>BDG&Y|^?yLV3`|RVf6vsCfnY{LsoB(st_af41h@zTWFc?CP*q#h?2psFd@R7l1 zg(46!lz1AH+M`D8BUCqrFO7>_Pm>fvMsN3K%q5*_=Fy8{p!h_-xsRYSu4J0uZ#DP9 z-|hk}o*Y3HbC6*&dUa*8soVW_T%%roun&J*bb%IDv}A-4G^v6}EvqH_iEG&rGzKM6 z0X;sV#~dW${O$tAV0YV)`KX@H@x14^!Xk8KcG=$3BXyrabRv%CS^6tlX}J>Ho5bEA zi21YnOl-RUA@bTbdSG7iLS-utjNpV_Mk!n`LG~6O&?EQ06J+!i@BlS_NRoDMm4FZo zADvwVGFV7m_VQsv#W%k!b{~A15%>ak^6t$dZBqP4CY1dyS(qdog^4zy20CT4wDFk3 z3B%b+Vr7_&f;AgZ2Et;hgIJ^<(zyHDSs$a_UeEJyOKwSENpi9)7_Jet#gh9MZ8(9j z3uqd6%3d=E3~NAoJdn?_O7ufW2g4+{>1a252b1WVoW(8zokx0NI}% zO3lSsb7okuR9c^mopP)z@ml2}P{oP{_ns$fxRtpN-s2^`ub2>jFc>W69%86z58m@+ z|D4~KeB9(+IRd(GPE0ewNi1+cS%J7)Su}(u-GFCdXoRA&A{ZV8>E)Z1Wo|QpWMD-6 zBzVH3+$aOq8JaXHBG6S;wbB|G+)0bYQ~R-sS-**a`*;cnf8OGBk;NnbGB6nH@Cq$5 zCw2O6e*Uwk=q9!k7&-Y3OI=Spd#|2dcaVjzFV95nm6wyecfztBdxQAkPZN87E9s+c z@|*YI4(xH)9FA1`b>fzr6Dx7WudtNNKO0NuRgHouC~e#liJ8b7$J7Ia`PmP zRrW(Izvnsds$X92Pt<|0gvVIy+c;6j?n~4FFV*Ej;Wh|B1OO~1aA?b<-ZOc?BTV!J za0dH!)rB!=`}dpz;XC!7SbZO&k(+T?41FDoNfimWBl%$^L*+x{280@s45MoFe?W<- zro)5i1#N8yYf-He+hE@_3hK8FXYi>=2|e zBtuR_z?xtz&VW*8eT+h$FzE;{$C|b=W)3qZT8za4L7sU=A~8avZ^zHFbFqxIPGp(6 z2_W&dJ_m~?T2 z&8z*PaA8mvgC9N@Vp`W&81et;K}OR2Sd5`zVHblpEF+8N);B6h%;PSc^Oi&cg(<}Y zSSnM=?sz~@jWTez{4oG+C85JHOK-$vaWHPgO6{I3{yD#9+-&8FG7arp%&oU?W~a1T zR9i%(tnEV+wtGa7VEAyz2(hwYQsz&zt{(%io}n#Rvr9xI@BYzK<6iKhdbp1}#{bdy zx3o#l9exFZ$44G;XCv2LbeHeZm2>iQmtHoAE<=l_S|$Zlm$KNZWIeDJ0r2|hD>7RQ z$p>B*`!pn#L$m;Y?#sNfm9MHDhvYz+yl4-87?8Vrtv!~f`HiGR-I)P`dC`~D%FkZ8 z58M)YR*i%=^rXj`%(=VA1KZK|n^>0Fp)^$rUuOxm&CQ+xSjH{g0~QA)T<eIAau1in;zQ3?wsMA$#wl`JCwnjm{yW1n4DTbIS2BsPQ zRq(5YnMYq0xJsml8Cf0;JIKe7ZIz_jc#{+(GaGLr3n3?@1$~@BGGLvtR+7S;KP(={1&WK=Z_<)rsPD6Hi-%OW@MF`<8%N1oLVBtf=5LUc=51w2{ppB7_SduxRM&xjsbl4_XD+(J7#+!=dv4{(iS|T{j;z36D=Rbh1Xc&*GnWZd zdpQVDpHPbT!51u2SiB5r-%BXiHlj2slkD;z-Z0*d`hbL%JAux`mo4#o;_l7+G-&bU zswl&r*XM!)W-6JcW$cK*qd6I!6H4nw%{Ebb8MGgfOrlxvOSQaM+ZKQiz@Q{!EXDHt z5zh#JYabxfZG<1mh93|vyZ_e^{{|BJP|vt8H7==oDc%#5uwm>uFjWGe)Ezsz$%Y*B zU1I=ZB^pg-L9anu;RwyBz+@^V2d{`rZJRg|$Oe}x+BX>GQWN9Yw2J~n4dzpX#W`eYc;JJygYumrEMJ#`WBa%~R4zG+X%&L_NX0tT(w=gxxz zHrN$FUHmT#XP{WKVlp!-LjW4pMSX$wG&C`xmm98ES*pF+5`y!V>$9E9Pp9siNUYq< z)b~oJTe9*om)@egWRLswTkn5seyISs?fTHG@4h-DR!WXa)36-2UmCPzk2qXu(mniY z1Cy|mJL;3HbXgqm4W)CLKTg@VPG6}-enPfKM-(SJs=lev%Jo@4^6bcR5!ffgREY7k z(ZWW4q+uCJ5X0k_#n7E&zZu8znIrmQIFiwXWo7We(h`_VH5Y_AWpxOPMF15W!#SYG z+5pt5fEI=V(8#yvUQPayN2Syl#8gBWQ&02)J+TK2_&+7xp37oAI2lvNiaDU_p-4H*tabr z$z9P{U_yX)?nz_%$F^^TdG9y_NvU_FR+MiX%m?+Nk^G-$Wv%DtJ=hAHFbb;2K3*_ z>r^_nbsJxK-*uov$7;O7rkF5eG7PI^P=ZdN9D0O5uXLr z%8eCq*q*>Hv?0boq9F^p_Q;a$uDnkblILiJq`~>$qje!h%cxTvXG`Ba~Mt*vc5yCv}_JSXZUtGTCJItVU>}6LxC=f`&Y~l3^(BM*VV6Fm_IvLqf{f^A^dAykI+>3TrkI zRLsa|p*YknRB({v)Fe}y#Rtx4L@_!48ub!Pc;viYXDWm`l$F5pT0E_A6eDyv1qu-6a`N(@BI>?FQu3U;L+CY#K>Jcf%L8_e!(ni0AQvr15zX7JH z3dkc&nq>$TU{_|1k$7Kd9i)>DRs=hm}I7Gi@yC(KiP@>7Tqj( zLyfl&vO^R<3{IB(u^ZrkLpE@5suLy>PMGNaa%@KztuO*&VFw*wIh=8LQ<*;7&g&&E zizM0u1yfcmQkR@Ph&LA}a0o4fIam)J#+%}2VX~D2XfsO4Dyk{Mxy8>aO1_fN0c|a` z58H@X?v9m=xPiul?_9}TR-EM*JxB++J9!cnpeHKc8*frpXRA5LiB{dzRS_jwY6vj-Pr^sgn&uUbTc`TE zzDAMm7ZZP&DvMLt8K2ONT|@vOizc0+ePeC9KdQ5_6_vQX`|gUgK5C`<8*WAA70Sc^ zX;-G-lk0s@ET(rY*tDV@*k&`?&8>&q{bifKl>UN#*_mj+YRgdoEia2%nBKDmnXrNE zPRiCbn@P%wXACB}ea2vd*tp{}=MQ*1#X4vN!nBI>HTGtrhMh|TaUPqi2&#jLHjR^Oj?uW@DdqvYal@>@h{GGzNcev$^)@>tf)%qtsU$q|l*6qT8 zRCjpHzV+DEt@9n@M(f(atWy=^ew6NjHBw_!NNi_D&PMP;)>v|*J)68_50E4`L1)N6 zVhe?-Pm&C(V>>Bw7hl3uXvjZ9)uI}w_1QKaFe?)jCSQUw4%7w^Qe$glNSKVTO%oU9 zovAhfPwm~mm`JkaOh>%w7$4K}cCZ!00-dC$*amRNJD2wlx;vMjS5{}Y*;}GD;DY0f z{A(+7>_e1$etkZY?)>>jX{h7p*eXlQV@jRBs+75#=am!H$y8Kz{>a^$!`#rJELv17 z<-Broq*(KA%@J-o)C87lHe~0ng&K5h8_33rzl6)kadu?mw6s2>DPEKCjgPcV7J{qP zZU@4p923P+Q<~2!)2o9Agf^J)p?>TeJD99#Voe6mGSenz4-Y=)hC~~S?6l$ za42FRo1uwE`ZKT6&SRePEU6F8({8Hz#vdM?yCaw$zUMHPX6MgFWWkPT@83US54^DoujR#fKI$Pj!V zzSgC9E5XqAAwRL|PejZ7iD-7NRrmUYeJD~~rgUX~dB-Sg;wZ5Il{?$OkLGj{3lgNtDMJywKotN|Ni0&#enBhLc%q{C4yJS^ zqdAifrdHWPq@AOhCB=)>0R-Ar6xsd(ly&i&XbFB~VEva}xV<+w<EaDDu?yArc z6<>(^aD^_hCVJ_iA&6;xkR_9~tNY#<->V6BN6i99|S~k>m+rG z040T!0l~g=pnJx_)GOCq#WGXP7$F5_x8x_cL=^C(H;6wLFW)MhIBFQ?!n z5e2w73WVO%T&V-u{FCj5vyh((Ex(U2Lr`*Jnv18DkySxe)iVJ66R@q?b<9we%@#p5 zo(;2YU%%4rYb)i^no8?up;FqkQA>pZI~GX*h3*L`KD49F9v%-p>qL00wIB>7lourF zA)n&WRxaU*Ex9V}eZugLT_MWk7n=J}j`!FWy4?dvPb}9VtbdQt(ek!-+OQT51lcG4 z3UkM0a_Jzs9UGba(jakv#)dW`ov6V0mS)*=4 z%>AnN?l)tdof16nQ>a)w4N_x_)2Jh{&zSkmU>ZHGS}G4;4?SJ=k@I6fj-~~Hgq7re zBzD>w57~r={CM9^lB}{u5enBMHa!d(Lef)_EYI9tlY!mq=6B+U;ID z?FV%`n6kD(o%z;Lh_MJX58laaC$G^E<`<1Nbh7AqDG_?H5@nTXAtMZK{co$*9f4t zy*U6n1SWEi1Elt5V8^gJ*kVCRXVyRV$b0*6C{W6flsRDq!AdV}42gOw2gX`M?E5O^ zyB1f(jE6b zg+2MY^tb?bWN<6G_h2x!9+)wl&*X!dYe7i|0qGHJmIB+$O!nyK21Jd}rUvrP_7N@s4s{&PECX zm=9uG-B4DCt*n9`gnPP*(|wANK2@%ZP?j%#?_N9+Xx1VLE~9FwCHI;Xgjt)(j#lzP z&sBXfN>EIcKqmgJX^)qIpJVh#>WRalj@;ACNg8D)xVw@iG{!Rs=5+gruBl7<8yC-D z`7SfN$YyNx8isn1ZVoFGdRp#|quiAe;97Gvl?AWs=U$`Pv3$^(=jYT2=SM7$rdFC`)xN%%9ns~xGcNp(smSDn}yGdhck z?}pF1jSrHI3)BtuzuZ!G*y@-z_n<%P7(ThxK4uj*@v})iL~Bd0+x*s32qS;M&0^+# z8n;6Bkk|{ji`g6+E5~Ut(dw}8DPwb zn2CMv%9SG=5@pMga2~A@SOMp7fx-+k$mFN-RnB5XtauSExJLnV_K}vP? z*0ZxC&2LQ}?b^0=0A{g_=Uf9Xb}wF>ZY2@_G{fQ1lUC^I5Yk(o|xjGabzozSlP&%rb<|$AgZU(rsYpuVk+wp!N(9S#e`9=nA1>FLPd^7 z9(B#68W@H^(g`%9Fxh>U2Ue<>F^RZNDcguIy8BaZcpGcP0y@1KFx3WdwyhpjM`Ee_ z8hstvJKn|L#$t5OIV_ACgWB;3XJh)9ybPCCJxzcu?Ani%s?KpJ6O%OSwUsH}1#dQK z78z`nAO9_bvzfs-`R?(LcdYUH#rB^-A^@+^h}8j;jd{9eNML!#hxd<+hvLEUkE5~e zy>oo#gX16HmW-|B*6=t?h}}Cr*QdunzHj{F2dc+2#SX*4k?KJd9(>ClRN4p5Y%nmd zDiVJ8iDkQbJe95+|M-USk8c|P_~vnshtPJr_r}ZyX`^>PmP&pif2AG#xM{=8+=iGB zTh8fUlC|_4qc#U%2a}8ZUpt^S^D2^xF7@rZRAN&#YGrfWX zoN@#uvupNU2%R5_a?^2ye zemG*Wc#bIo3Z17XoUK@FkS~LpI)VL8Qc%3RL=)n2k}Mz7u*C)*D4*v3S~~agQP^Kf zHRNGl&+>#4I^Dd-ZnSvVHm2`67!3q^Rc}7}9xNjLv5v^S@pYhp3_3xg(4gA2nZdMs zBR+@hgP(N8+N-EnySaPP#ad>WOL5qliJ8myf!y>mol|IE%wnGMQnIw9nK>_B`j|Me z2}2{Z^3aC&jik{n%0|==aS9cMYE|g_s?+9}h=GPW)9=4dIvlYv#88!8VrTtmP$JKV zSDHl6!q*iDdlCm!6oeGp2ttazXCb8{U=$l22m?O)n;PR-K|cja-4w0U6t2_u9RU@$ z)0iOCij23LZ_E>#v%yk?65u$YXtUN1Gt1&b1#(vxE*>-|&1+)~%hz6kO>DyYc#0=% zDqflNWjk$23^iz3N?iQ6GLawCeF2(6`oVk#UF3#&I?8eJDe^xBgAc#)dYe2js@7}y z`^{9yC>bf<7TY;4-LGc#xg1rnNQLSH5>)OP||r;9DFUb7NyxRzQ&{I&(A+NQ9W z3Z1VqK6xi+c!B`Bc$N^iEqPd;!>L@j%{epUCtX~;Q5;;o)mn^)V;U0khsp@d;#;VP z8iUBq;KiNHH!V>a>P3@W-1+O-n_0J{_KekYcSi9-YO>{(XW7!6vtX4WNo@2>hSaUx z{&~Lko!~r~`q+w&F|D&zO*7HKZ*NI{s#?E`eI%0?m)g{%k&8F+Uv5+0rVPkId5FOG zlu0&gXcT9~K7049wL4RnUR)+&+c_=^U=TkCryL`#S5~9#xKe%S6-~W(h%|JmAPN<5 z59v4wV3UH{+)@84KE+qtJ@nd@ERyPtKQ2PgA)9stx7-mn0>k7wg++h7;f}Ws)*bn~ z;^PDWS8qsGeh7XaRR(33bzdua@;;%)8RI;n@nbHA9uTKt@~y9HeJU7+zG&p(84r(L zDG*!@xguYaIf4xzxZC|;O3+m0t!O_^X-{e`(-E~vbwn)-r|TnXz4xmlY7r#~Y0Cfp z4{getr|Etkg?|h$BmP_cFBTh1ciVK8Qog;^Z9E4D9%B;PGuD@O_gg;c5bJ{Np-n#8 zH@MM_EEEOq47de#i(06I&GrVf&BkbS$4Vsf(typ4#k-v_#1c-;2VoOq4#!22#*89B z22#dusR7f?jqVv{lIeaLhksEN$NabYU*wO~v>v*WF@6{^WYZX=@Gpvzg#T9mixM3Z z>+>@#Dig&&QlUU|SsEz$hzPsHxy!qUej=Wi3!*Pjwzo#f4$NJ!s*GPnmJvlRyVBDl zx`K;o>7JChHoL+8J&MCfTad2-dl9zVnjsEH`g9d6^$$3l(*)sVZ%&HYvZIpQr3Z2! zsWtzH4=iYn({?lrm6~-5)8X41)oD$wj!o5hpH}4+9N9Um$zqv0%p;eK@35jRG4d!j z?Q_;@C>Z332MW8jrk2;L7Vn2yxFy%;3t5ef&XoYlUy%J$Ma+bhJvk^qX*xq64>BYO z1M^QD1NJHCF&LQt{}2Yi0n5tdxw?)bk_ZT@@7?c?wYs9#a$LZ(-U0! zW`@Wns5p9`hj+!@KC9LE_S)>;U1j0lC<5Yi7%me5!~}VbqCd&ZXc~BBDJA}VKsrVBaan`ucfED3EX53n`C6<5ae9v z*w(@Yi#o}>=S{ynZ=I%Kaxv%ks8H1v(y%qR*UY{Oa)cv*p?Yz5@RB)Q+4Kd4dr}i= zfJGjQ_4BSbRDy!^G`bdHgKev1DarXJkd0AzT+ zql$+EovqQoQ==a3!#3rb_0>zlD1BWA6tnw zP^uD`X%z~LlH*X|k$#dz^n>WqD&LWl0FVl&mBW{IW71mPm=&yUUil{ITiv|suqU=; z5FCvPbt<8zwgp=wD@cdU>$x4R+GrXM3AroTOC@_iE+HDV>kvZ^E89QVuy=6$E_Qoq zaY`l&PpJvB@5oh)o3*VYz1Dbb;|Zdu9{~n=>8p(#T{Ii7t};OMHhz*3*LpUd&n(Ku z&*`$zpZ7NY4C*x-e;TF@ANUk5_=nredA@E-Rt?a@-B=Ia*ea!&9xmIBb1brvd=v>CSk(a zajZLb66mtkU$*$mJj-kGCYl2ch{+;w#9(BgVGpWNfgfnt<_8;Sq^elMB77hTG(-#o z4VZ_hn#q)F4m9v&pzFAShIo)K5OcACMq18P+XU8lF8x!8805D>LfQHM25x-bZy)8v?1Y)Q8Xkfeuj_C@M=MN z60Te=F}Yk~FDG!eTkqg^ws%NQ_(-PYWPxhl_9mRbt?&+;3(9fr>N^Tg!WZ&c>!} zzT9q99$^{N|D!B}3JPOW+hZe$jAi)1UClCJPoLnD0U2Q#cFskZk}+dbN^}Mrgmz<@ zR=FXt3|4{k2+ORg#j}iu!_;1186250me*W^ab^da zVaOem5XFBXf-tn%Qpg<_oCWxCl)KQWR!$tIavVUknzNE2XT^`hS;SGqSvKdcPe-=h zH5y)_iWT~`9q@EZwxobNT_S!W{6VG>&a#vLyjCK}MW}c!XZ5O6_c7%R@0lqf z6NYlu4%QYt<8u7-hm?ceOD+F#Rz4TXM@B}wEjaloEN5F;qah9ctE>(ir} zsOCPRD=%A+-K2Z4q5k-eYf!AR`D=S1Hy5oVacD@6q9IQlrt5GeD;R#LFpWsFciW_Q z*@GmE?l+w8hf{5E@4o@X9?bH%a%!^=G^Kr9I{3^F;MFTDS<#}Rl&8abZ}0h_sH8}M zxZS*WM5#YD98d7rSbKf%)>s?D4t-n50by>9+1P*`01_R`$#$olQwZz z?Jw?hzkYgrg5t18*eRCT$3Hbpjp>tp)ypKCJLazBBlAUJ&-{J%0_%IAY@H*NrZ;=# ziIS6T5yC~}uKQfKFV6j4m9s{b*m}z>1Y0dLuw?H8XR%-PwoFq7+pautXGIUp=#a zliHzBKRg4P)nBm0l%qhh$qnk!Sg)-~QrG;Llsrd2+0sz;d@0K%#_`wxH5!DC9;rre zHpyfahpBipuh=bRPR=)Fvju8v(6*!~gObj~&=(p~eS7Y(|7`bngmL{98w1wqvpNX1 z_zGGUF&6~VdBRcmHnqooV_)>T&$9&4J-`;Uv^d#Up*4mVYFZ~Av3S09t6!`lraH{2 zJaAC9Cq(@bqSej$FM`(1-TD1DM+1lLq#W2X0R5UTH2bT5F>B!XEU5ABM|{uT{)O+m zXCA}nR}y5k9i^>n9~??TYFsTM4F4oW_Hl6SoY$EGfcl3XiuXP!DDGR0-}8lEO}Pw} zp5ga=c}rmTXEkOA|C;QASz!ym3raIsVGEQVBCjxr`^tmbWyw-Jwu~va(Z2W#TR3mk zUg&#vK_E31<9f-L(iOH7#ThX#yZc|`3%eUG*EDaJi7RdDV=C^|f0^j4-fkcB(&wla z_i6eBcNfR?^`&d+P+kyTH}Q5K9UB48`s{Q;fl>h%K4i?Y4e91*vm}8Dm9x0uyZ$T} zBw`0~*fwE&Z%015Hu(FhuL-w1mM|p7vN?!v%rpBwUq}<$FE#e%1qu@4u}JYq?)_SN zrSX69U$w9WKh#7HHqe9&bXSJzk|yio4&e7{aEYU!!KGqDa&YAQ-d_za>6o|B z?lY#eY-njpOT=ufSE`g2ddW1g*GoPw9rRLyULx3xKLyhC?Ha8{BDo!fy;51qKk@{B z%NHwxua&3CF@!Z`2dv&rQmq$;=&@Il=pWV($<79;3sGAa+WTVN-dc^ZetTj$Q*+vA z3+Bw)DFq;fH|qEJ{(Ru?*YD5wG^Z609TfvXX<0FOR6z=!AQQ#GD#}G4T19;(H`qYN zhMs{wK9+&P=PrjfkREBUy45pK2{SVZ8W`x~Lk2>)?awoiMZJuHkh3xB<-!qLCV0Rq zAx{}G@1Xp#$LK%T7=6MNL(f#Y?@xRsH+`uh%M-4|{q2`zM}caK=GS7gu`+eug-lti zX)p%{Pmq$5-4oafC4!=hh7^R57ohh);Q@MCZMoq4Kwm&3^+Q&1W0?8^MXq3JQ(n+) zsJvcz`J!v-gOUF$d^g@3TTgj?axCwyr@T(_ytjQsd3|!od!x!rvk~6odP2$zyNt4E zDlbA@h9BGj2D^;sIX{ETg@e{q>h6gf<8b0qT7|=jx{gsW2Lld1M!-_GcWu!fSof*6g7C5em+;>Hy=B-T+AA29BF3V&u^^rn!^VOsGDWUbf^*SY4?xC zk;9yWqL)^if>CHRCQMbg4J8Tv35yaZAM?=4B|5}$5FwYrX|9rWW-EQB4%Ui+qUAwa zJje)c_mm&{+StPA;&Ed%nh(oN3HK4Km`+-e&Xqua_fOE}BEP-cSUwq;F}D#)WW$C@ zsH4bPFtZvh_~pjKp;VRfEF-T#Ly_rTlIE>;XJTR^%3`ROaP$1F#l@C8^Y}I=0{;1po z_D+jSZJ(&xx0x!yPj^)4Xc~nh%R2}b8HRVw?<54y5QFUAcRSJIM z))aep*-=T6d)E|Qf!$cK{q@?%Mvj<}wJh?y`lHOAxhPQsXKQICrhREPJsxge<(d(OUAUCfl$dbhxxwIS5VbBiI zk>yn%Ck!FJk7YoJWgdr+iE;!X0TY2qgbSm2#f2V;lh}5VCvcQ+0>CW$u#vPC#BI{r z2>9Ur5FeAa_-D1a1$wbuC!6dM*v_&JDVJnbzedv;h~EeF#mBi%t_9-VbpR^y?}?3AnK8#^Itfii<#Q%RZ#UkT*IFa+d)c zmU%5UI-^23x2v45b>N(kF<(o{PzTPHxPy`wDJU`wyEj)-XpIh>-Blh}*E*|Oj~i3# zYP}rdFUR=e%ZRk?wKjY^^2D%1F6-Dh{}-*Of?%zWE^o_Y7Vh6Pgw zde_KpktiAakh{Sj_!J{kCVr+#wKrU+;greU->9Zc@a)jMY)qrm_*{|3f4IDKs;!YM zt)H4)B##BRmDh6eG@~vQwB+il_dc}B`VEbLDb&)mSGiZEND@zpYws0*xJD1i&{iy* zG4F60S~NgSqc~xdXVrA}%9XNYu~+U?Rk@FXMpbOmA6=_Z2V(#W?p(keio!QW0*ieB zY}JyQVYh~daAk$6<;~imWW$E5x8+`z4rq0Wy0OFWqe$GA%P7DJVJGtGi#>!p*a~`C zNlKWc|DeKc*16M^VX*3F;X?Cb3deYLI*lXF@^UO|w^+G;@XriGKITgJ5*k>a`P#FG z0+ie20|PvbE$rpt$YvQyYrm*9sf`1ir++RdKP@>01z|LXW%?a=o7|E6+BaASax}(T*hrB; zr{jFatq~gpdoU^uB)q$@dvTl|;5OM=UaiCPbjc3vjP~yUTv!>g;8c zKFlu@&r$WTd-F^(vCO^%AJNhQ8wqkMiAsrnIbh%Cu3O-=3JWDYEnaYsJyV~Bc4cGi zZUjjfW~agv7k_k8%4bA$$Iei{MuXu2=ZRS^r8@o%O934+XN>u ze9R0(U|@o8%L$ec#y4ZEHa1`;1Oy2TWE_xzU=m(V!tjWhM7$C+m>^~t;(!57a0oCw z#M=;T-`{_&+WYMD=vK>t`7U?5r9NlxUAt=4dey2`t5%iiO^@O2$)J5U{+I|eZ&w{* zYSOF(SR;^Y!)mWi47`fml)3lPJ`_(zZ#;sGURJBSbuU?-h`qFL)=T?lz0AFr2-s{d z2`8DeP74~G2_`;g<$*|`N2+?E{nY(o!}G$~m%rC~OGKM)Udwvv<5D{kKy@5*pRg)< z#npR5u}>RmwSs|CWQGpQ(abXH=Dj@xC}MDN=}kBG`WJ7!Dc(PJ&Y@nX`W~KHR^OB4 z*QHlGZ$pd%OOhw;?LjI!0pR({n(>#Jb#ZC0_Z7ZF=cu>RBKO{x$NQW-$W3~f3s*weq23ye#`H)-0GiW!A)(KXCp8P3_u=?U-cF@vj1 zs+IcUjW_jXs16iU7yj&330;sYvjYteMT2T5WdVTLyevN{5r3&I<{j zcO}o!ab$cum_G+qk4HsbgJWN?b?IJVk~`;0#}U~))uYfcOh>u z;su3phfXb%4e2IXnK61j>(Jy{l4ir}>|N@gy)K?=0Zd zA#i=f#~y+Gwqt)4bPMnJ7@PQRUl=n;`Rxj^ZQ|24%8Zr<-;94UM^H%M5?v&H27+aX zqNh4os!+Nihm>0R$vJzC>{-y3Bp;+_{nJEI{OB*kG0ovj8{;^<%n51`@a?j|8NyM9&F5NYSPm5c=f+N-R+U zqZ>8M*5WDwIA-drFx6*tV>Ah$S?b=5Vjk@{cOL zk#Yyg{m9tfWmJ$$Rr>iCpS=QDZ#I0%)$M8PS? zPrS7htKDMBWi+~3+mDa8Pp@x3UX?0A6rJE3`$n9kY4Ixn!h3|MkuMB7I`mts`&*%` z?(@=Y?9ml=wL@1ziVgVsnCjUP290j%E(zep-~)I27iI1#ZyfIRB?|Mh1PYp6F_?La ztXT|teZ+d%v&WV_d!($FzQFp~&sGMRNn9{gxJkYe{_vE=jg|?=yQtIoQ3|W(F>P$N zU`b>DGX|^dSo=w?>nFRu>gwwLx9&@xBCMTz_KO*2TIaTIh}mOTR?fa!a@wk{@4hej zmy~RK$#%b_CA_wxmsCk=Q4!}NMK?d2xPHEtH{AT}SW$85W~|RgD^+cVy{MsWFk|h@ z?q>9`jJ4zrZn4*@JWn$RRf$OlS5l+hq(>aHpr?TVIv+^tW0EuMB(g({`d*0q7 ziS`55Uab=fvZhd@O#9TbnAkH~0&N#%&nQR-2yM)V@e3feh zn;el+d!mU8+E_syNw}UYh4`ty@X$g0r{jTjttWYWM8D69Oc*basvLO=5~k;6)BLBZ1B@y!-> zS?31b=vvAybZuwV6&{D#W*JcV+qYC(;j(%^9ZLH=g1h-(E8LbiUG~Z?^f1d(MxVL~ z=EI8mgaom*W;3?kN9}Burt71>q;)2Fr_DZiT>DJkA4vN-?Q5T!|Ek3u%9YnjSh$Ay z>66IcQUn>qW-PEJl2@U7yRc3Dh4ST3HinAj04^OCXi5GJsnmgZO# z)mo%r5C8DvR9#{r)7Y4;10$7Iav_w0bWrNrB-Zfne==M{D(Bi|EFngQR~i(!-Q~^6 zhA*X-HzSoc5b2dZWWRmSK)v(A2as;j032kk5YocAX&kAnW^~2wYY`zwLQIt~2jp&{ zQ=uh7oIY(Ru~1EffD}n>`QYNsIhX_guEn}b5$M=!s0_S2JpP?;BwXL(_bwB-`0`vC zP}`5LwOA9wB4Lv?g1>MbgFqj_9(lOX#pBlSf53XgYzuA5#%){7TIXKNfKZ&pg0Uy& zrjHCZw!aK25}zY!8VG67jVg@XwXmdJ5q}y*Ws}B`M7z{T@o=%+rEInxJ^nMg|kV^ca~EN&D*!xWBs+I*S9K~ z*2H??`N4fZU3e@kIf`;q4U%RhFByTFX;%7ba3sgd|3;E(IaXjMMu7XN24QfiK~|#H zrv`0|u`SEZF=osjX45vN1_$>rqpxZ;Xe(?|CAcZpH^%UW)Sy=LlwV7#&($Ehi|+$! z5PlgPsgARUnW}8>Ts6iFs6qO@VO@K-t>2~w$Mid@!JmVEBX3a+!ebaW8erSfZR}YA z6|(lV<~3-qu#lo1oV=)&60=v>8l$L4TUf=5t`QNp?V!o>zXv-JWXU9!5Up87Qj&DS zthQM!R-(vdeHo5s&6%M>LO&x9mbqt!z?1fpEPRjutSl0b2Ns==e4ajW{K>_1$7lbH z2EL)v<~UY29mO+A=DTYS`ON<#xWLJD6;;TKK~H^m?pco15*I${VzPS(8-eG&RDQFFP%Z^EW$XNAp{H zYYunWNliOlnx-|*Y-22vJBW{H6Z3wwiLvVk^_6Vefm%jvVhw>%C#LD3D$`f0NH(!E z7)G~Fd2m$e%p;qQhzP@muy0w{kr}H$)l_EHr^d`aelTCk@lmRuSkBspBLGAxStRKN z-KmOLa}}}h+k;>8WDqUb>JgWv(tIaywj@+&wui8=$pKQcjADxrPG`;M5Ero;CCEoj z*=ahI``0fk>d;0*+{jBr4m zSJL=s{M<@&m4R_@q?QprvSWd3J`%@hSzHx~k1VewVOHRB&dBKKlr_sckP0dZt>!~% z7?wP2SeY(m(o!bBir7HKXhT?x*+Q{g+MAO9X3VeLmjrAu*p!5IZ4s#z-i0EvNHb}Z z^A&hOnFS7c(ZdCtg?>}`CYT|>d9^pb%q$}{WwERnMh!%K=ko|c zzmPp$m}R>oT`BX;u`j5w?7R-y9n~QQTt-ye(I!wWD4!2tRo9UVsKyKyC`1)Xb6#O4 zpjhsUg#?~~GstIRy+r>TvfU4yy7hy~Rza6r)&z{9`kh78b?GS%1hd{5BPfhVGijU7 zpa-!XsGRU_UL(Ro6o5vgN>jT+JZhaX=glcOr3yhfinX+>Vv?TDSrvRCftw}f&@`+~ z)HxsaHIJ&fMG7`^`*bv_XaSC;O6uFSnP8&~L=bWA;oT_#`YEyg&cb+uXhI;w=M`n= zs15`&P$|HtNwC~EGdNX^sEQGTJ_J*Y(pA1C>Q;wY#5?g?+4MR4#k|~7BsM# zoh2eMCMKQzyQJ@=QY)V;nC0Z%5 zQCR%m^u}`S3oOwM>WM#C;0V}l;dWVe{#%@Zp2*PgvJw>xtbx1L;|zBO4S1@6%G^mf z-o1m;CQN`w`+M_dt}zkl|AMjfLR7ifLCiTJjAevMpayiK$JhbyndF<8M>|4~ptkud zD6&(e-zjHGbfXZmsX#5$YDPihR0=PqnlrL(Zp9C(%7xroXZdTVku#-l-a`pE^;r)=15qR}86g5FZDr5-}lF!2RryiWNCq zGUc_SpW`=%mdeHJh;Au{l{Jw`vkGmBCd77$W~i(k*)@>a7Gii7m!!&;;!!POLK1%H zOD(T^X%^Y>wAoW^!sn|~wvus~S)sJBqZbK8WpXdtvINADywp{FX0R$1)pThW#3hhB zgY7{fspI#d66=@lYrMqjnk{8rCR3;`@wtEBhfpQF59siIk!B}InQM#8>b}Bky!-l= zgnycos#rjYy!5wYrAz_OkgQv^wt(0y_RisAXq6J*tZ5uoypj*?bAHFxV@yheeDh_|c0uL#X_X_H zqm|p@mdHrufA~B7${BH}i8V$Mpl<#(FYlM2t@{3V`uDj@r;sSi@kD5@mV((G$%J(m z(E@tN0z1}dD(sSfX=SCQs0YH@TC$&8RpL7=V6_le;lJ===@htyRd|~k-uOFst2@2H zQg3@vU5c87*@h*rZI1ogy)G4Es?aBsmI}ue8kiGUJX?g5-VLk{qOt{~DwYXVPZ35s z98sb4Y<3(`t8-&3o#`Lslp(UJ1Ip;oN)F%TIAacG0`DwfE{Fa>n-=#m5nik_Hfg;6 z?VoGQqx!C$uZjIeJu~wD#6y|EzXfr4@K`H6^n4!W7s$L(+!!OvU!tbX3J;ekERHia z!pv^7=pPCaI`a=p>?d9ICq7plRGIarsVG*1b)ib8)yVoQ0`o*fCQ=F-9AS_*9Pk?3 zPXJ}@@JE1bdD1%8PMaW4?(XKMMxQC2WFw<_TcY)3dNpmuru8yQGTbIQaaowk2Ww_n zj}O%Z1;PvDtrGNAL-M25g?4jlYD;C*Y|9VOfrg+z(T7yvB*%P&!<9K`6*9*+T3!MwN?`N@@+ zujB=uR_C-(rB%o~sZ>R&Q3D1ko&(hE>#-S=+2R|02aA9?;n(S_W}2OEw9?6{J5j5v zQyiT#Ka;^i`k$iEfQI`?H`ND=1;EtsOPIF7VjQ{K7rZj3`zWvn^!&+CQ8(#{-#DGzRGXThYo|~Lj;)zXW7~@kXF<@k^wZ=XJWG4 zU7d-!)gu2y2GuPJ9HFE&+kY8S$J0HjMYJ~$BtbT@K?qL74^(Yp;IIQS;|szH^;mhC{% zRLD-j^boYep^@~gp;0GASO8D9!nxIU!a4I`eKCX9|@qvjj%l%dsxjz4RhN7dYE0p|lEKt%6nzLfAwj z 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

+KTgK?N)I1WC{ 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 literal 0 HcmV?d00001 diff --git a/packages/open-scd/public/maskable_icon.png b/packages/open-scd/public/maskable_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a7269ea122d7d891d7430b7d4d0a53f1f37dd4ab GIT binary patch literal 39923 zcmeFZc{r5q8$UdzAxpBSQcRX8i56SJltd~^l`V4#Oc9Y#QrT0ol%>MhO|&S5 z>^l=8OQ!7G%zNI0p6B`f-uM6akMHpu$I~2j-`92S=jS}H^SW>AYHP5wZe>NGQ0yl( zkDWoGFz^$DVrGIr@Y^MCqEJ}WiDO3$Jk7_ty}A+%jii?zcnQWGOlT-N-LT{0wQFad zsOxdg1xP%tmIz%JTDp7vk*G}u$BrFiJR*UW7}nF}*lqcw-Yc=uEBWG~XV)4Iy566C zb6>YnPA5^ht7>cce6VWQqIv7|vQ({=h3)wA9nb5{>`FKA7-mi^E&#=VUipD*L5pla zy{Beu_>Y881T5^0rbhjkZ$Rz*@XRN1mT}_1tffszPUx%EEnCL-+-a zl}JAzWr>RPC@&TP>IrB@L9gpRg|pNwa`_@L$j8v0V^%pgOERcxi&$`ccQ!{OU zE@_kg-2V{N|06tW;alRWxSAxO+7iju;6cg}!fwWvmwx->ecnEIYIZZp^tJ1)Gj{pj z=Cly{+v-D}o}X%!z)F2W_yKiI?3)5^`sTwXeV<3=CYC6)wvNl$iykJ!Q`ba1HZsH{ z4%;$x$9iq2KXvsa)N4{+qx1@puorVdX<8`r5|N>px$z{uyu#H$RVB6F(u|@}h{|ult6IBYbpW&L~ZL z2w;iZ(}j@5s*Ok}?9lb;$(^|>b!RItm;Ybq`zssJM zvsvi!DS>7O-E#A&Z28e9jS}C z-t0u|E?J8qje6E*hPsEy;4MG7afMRHm0jR*#JM{b9cxuBtDF{?1jfkd)g; zchE&h1Q8YoHF}qKqOJ|58pHaWn@ve5OD8oQx;bHhLvhYCY+}Xi_2^+vLJML(OypXO3ac9jM zegJjySIio;9M(lg7nlQek%;)ITSgJ_x3eis*QtCzCvaUL`K*5!-C~1)HognqbV(kR z1nC=1G#I)HBu{Nm#>4W@5cBcBbqJAt6v#g8PTBNxP_8nXkSVZ|AUH~q16G1J1_UpX5NMty3>hxFOTS5o;F8$&LQYVNaO5wUM zoV24)Ez>&Y8TPZB5rCJgb-^jCbn_u05)8m((qiL_ zXLrKOe)N}L!OrhuLcIU=aw+mM$9W%kS@RUU{E8F}x`R+0zc3V&?%&0<(nQ0a16w$M zUymPHV&#Nb0ps${tL^EXf6YrH4Ix*f&qi(F}yi z3wBab-PX5FVux0#u}eNDZ! zSed+lPL%t4x_ZPQRz~N!AxtHMM9^xjF1=`nbyKH@!eMo6eJWVWLtS%vTqOCw*&N<$7C1mq_)-#j_`V&);5mEF7(_)kart>|MBh^6lWOK&_~ z>^jmrPf>MUs7{mpJ$$hfQa(7fv&TCx!hshv&V6nV7~P+AX<|@Es#}l!mu_Ei;cAPMz;}F0}Xg4F257?^KzOC5PfhL z=;&ENKFA^R5y;^ky3@>om_|ibn$SI4!X9auSiA#P*$#f^mhQb16w3{sljIOkmI!zu z(xFA|>@PW-|KpJmkk(nSCj+scia=}iF^DU%M>cvR*dVqDS;>LEQa7>^n-7AsxVc~@ zO z(tn6sSyBoCGm*b~HfOpJ8UEB5XaGgSXF+;~`*I+0;C3Pc-|+e;0zVqM#MRD@%i+wu zMi7mcv2I39?fx+hZ)lnV55){E%VsolYoIRY!tc@^`vA|^x-39nEX10tXF81$#TdbZ zH4IZlzI%Ya2NOhwg$)IR#3J^37gP+g9~&?&m283lnbQyy9gRzir|E$00FfcHru3&c zJepTHjd(>OsLp5R9Kx3fP$^)Q?Hkpmvm9*GW*_jGcvOS~f+^SKFo z>0-L-G-*&6-MJQ)g?RuM?%^Cn;w2}-T5r=gfQijT4sStgL zOtq#4fQ|@>5Y}c-ZF(=@0zj0t**-v`z@$zc^6m;;!rB0_>HT`!fY@7LL8_&CFLSD= zfmlZ(!-ekKRjq?^B+7Afh=&ATAoh&r2_#BvK8l!;$Khcpq6Zaf*^Ta-svX!nbMjFR92i+%oNoQ7e(B#d|{_M|F;Wxx6<88kbr8+efB z0I^*IOe6lKn^pksJ7O8^^%=DCH)8BJTF3Y z&Q*g~I5WWaG;eNs4(8K5@IwwKd-t^Jd;5Ur@3R2L5qf|H@5w(l;IK^)W-HvkcWeT6 zOJxD<@|K%F2-ZY1R4alfWYJ4n2sHKLbC8$J>W*LfZel z+;jn8LBGmyCK$x-;bp|Oj)Ne#YUm&#qYfnLvoq`myY_NtH~?7p<@HA0_5nwxN*@C6 zHz5LVa2RHRmxd7<>n`b)zRke%?mK)ouoLAx_|0C{Vcm7fK{sSob6C||Uk5NHDH737 z_crb2{x7vqSGfLsz8h+u6})W#$ZQowL#9uoUUS$8|3l=tRZ;nk7HIOz>1Mzf@K~gS z`)+X@mJ87&Cja67goU&R2?zwszmkuH$b`=hSW)MKKonVKrNPq&ioPP*Q z)r%Qil6DoqzQ#qX1>oc$RJ0$<-~u2DO73+>FXv2@P?tMXDcXQVG_Os_7DL#jQ;#G_ z1y?;j2J~$tP3@5ZZkgmP!4x+zw>1FhzRJ?`8tfh{H`4lLtS~Nl7w~)fgki;9ecH%r zeb1Cm)UIa(K;bTg!Zx7rf{vyi0&#)Dj;k|9k1XbN4iGb6xC_qKvZ z7s;N5ECi&K+(nGodn*Il8cLJss5g6AI5&eo(*gpd%DXf0VRI}}5S))%6#>`hL1+Jp zdaodqMkqfiYaIf=?&`?yun#EU8Fuu8@asCc7fL0FWD?S@+j$VIp-~HPdFagRUpD zY(R@A?F`G-tS248l`1AW5LfWY1T0mTsb&VXXBF@enKVV3X~tb$2?3iCHzBk?h_{xha4N>yCpD z{^Kc+GG}+gW3d7N5LQ+_N(=U(P%E(F8 z@A4lII5(?eoPjo$z-hjx)Skah!2vWKnh{TN3%{N&J*<~JC zm`s2#(c3n<`Jkre6lfjcE<$(_c$)3IBaQmtzPII3K*^%KEeEvR)>hmLb&C=K3J*xK z;#*9RWgRlJH9)f7rlbCu5Y*|2$_+ANQ^sgJRMtqIaB27;INVgR&xTD*6l8bQO8Ke5 zs>ZY+^++iCmGS)7D>I6X0RG2LXWPgEFu6Ci4PXv8z#OfPLm1{Mq*`|@Zs~6=1Fl!cQ|cdK5QnDxH z$YL;*5thuPRV+_WFBzp*fxm`uXs#h%L*NDG=#}bfyaA)zaH<(|lo?nnVuvk}(4Yym zJNA83)2Y=^GYHWu*+AP;8WBK=6hasT22FK%>cO+76aQiEw51U8RFU%9T7REf30tdc zC9emvyh)*BsZe%r3UL9{1=;6BWCxZL>4j}RGhB9yrT=&!f1=8c_&iV33C9^|Jl*32 z>E3>nc=p+<68@IctC3>n%#YubAAT*-%cJXYx)8O^z*y?}^rNL+1hAja^QvP{fLV!N z)IUh@1eEgezPj`Ss43NJY*_~A;`CbeX3jVer`_%J;Qxp-9v2SmHHDZ=K3#2AUD^wT zBRxUgU?BXE!6^Q@K5Zd93x|~j7XKZ?-(jI6q{eE4jSPV&kKO1v`M7*E3CYpAM6d`q zw$@o+A_F}g{539vJ>X0i>Td}SHC61mTEkh5L&BumbqM5L2B(vyfR}=Stdsv$6jm5^ z7G{0=@k|%fFxQtF7T(?9B3CILJL|(?XNTzTKH>Vbx&3-vgeJtyq+Xd#uX0`g47k4E z(IWhR(FpSBM7E4ME{WuZ*13ybO0iY zgOvYkm+`nt)wA~!)&48IWGvz^?9d0JJIoP? z8%*CO&Hs&^!220lky3gXI6zA24Pd-7A&Ilxnn*b-d<5K6UIJ1lClKYq15YAKu73gh zN<@Hc z{Sw4g#jQS%CNiYlQP;!lhE8pI;5RkqcRL`N-rcs4@qNzgVilWC66a-Yq4v7YvS7g3 z-+&+JR#t8LAxFwRW{$%ug3<OC0Z4B)lA8zEg;Xj8Zv-7VPaB}~k^b}pVoR_R{LxwkAW;+CAh6Q=c*g3A^sfJ3 z47F-HxMU=_kH}|VWQ0F-r%$1$0W&l?+A*RZK!(lP(O9Gna4eTce-$SaEFhM%<8Ni3YX~U( zr^5#LAH56nofm>%t!Z(_XA9Qh5Iw{ zxIgG%o!HH_#)nn6?ejV_SO#Yjir4-&95#bQEYAx|V|61S)_9x7c|zA_XLRHF{+FW; z8+(gsPY#Bj6@wEPcfUCc&byBezbfE^P#Rt^vmOqXlwL71k3qYD#I&RS2E4ziUh;fH z2A(lwi}D2xX7a~!H}m7$uLY6%fQCe%!C)eoru^c%fFlzqC%ebNdH!resR z(z|TWU1?Olo0lnt_`=a1ioAU9<0In6Slw`v)%~4ghv!va-?F7GX4cyW*!;2W-vy=W z6Nj%2kS4Wy85SIoV&r1egS`Vy6=!N+3eLQqFx%E**B*OTCw51D4$ee~I{OmNP5c{e zXZ_&SQOD^&Aj8i!rXSgn2F~Wv%0VcFLmsz3-RpPhwC5~e>y?%V?#xr-PHn#?mV}J@ zJ*XvFU+e=MQos8^VfouSCFL;e{pZVB!zeJ(2+MO$5<=kpzOS23h=K@3SW-Ujho%kl zIZBPH*W`Axtw*67)>?OT zu$8Yje~mh2Au!f*N7M4xI~KAUm-%8Ze^e)m%RX7~q_aS>hK#hh%$)#+0I8$NXfS_1 zYypKijVhHaUOs^Drs>X6+~mc3g8r~fNjnX{yIoQ-srrf*oHqwGukkw}OE`XEB2At{ z*FjG(SB!ZBxGx@68q+({R56I+Hlv2~n{N4ao^~vySu&1fi4N8VGd5LF-KH#?EwnV6 zFA0!@FKlQUdNlWgv>NyTa{znga!T_F;qjNPEuvaYmsvFd?;GhV(~!c|B>eh4R+ck+s*W&x#up%2WNj ziWYGcvSj!87`^;2H3PA`FJ~pL^)a)NuoIRslBMJxc%aDF8%TO6vpV;--X}y+s zeF<);m8ygvnRxWBVzSqM2ijJ@oP1mAn}n8L z?s-psC1tXUOX7I4>p1O8(4g;J?*T;VT|Xe^KrW0!j>X`N?f)o!UoL&uXbJ2s|Gu#K zq&^S97;{L7s#@seuOK%G-d71N!1*68OcOs^9%q%2|H6LMJ$C7b|wAhYDGPOK}w*_9l!2D%O=k3 z%LCQYYp!#TCoHzQ-nJ3ZeN5V+R558W^NH3Y1Hs2GOqPm;qdRe;B^uB;OW?D2mjN8g z_nS`d)?R+GX}VOIk^1MkQl;uLMMVPhnqT44Y(CA4(PB|(@1+WMnRwlJng^5-U)0Zz zBWESxf|~HY2KO-`YXFz)zM6P*D~y{AO;34C?~F_#y-l#Ch4BY^>HneXnF0XCgegn>YpH3xPVf?8}HB}r*ZPmAN1?U70nvm&1)h|hh z#5x5>?I83VavSw4=tNB~czbuj63# zS)?O8hgzwAb2-A6Q2goIQMbUUvZKR$1qgiKtB>%pL)>yi6+IV&H87*E)L4D{V&f_m zUkL6zhCNBR=}yb2nD?jTy!Hjb-+BFeJvfd+5u*um1f__okrx4P+cK1C=saSPpFZR! zlKb6nw=xw?t6gwSE5hu zeg^p&YIjtx1LiC3qWqXk=i#IZM+9w7kH?5)X?TISu;r$loOf&&&)uc`*e|4xFIK8Ts_8+~`D?w0q=#mv&P9TS{tkx5&e9h4 zvrkswg&FMWe)Jx2dH;?SpvnV8?o4Wgk6}IKM^0(F_|= znP))uPsfc&7IXSA6-7?dPTG7oPJZWCCIhp0urKGRv~~&{@Ud7de&D&b$-=2wdzo#c z>XVjU{B$_EYrW8k^b4unp2fJKD%#_)AHn@;I_mce0oVRynp+y=sf?ht&0QDJ_1Xub zcz-Ox;ps!uB1PXxrR*Qiqm%V%(G9yxTBc2iLHvHRDX+P%C*_f-{ZP;50M80kBZzy_GBFy&5B)I}&Kc@^5_}6%gg9L-C$dp zZ`+c3zBra`6NOySMX8|VPm}MK6vVJaS`Ov-etMQW7x;?hT=qab($CSBf7^4e=e3yc z^r-*1>f7PUT_-;VJuG#)5Ssd;2uJWqY};(^K^0CXar@){33*Hs-sgjhk zN%^1&v)p~%OsqM+6_1}*nwZOrok}>I;>0rk5lT$XliVZBh~bfM#Vvowe>SoD^Nx%B zu;-xcsiZ^u2j!Z~14!V1IRSg~ABEwD255VPsIIr)q^TTIy|wgMI-6}&USZo$mc6g} zlNREg$?v6|PVRqwK2+)>D!FaA-)8B%q+BpgFEzFtqpf7^J9k3WyYXRyysQYt zarQ8$O7Wk9%bVV?!o-g0q7bLdZz6uNE1bM^Qces&nG)I&UllDgYiYrlE3h&ibMw1o z+pCKjb2W7;g6DF6rxm)iZMgXHE_21whh0`P{!d-5YH(~}EuAT?sVWmNP5Ua-F=iaw zJfBZfXY(CWExA-;J4|lYxmB^;(EntT?*y%Ze|YKrv)0lJXBNVTv0e~22SiR)5aJv< zw^GR#Eor?W8xy%HHv{C6l>>xrcp+XnR!W45#kS{qT?rJefUJ zg;%t{QHx4Gz)Xq2#eqZGkC^zRkt*<@>?IpWliHnD??O2J=TGZb9dYeKSMO@w=Iupm zmaHn`$gX|Dr+jG-AmCo0HVAC0KYF&iW0^x`3w0)Jv~puG&1jrZYlu2z!T8VWN_L$E zB1@mdTZ?;Q$mX7Juklp=lw48|*zojpLF&f>2X^V@U++J)@E??vxBtkdu#O}sJhCQXSzS9EPw4u!tR>5~RIxc$Y z|JwHEbbeZ0ue-Ve`vae z&qHM?spzWz`GXgYx3G`8XcF8a969ha^0qA2yJfD-q*H7i6JoDh z4Ud_p{?X!nw9oxZEe9>kY*Bh2b%zi2X2eT!R1t|Q`0hqWuY}$cpAY}I+IavKA{V>F zwutZT;oMvHIf+)I{ByR{)%elDZ?eQL*Skd(5!t1(OP$IuF6`B_XJnnDSXd65=iTdVvkOe-@MD;}QBd6a0Sc4yW|Fl>b`dDS}VRy2OeVRk0&&Q!a zGY;M9F~(fCI5Te_V`-1B<9@Wy;go`H)P1~3e><8Zr$O5-dHW`5vK-0YImdSO7Jv|>9T10aV3ALXf&kY5O z9eBa>mPvw@hd42goQ9+$F$WPV^6Hl6d^FF(G zf$@1nyW5|N>(3{aHkGgx+b#JFLH$-jvd|p4C;9W?eCVZy-(qH^47i5hsV1dDMJMD- z%q8Vf!)L#YzTiAx=5^9@zUZOBZ;3jrOeATlHfg~m54-0#8IS#VrpFGYtJSchkU>|w z<&~Qaiqk|msHwlMiFL}o2!tN7NjI3WaE4j~dP!;E;WvJ!G za;V`jsZa9r?9j}vNx8Z%V9$k9Z*Hs3RmUD=Gj!8|aHj0+<*bgDo~sSAs&U6#KNHrD z_^C$9r>WGJioqG`8j%rXL(!dpaGxAzZvZ13PIcKJ{x`vFOgGtE2kodw_PYAptj! zE3|$H`>m*@nw1XL#nE2{ZaRVT7T2xqtTWO$3D+(jpIFMLSs(D5lNSB+x$__@J^tY5 z^@7gB!}ar$C@R<5Y}zm0!nx3|WL4V7-eMT(K&HB!OqcxzZkbf!yGnLvrx@r5lJXMp zBaY=9H1%g@7WZK`v;D)=K+@rhM-|2|;e{2SpVG>Fk4k=)Co<|b{Z!|cj<37frL()z zkb#vb9lnBR8@jl*o^ANHN2^`*>{MO&!?#5(&U>jJvCyM0ut7|Sh+A3IVR za4$dco@wp%cQz|@e9+5Kt>~~WAigpD1rcAgNTB={a147P(R@i-#%(IwmZq|FMaWHr zeJko*Wa6ikWl0G)LLMN`85igzvh%ZmLIJ@8;SvOZ`sk^A*Q|q^-`%3)j%9 zvo~uhGsCI9Je?_ugp7oVCFwup3dP?`hWk;~s{MoF5ggKoE*_TX(*2!K~9N1do7mFdqVr^y?&(DYyL+a^R=`TFY>eH%a?jzFvUT}xLRAB z^`K{JWEVMI%pVbGF#9wN22|KkrW->x{6N&5c0>vKW!r1BQlQ$Kx&@Z=>*ypcBb zz#aL}7?{Kjc@iUhNN7oE9g4=B2NhSnJG!NJSN%LIZs-MMNjTY#w0Qo??fM5|9fyg> zSV-2M=}S9hyuPG6wE)Od%wE0{V`n-Jb>ah!2hG>BsUGF%J|RK@fYT0b(t-}lQmco2 zVA$TyQ=$hz6JOBbFB2vXQ=I1d^5xafJ#ca1d35;lbp_jRzJTf2X!~6C@V1E~Rv|JV`a>2blN@!1dFZ?hJpBC9IpZB;(xo9>FB`r;7f*)8D4^Y*ui<^EaoKjs`z~jZ<7TsL9F9oxiRDgq(2fdG z!&sGXTxLfJGe4>1UK)XUG{Livff(y(L4#D%Lz3bsK-x_JL?p&l4A=N9ZK z73)Etjd@1O=Aijgq(4#i@9IEdm$7L&+qd*AOExw*9$ViIU4=^m_A23i%c@DthGs+f z;k4Lv23+Q+_a?LNBVMvp_`RS0y(#^*C?j;!lv=4ekCjC}E$}4-gM>O1YZGO6mrmO2 zH#!`hZU?={LP_twJ#|l9 zO8TxuOFbrNpTvavcKm>y6>=BC+^Hkb%3_ESMvg$(FfZ&O<Y3N>_&0y9zn zkm%4jt6C^!>OURhG~XQ8XrGe%nH|N-R{FzT)vv~kT;tKBKe=1bB9s)U_q5Uo5XVq$ ztdUmD!X21`$NmXO)a!{*_VD#2Pa-2)u{P|eF_?nbfNr?`6@^WBc_w{ozE@H8aFL$| zYii~`mlgasR6HZ(b;kO^6%;4FN91^*(^Bax^0W6BtD=I#Z&z6IaeLlETG3H?qzEPk zNynb8a&}X#=nESfQP>X#4KIII{KCul&J~+9Kpn2fa;j}P0m}5Jq3Zi!IXE9%|7 zV+(Gj<0&sHzmC!?8e_iAsx|}A_0l(6bd+5mHem)VXD95t{3XPxt8|}|&eD+3c%EwZ zb%Vwn(0qkU4}U(%??vJUVpoCe;eubEC~Y0%R$n{Dm1vC>KOo@5%GWu+7Z5bz_n*IK z>tc6WhaGTcFSa0c0i0+!%)U=PTu@f{%OjQjU*h-e|MEy~Kh&4IPbJCi-*%mpO`D2X zn^|~h1y`5GH()vzsgxpqyA2*aW%g}{T)hblIPGf%tu;bs_>*&Wi-LAJC`oZ?8ULnq zrynU^R`X-a_a@ZW&9g=;pcKB>euE%xqCP)5#x60!Bkq;}d| zAp`DaPt0dE%kCC?a$1Ftp5WKv6h4Bph=BT9C5VdIw2h98C1 zvR%*NrMQI_?X!J@;I43Pa?fUd#6d54l1%%e&Q{4PPLq0W`O_R)p5EX7z;%oTIAtBy z`0B$v1xK6p;_*a2Nhhk>iz-@?jrFT#+fqE?RY}e=B)Ezv9&&5vcF{ZGSl;;if;}>F z3^yOdB`CinvpF8Byx#ft^MkJEq_(K1mBE|pW)o;~YPs$f;3tfUXS_W-BtA&DnY86RYoVu}LMqmuC5TTC#Kt z(j?~C8!P1hC7*Vgl+_Rd1c`jvv_m%!e!w-5@@pVPn7Vx!ONx~;sj4aWaJI32L9`<5 zgD7%>ac?^gWKCkkZEf!yVGgQ>AU5`w=SsjjBPE~V}zXY-Q&N<%d+%1Ki zRA3y9(2Vedm$%?tCvtQHH=5o_QcMg@h4%VfI$g?``BIjU0L8KtbKT@ke3rE(d2PIr za1TsEOWR^19Ckmb?eO*(202^v>}NFGc_wRr94}zt3DZS9HQwm-UR$Yu#wXR0{rHHN zJ6E&F$K8~N^4(n2pTV>5jT4KFxi`xS!@=wNaFw@EkKO`jVvI-E7^Jm%}qSGe; zZ7izYp#5*Y=P50i<9FMp6KIXg9eCR<=L@&P%5Vasl`INB?lrX7j)K0jG?D|D84vX? zPb@J7;4z1g6O=3Cr85&c%k5l)z)JMPqPr{y5kv^1`Jup*#3BE$6Y71T8bWLpUhQsn z%wxQp^A`ttgYg0>2C(v(`>pbSuW}MBQIT_^ z@m_ZcL$K_wF*j|P$_1l)mZgRTY+VvS5=3)2c5L(ivG{QRj@;1>8lbrO^@THzO3{dG zxKoS8>yfT5&*v6wt_g`9WkMj)SmXUVyUDIZ8s`Zzx_r`Nj;Ws72tf?F$uk0^r<=4* zvW)Ejnv^)_EC>(%XTMY0TCy}*H*MxRs$lC3r-p#8Jq51%aloiyCyW{vgAt5un(+lm zL9_Ei=Xy-yPN&+;;Hvf6MYpxyqE(jox0Sa9gQMjt!iY9V|+mLSqX2r zX1a*PELDhEeHthMh;q^BIHDtmDm8&E<>hHTj0=y#wTho)Y3)P%hy|~IeMDhLJ!Lhp zte_By3%bX4!8)m;S#?h^)QRrd;EKZE?l_pi-y`F*R7iQiS5pa)%EtUt{|k^p`kBTz z%$#j7Tn3lAl8?X&Os}N)Qb_`P3x$z>Qgr^VP)M(MkCA&a_>qBljH!?w1^VU zfvAlKiJsSx?ZmQsl^NG&3etRxd$(uLY4u!f$&XVxTLy8rd033bz&FaIBacp*O7J8O?p`sboL#+M1&G-@Ol@ zB=)+n^ITm;6ftlU7|x%pXQO-bY!?Bx0bZ?Lb_C2jKJhz8!FnX6u|~v zv10Y1K&0f@CMg6-G!4{@Ey9onzY0uiSj*+u0&BkCpYc?^UVh$Mcte8-zEU3pHF`A6 zkU{t9P&nugdxJB&{t;=ku0*)2%u4Ozs8I-x1r45(PWfE4{z1J>l=9a9ccnGbf+7xY z^`8wD_x8kB!8%E!l(h-P#=>^svW zX7#q|)8Ii}{^Wa|X$7=3Yw6EwwW`ht z#g|`xu#I=1==TEGoF4{cNrKg8eTI9BcACz%6?b(u3Bgv0c+yJ>S)I+s;v?D_$a?o6 z*oJukKvm?$Oz%(_vch&;G+)9qd8~Z(AD4wytDPSBaH=(!`7$ z8e{H4iKq1N+-1~5zyMhQw+L1SE`xlp!5?0>lpc_v+zdV!+*@K}eK+gpZ7`dUI&s|8 znW8ZIPT=qF5+X*J2LLQas)c%M!u=!c<8gDWlddpXopDF|wrG5V>vQ^!C+_=@G z?x^$s=WeMai*A=Ib0Z0}?(;U%A~;JOLNBBuN@&sgqdO?kkP_g&EpF}RBS9I-fx+>Z z#I9E&rNc0T@IgH3ONLY#^vwF2gST(!SnU+;twANBfRmM`3&((6-v^E^00TItnC4=*nk;6&`%OAYimv>A}WwMtlqmF@7P zJAS2Q8*v3XD9i?uGFOl+)~L(eh)_JD`Gcv^%AGq7t%9gcAY;<|sx^8bC;r}BzpnPmUQ{Nu^S zgvOyStU|`6$sNJo#xbz8(TB`kXgzSZV|>9ETp(XmE0gyx_)K%`Wt(;EGC2OGSX3sN z6m?%bNIL8MA=s;o7xp@HuSJ|N15)UCLv$g)GH`5eRMYE2iJ~kT_C7K)?AW0jK}wGj zseJfQn$1=Gbovzrov%=9VoNk-k6{nN62roJx+`(SmHP#bcwaTo#vsE>4dHUkO_G!slXsbORF@*X z`F~H10dcRx4Ad|w(5(&G%gs0lDJIgjcz$-~cANtTZK-N;($OFo!^G?P>8)#}kB)*n zve|89v*+1Y&|kqw4vyOAS0awyi((;GSTD{{Qe5}4CO|&`MR>xf{YXX3cOm+H2=f$@ zU-;wXxv=nE3kDp=d2=mGU10GDV_Ah10be#mr3^_rI@-cVNi>gIjy(ECu91uhdffkE zr(TY5KSCc2p>b71F^DA|o9038zcl@pa1cT}mQXUCCi_RXaA9*f2s$c5?{Y8wxPBb7 z0LXPXu2z7BbNCG8zmpQuBD#o?@`WaT%OefG5MrAsUMhb6Fkg`H4C6mk__V5KNbr%t z*U)f)iP-W}2FI}Sh{bR>>#Ujd4vdP^*VE+qvmBE*iy>t;w2CV?<#%7kLSV3NsA2$pkX$vHfGPb+b72gZe0!FuKn30l2&9BvrQ)3hpBV+e{kuPXbv| zZ%txwN8krzP*(GrGjzk*Iw80c3XY;hc~3FI4Gh%@T#jdb?cVf@S#p5>>jPiQLM~Y; zBOHO@WGkl{cG3FzL0YW^iURshV=Em@hm>|#Wdqy4ZqX+qrNha;)i}GTQ)BVRDrxiU z)3`dyWwat|Xz<`f&-r#0lyFw9$+@yr*$pd+$j}E0$zRSPXbAqaa zNqYJ_gQWLbd=A9f126gCyk!{BC18m#$jy!zW{7=8IinmjeoLo(_=DjbW_EdlqiAFt zX&7-i!#!-lr{W_`Y!_~8!Uica(MPfRpzl*Ro6p6=dd@#mGSk?W8aXD|@LrAE&jUPH z>(hBCC=^qd_$d&Vg>3o9TY&++@+E=4`gSD9n>kq*`YrSLRrCt54D6(gPTt*+qrBAD z)zP362(NM7N)bgrhG=qWQ@Z=whjfCRev3rhf>B5&UJUctCeQXA>u=3&!yn`TI0L*? z+Hs-PA%*a6ulNxM3cqUHFN*fV?u>+Nc(azFDTnw7+$|-id>z|Z8K8*&eJnRN6 z58eCd=jJI8w?b4>QrJrI{m*l4`hTRb$2w5QI`Nycy|3Fh))?ooAxCGy(n;=T;MDpQ zf6fdyx*0Y%=pWvNVcr0WxAgd{M6M9izC>}kTSPP8v%^cxjI{4ObEEp3ZmBn>y*GRm z`Wk4gK4kutD+ItfHgq$u9)d-8ofy3j9~hxclB&oYIc3-8_`TKp(G!Z)N0irU8?XAB zu^|-~eBkwOMVJe4DqtM0?nYp!BQZ)`a0a3UO*RR!Yku5U z!Eck5eI)q-4$-fE$pn&=q)S?6X(FB5>k?!|mfBzQ2*1!$6a$ISzc`YIT$i|8a+VEJ zq{Kl_dmd=*PS8FQ#Wu#vsQ7xle=XzCR6Q4}ueUOom8FNyf>+^VCS-1~Gp$o*b(ln{ zzD3&a@z6I9rP)88ddzEKwR<M9x_l!@Yaim5@Uz%$6_TO*S zC#xcaWR#F2Mx>;OdSx4nTkQkAybf4NVSh~XG69yAtxYy z0*aks(_kTQ z?$w1nN^9C4q~**rjMR&4qS6q;u|PFpuJkd^5$%u3m6y)h85xI=et-DRtBX|+&+TD9 z@Zs*YG}H_3zc~b#j2wiQ|16EdO@K3(#d)nKm|}pYGEv&XK#sA3;;{3G&>-(4tTFI52^Y45M!{;B!~?Q0Z9Yx=y36OpG`50qFO#kUQPV2RE zsku_O0S{WZ%%8s%@DSWu!c4itM-;#)=wD(nfS!wPLaI2I<_Xd)E$;Ma-|haYhcVJ@ z{l~-Y+^t@4!F6hsB@X8ZSB=gC-&VIv18{D@H}c6QLNvm6dtR*yX@*cl`c@)0s1c%tV%J(4GfG4(b{!_&WbAba~zA<-u-IZWfQ-uop<2&K;SWD#? zcpRXP9n(LnMo+jYF3O51g(`%O~L2ApgUE8$Nas08Daq;j(W%75z-z%Zeo4sH7|$X9{w2 z9(=MDG9HBFN12H!poS2+twCJr>PRpRgkb8{mOK8*IMHH3tyhs&O^L1AxHsVlZ3{4a ziTC+A=3~$s;k+jE`7`uyuyv+x>Xs5<899!QrM|xiWRJT_#pR5LAOHPi2+j(&3}Vdg zb_d~hOcM_go+Iuf_!}m3;Hr%81!ay|1GE&7lNaK64IKn-#LJy0*N>FPBJ0m0A9$Lj zy?B@i>0quQ)cVO}67??xQ^Tr&bm6|B-UrxZOYjR>aPdNqs^^rJuxyw~3ibHV8(%81 zCw^c4_cZTqgtbXES%hMaU0TsodzxeB7&;1QImR8h zpZOAkNu3Lg!`5I~@?M1Hb2HPyLfrmtJzUKyO^wXQ;M9cE2>W?QBw|swp4jX%2kJcE z=xrfnA}k;J#A-u++g(aXHypW|Mli?x>V;F+_F05&e(qk z=5DV~_eGl_-odZA==rI1*Zr!Y80jrzJ9JkPn@4y)%+fd~L?e-ITqSu|0$iDel5r99K`&AOjs?c)6E%zTvh&H&=ie)%%I?#%^i|9A~{Eq(hJ}v#0aJ0 z3V9!X!X2PvKdZhZMi}wKgPW}fkrMezcCj!;1bN<1de7s1Qoer%g32nsDKTF{+ALP- z#=@M)u)!sQg!sxxRP%P^VSA1*+vMeZo#z{5E{;9w=^1Xu?1yFl48i?{)meb*gXitJ zLRQh{JtVfnx6X1+31^{=D!)L*>j?Dei%YYL*FNfK^eKI`)UhOzydmp}12Nl70lj6gm+&}wU|DX20JE*Dc+dqT=K~zE$6_ubUMJZmo zpu|Rzswg5z5tUvQ=@6nKcrBnHDBUYXrAbFX5=BM7NVy;)AP`W2NG}>{&Ra);d++X%Hb$5EDEFQ3k*c8Bs!J9*F3@8B zL`zU5^h-0a*j^@1v`*FL$Ee)o3M>a|62nRYw<4&(&m?_l*kh0#>$hTxg;bson%x-| zspO{G4DC^OsAG}m@PsNqSCo3t1 zfSrwXM&EHq02Xz`wkp|y*%)aMy&jFuj3B(v*7X`CZeR_+-|Ec+C(Hkrc^`5Sj36Vs z?{h!U4wXwNQ{158892!IID(`IWBv2MeFFB^?vCu&wqOi|?-WwvgB5Eg!W?FT!+6=m zu72&xmU3=EbcNWA-nJDEL$Z;0`eSx1tOg}z(5m8F}z4i;JXS=+gAr$6K&@DAypr+@eV@ zBnezI;tgtj$LJQQSIeU%rkwp>`~(LQ3;+@K`!MC%J!m2vw(fMbGSQtII0X24FEa=K z5?DttS?}}~4fM^1E15;ozSUa17^p*e;bYHw6eS!gV6QLZz~yj<^c{ND9PhuG4Qm8K z^kmClEPTHMx`pt}Elwh}J)4Y(WRRUXg%4s&JE|5}85M-VTCilJc85Rh-dMdU$*-+# zO9LD+{F$O=VMEx!Gfyb~`mKykiZT$0x7+W$U8p96g_KY8ZZnR9j~%ZL#F8eUOSSP9 zc{cFz#i|y6Q*4AA9H_LIVj_Kp353d0TgSEP=gye6I$c@ZPaaP~w?Uo#l2xMv;<}l8 z-#Q4fsM}AI*^WQrdW&iI5q0VM!w* zLBv_{+vZ4g`MPmTDv87o1$AGhzBvhI{cRc}tesDMMmFI9P!t{bB%=;Zg zS2CCfqjNGPdIYK8q$!*53}T{t?DTuCN+pxbfu29pc}hXS)VpzUQGixD%DX}Z@DZ*Z z>#gQ5{RSgpn5+pCNH@B*iw(O9P*8EDn;PUF061J*7Sj&wcBt?C7wiO?Vm;P=F`M%i znMJ5RJ$c<3ym1PWu}sKn1P&ZY)S+`<2x(zk@J`BeAoI^mv#u+mK|fSBc5+M7;|_HZybQ_o@70h`Vc{#b)Q045B~vds8z#%V~^uoMpx(FM5Z#v|JyodCczoHD)&L=az}kbh11%`~WnRp3cq zR>J)6^=mPdwJ<(goxQ7Y5T7?h>qC+W_K=rY6Sp>0#`-d5#&I9qJJwiDUkd!2a*SVmzY{WPfQiR_2vTnV zt#nj1(lWqYkF>IrmbIW)z^V$~V*mtcsO2t|>ov9jyLqiB*gF$^Y2 zSiw^b09(rSox^>8BH<~#{lX>{LE?le*Ij-Xy0pA;ZkmN;7+MJ$ChROz#!bVAkvBEh7@0?gMJ?NMj?9%X7-z4J@z^Xck4$(;Ton$a{-o;wg& z>4WsQd?M(O*a(t4GWqe+DH#0vgrd_cBr&$Vb_2>Be~=L*=9qnkwHoqCx$3+#b}xq@ zX78l}WeN$qB7}76gi>V)mKc1+t>Gr=%Lrl}G}AcQeZ#q(yT*Wf78s2XxRg~c5? zg7Jm)uKngDwuT}I+Nc^rxeI8y&*jWixxrT9)2*M26Q-OI0rGqo#{pN zC>gIKQpuYJXOZnOa(dLKr)p_Yp1ZMCFp8C$r&Yv_p*P06*e2rnVOT;XHJn1>Kjx7d zqZ4;?+RLOK78h|7RIQ+&L9nFf49&N|MiIIy8%IbBg*1;%E_FAWsS2|NAJV2S%d09) zI8CAVMl-MTek{&VG6kb5b_=eq(l-HO8;~?5>XTJN}^1VFQ zNt(d!Lm;Qk7c>DaZ32dC#f{w!!}ouw{5wq$m!#&e_>A@1qOp5yi^)b^Q55qS(em~EOJ`Pkf2s#`zZaD}IFASPLv(KXG+hV=xRdFJO!Q6564 z9=>f=PX*aO;}YX`fF4yYdMLSlVo2J3mM62$a6}dPB<)iGd7>W(7-O#2HAdkHzMjBQ zl}n@uD7-1}#%6h4ia8Y_f6q5*3RB6B|KhpDy(5hs{~lyny(LTkc&^6w zkOU!+vNVvg=(r>Zsa@li#8e1FWYHKi8SW}b(Wms?+^Bavc)HiA5~12o=TF9qd^qDa zvX%|IA2_#C%D_j=I0IU!JL#fi41!F$bRoL|TN30$_U{@he_UEM^NOcQLaz1bE7=&( z7BUP1>D|WfU;y1S?-{lLAvKQf^1#YTk1}RO4XFsNvuD?}-gk!T#jb`K5jTXoUZL5J z`HV5qo+@`pdNB5wM(>s$_}jy07DD5}IRTuX&NWN6^83cm4Ux?!(3|d2%S13zR)i#_ z+z^uoy&v5~c&KMH*PrM0>c&?pLbdDgV>~XXf5=m<4B=Lg#s0)kBy25=KJMD5P(7g4 zp>Od9^iXUGnK?Gu**+q5XyUa{O;bQij%?YbZZH6$(uZ5PEC_4!fp~8iWfm8pxo?~E zj6Y*rx)6^U{pS!B-eGxrkN?=rYZH$kEUr=x`XLKBcZ;Bh&aipSBOwG!8z7~~Qf_x4 z$vfS5xKe@JQ(?&Ten@`G4HCkHzl#zAlq(xN#(LDt;=R9zvPC;0twm^#g_LE-Hv%%5 ziC(_}nPsL`_c);nnu5N}Ul!|nt%+GT&CrD?RfS>Z$1!k@?K3NS4-|K zG%tQWu;YaOYCfVoXfaK3bS|2923m{~I-f-A=NR@Mys9{+f+=GaoO=6**HFw2%ZRZ+ zERItgCM@H-Ir~zMz=+bGn>pVF89UYc%`^|^{fVkF*LKV-k(I zo&L-(WZ#R{fe!O=lVu9AH|Czgv`h+s?|%H|a~c~2GuzA>m0U;YY|~hI;3-PIMyZM= zk{za9_DU|t{8nc$OKnR~dKf?y5H6)-up@zF4W%nnYsD63=x71ok)iU&p{@?id=6Rl zAjg@+8_wE4G3rkLHP8fyrg3oWni<5U4mf(eypm1yvnMAF(Ll z4M2;H$E`8~;JEKFLy63i#QJk6rfR2gzQyZ2}QXhIp z#1z4VkNeUGf$B9gsr{KnBq?#uBS*fOhNL>~D#?swX8wz$@@d$2WXCb0@6;x4M^Wfy~u zLTFckt`hv?R0;WgD3HTt45TZxqu{8$|6t(QA;qJRG>qP~qO~1>>*xJ4qwrlw$;Cw* z%E^k}SKvtS>t=bxHO3SzYB zf(U(R-rm?=r=B4uc6=)dB5WKa*Q+1HXp2sYG(gtT4L6%PB}OUg-f0$_YG+wU{#m`I z5f^iHRd(UcBw`GZ-qfmiE8#G3cBhhh7_jW}jk+E-j&oE*)4hAHFleAx(Yg0}NJ$}F zO!S{koNqYRkE;?*?e5cU+{`$2XVbP|M!MJVT$GXT2Ot363#OcYbJzqAc;d^oXnH?P z=U|QA4`K)~ht%#rCx5Jvoqz9`ku;isUS-?A9{?*Xe;u5P1Hek8wlhIB`qzCbwc`k$ zzZuX}8?ood=@Fz3^a!RRrw?yl!E_8-V{E-md9%DC@S}nMLh@snR*qGle#*w3&=2lS z{mGa;rNOl!ZiCXWAp@1m%Yq#gSb|>>QZ|v-K||G$=lzApf>XT$Tutq6PY1U8%wFAk ztx=-bCF`7z9)J~qZpzSHM-oXC3hjxmC5|G{h7|`E_Wzu!ubdp~kYmjwx1)Mfhhp6f zGj7xl1@pn?0;0SwbV>X<7|Aw`P*OK)nvL=ZKq%dBlvS&K$Ag41q3~*%zv$7 z2q9-YhaV)sl{KVX_}uF0sx1wm_bG2bT9z%Curk~g@0mzTmPKODt^hwh!C}}uDi2cd zgqEd8Oaa!~IGEl9(F>1HtUZmN8=_od45?5@XOTrkdR2N^hMVAE3WRoCIfx_QM0%_)Pj!0G&9PJi_3EG-a{wL2d| zsB{!;tB}~gRLzi1-948$XEVh=akhCA-TZ72j^Ujh!=rs`wn?; zxDF~Vf4EF16f0UWAi{8Gb(b?TjL0WuhHeO(mfpVu{2cuZZ0{sM+JBHwFZ7hqO>mWb zH{!h{Y~FN93BTW!tuN-0|Ao6V6WJHErl9N zTU!%;zWtwJLK4bB{6ZfvYKQy)KOX#c{MxuXpP_~xJNxrL-!3^3BoN1qf0>}@wMG9? zDS#>PcF}~uz(9RM7NL20pvxTnKNQ_UbIePFcfF`!lTxfHBJTc=yC|U<*(Z0Z&o|b~ z?WhPH!?l4*7Dg4tn-Uvr*^JrBh0u?|?l}Y?aEJ4B_H$4GPLb?u&7cqucM7Thy1ovZ z25Oh~rPlQrz`E1;uq8w>jW2f?|5OvwlI!#Y^zOOVfUOc#;-vq|@MllpE+jxgDZld; z|IJDGshxy}Xmr9+{=@n#fX63)mYLmvO4gg?!O>Z?xG|Wc#)mpTnL_`vw~cfjgpM5i zxa!yCf;efY^62{OMVzQH?y}c%iF&L5Gbr0-4`v2kZmxuiSqLA;ImEdYB*%X-b#$`cV*|0_22~;OT|C;zU z?~7xC@GHSclK<#nnWaV1L~8akasraFJ(U&}7UwVgv7$S5QZDCi7aCP6gn)&Ek{?rc z^QfkKpmay!1Y>i-q8j1fZySxWc-`nM7k|9n{D+vl8JLwe4=&`b=cvq|U`$fo0w2F_ zUeqc=za`yXHa^y>=xi4ADJQ?f5-8B?0+MveW3ge^-YG}_Qg5PhJWV7=Rn4;Sl$)z_ zYZ%Q2wKi^ic;zJcah`sjah`nc$v><9rXr)`Y+B0*%Ax!%uAu5W>M&y@O8(;?1PP>f zTxB-!^P2BV z&T^CESpY}ejNsHOauG3mPYV+Xii^Sz?nz}=x zz9m$a^&W1KLI|@s$apfd_tERAzLFh91Fh2Dc|UK(L_yr0VldE`o|&WZbR@5r&jHp$ z8s@fRQZCbmxsnW$XPfqK)r!~sg>?i;S`eHlubM$(mG9QdW0wdfJ79-EohLG{N9 zA`brQ1{*dApH*&SIMd>8)=({}0D*Y$m}%ShrbN;%1yncLSJFi}&BD9P763kyW9`l<%GwkU*_$fNfyqN8kx2ysVdJ(WXgdT5|q1h-l}+Y$jJIyFeBms_l#=73exC4SaBPrA~TOBRZ280eR)3r zf@(Hw$BK$xiRwlps*_d8evL#7MHCQ!^djLQiEf0<-uGgv%sI1d4}Y;@fqPuQy>|w& z*1guVEo|A^{CB~hq{Pvw|YAYLd3(P;)qnoPm`quO=qm>qDYkJ&X)F=u~&A!%G0P137AGiXuTkK60_{UQ-fo@0$%+#S=LyLYUDyAulSzUx+1q+0N;g_Q^! zT6dYb2$ol4^5o2iBq+SUK8=cSoh6ApDhD1x1^q_!cM5hHJf`)!nRWLPO%uLShhRxg z{4bY8P(XF`OWq_i;(ErVu$$>sMjQ3QR>S|~U2&^7?TUF_9U;_SWAk&|aKez%T40~b zF=3w?)mN)OfsAQNu=?&fP6N7Jhy*ix?oiKk2Z+^lCMRr^906v78Jl$C%=aE zi=%JA**jyRrnA6?1)1#myDPF(O(ghOZ_>|2F37^d?=L|PU)I+BGX0jSA%dPp8hj=G zv$b&09MpSXRILRWMB~2k|JwVHj{UX1yU?cv5JO#Cx61=2s=)*EZEWpPy z1}~uHGDIvx#4<$uEhfBdMJ$BXm!x7DB9 + +To create a new `Bay` element within the parent `VoltageLevel` + +- Navigate to the **Substation** editor +- Select the parent **VoltageLevel** you want to add the bay to +- Fill in all required value +- Click on **Add** + +The create wizard allows to set + +- `name`: unique identified of the Bay in the parent `VoltageLevel` +- `desc`: human readable description + +**Edit Bay** + +grafik + +To edit a `Bay` element: + +- Navigate to the **Substation** editor +- Select the **Bay** you want to edit +- Click on the **edit** button +- Make the changes and click **Save** + +The element `Bay` has two attributes + +- `name`: unique identified of the Bay in the parent `VoltageLevel` +- `desc`: human readable description + +**Remove Bay** + +To remove an existing `Bay` element within the parent `VoltageLevel` + +- Navigate to the **Substation** editor +- Select the **Bay** you want to remove +- Click on the **delete** button diff --git a/packages/open-scd/public/md/ClientLN.md b/packages/open-scd/public/md/ClientLN.md new file mode 100644 index 0000000000..c523b632bd --- /dev/null +++ b/packages/open-scd/public/md/ClientLN.md @@ -0,0 +1,24 @@ +A `ClientLN` is one of 3 elements that are describing connections between IEDs in a SCL file. + +**HowTo connect Report with ClientLNs** + +OpenSCD allows you to connect `ReportControl` via `ClientLN`. The starting point is the **IED** in the **Substation** editor. + +alt text + +- Click on an **IED** +- Click on **Add connection** button +- The `ClientLN` wizard open +- On the left hand side you can select the `ReportControl` element(s) in the project +- On the right hand side you can see all logical node in the receiving IED (client). +- All so-called client logical nodes - logical nodes allocated to `AccessPoint` are sorted be be on top. +- `LN0` element are sorted to be at the bottom +- Click on `CONNECT` + +![grafik](https://user-images.githubusercontent.com/66802940/133251594-7d552b24-e64f-4875-932a-07c990c0c7ac.png) + +> NOTE: When `ClientLN` connections are already present in the `Report Control` block the wizard does not close on **CONNECT** + +> NOTE: If the `RptEnabled` `max` attribute is smaller or equal to the `ClientLN` a connection is not possible. The `ReportControl` on the right hand side is disabled. + +> TIP: You can filter for several terms at same time. The space between terms is acting as a logical AND. diff --git a/packages/open-scd/public/md/Communication-Basics.md b/packages/open-scd/public/md/Communication-Basics.md new file mode 100644 index 0000000000..ec5ca5d9c6 --- /dev/null +++ b/packages/open-scd/public/md/Communication-Basics.md @@ -0,0 +1,82 @@ +The `Communication` section in a SCL file allows to specify the network, its access points as well as the configuration of each of the access points. + +It has as children at least one `SubNetwork`. It can be configured through the child element `BitRate`. Each `SubNetwork` can have multiple `ConnectedAP` elements, which are pointers to IEDs `AccessPoint` - attributes `iedName` and `apName`. Each `ConnectedAP` has one `Address` element and that has as many `P` elements as there are settings for this particular access point. A `P` element is structured as followed: + +```xml +

192.168.210.122

+``` + +The `type` attribute defines the setting type and the inner text (here 192.168.210.122) of the element defines the setting value. There are various other optional setting types defined and OpenSCD supports to set those: + +- IP +- IP-SUBNET +- IP-GATEWAY +- OSI-TSEL +- OSI-SSEL +- OSI-PSEL +- OSI-AP-Title +- OSI-AP-Invoke +- OSI-AE-Qualifier +- OSI-AE-Invoke +- OSI-NSAP +- VLAN-ID +- VLAN-PRIORITY +- SNTP-Port +- MMS-Port +- DNSName +- UDP-Port +- TCP-Port +- C37-118-IP-Port +- IPv6 +- IPv6-SUBNET +- IPv6-GATEWAY +- IPv6FlowLabel +- IPv6ClassOfTraffic +- IPv6-IGMPv3Src +- IP-IGMPv3Sr +- IP-ClassOfTraffic + +Each is backed up with pattern check against the pattern defined in the schema (2007B4). + +A very typical `Communication` section might look like this: + +```xml + + 10 + +
+

192.168.210.142

+

255.255.255.0

+

192.168.210.1

+

00000001

+

0001

+

0001

+

1,3,9999,23

+

23

+
+
+ +
+

192.168.210.121

+

255.255.255.0

+

192.168.210.1

+

00000001

+

0001

+

0001

+

1,3,9999,23

+

23

+
+
+
+``` + +> NOTE: in addition to the namespace `xmlns="http://www.iec.ch/61850/2003/SCL"` SCL files can have `xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"` as well that allows to faster parse a SCL file for communication type configuration. A `P` type element that can look like this: + +```xml +

192.168.210.122

+``` + +In OpenSCD you can configure the + +- [SubNetwork](https://github.com/openscd/open-scd/wiki/Subnetwork) +- [ConnectedAP](https://github.com/openscd/open-scd/wiki/ConnectedAP) diff --git a/packages/open-scd/public/md/Conducting-Equipment.md b/packages/open-scd/public/md/Conducting-Equipment.md new file mode 100644 index 0000000000..60c3295d7b --- /dev/null +++ b/packages/open-scd/public/md/Conducting-Equipment.md @@ -0,0 +1,45 @@ +**Create ConductingEquipment** + +grafik + +To create a new `ConductingEquipment` element within the parent `Bay` + +- Navigate to the **Substation** editor +- Select the parent **Bay** you want to add the conducting equipment to +- Select the type +- Fill in all required values +- Click on **Add** + +The create wizard allows to set + +- `type`: the standard IEC 61850 defines a set of types the user can choose from +- `name`: unique identified of the conducting equipment in the parent `Bay` +- `desc`: human readable description + +**Edit ConductingEquipment** + +grafik + +To edit a `ConductingEquipment` element: + +- Navigate to the **Substation** editor +- Select the **ConductingEquipment** you want to edit +- Click on the **edit** button +- Make the changes and click **Save** + +The element `ConductingEquipment` has two attributes + +- `name`: unique identified of the Bay in the parent `Bay` +- `desc`: human readable description +- `type`: cannot be edit! + +**Remove ConductingEquipment** + +To remove an existing `ConductingEquipment` element within the parent `Bay` + +- Navigate to the **Substation** editor +- Select the **ConductingEquipment** you want to remove +- Click on the **delete** button + +> NOTE: OpenSCD does not support the definition of user defined conducting equipment types. This can only be manipulated through the code editor. +> NOTE: The **Earth Switch** is unfortunately not a type but a special version of `DIS`. It can be tagged to a earth switch through the data object `SwType` (an logical node reference to the logical node of class `XSWI`) must be present. Or it has a child `Terminal` with a `cNodeName = grounded`. Both those cases are recognized by OpenSCD and is displayed. When you create a new **Earth Switch** the second option is applied diff --git a/packages/open-scd/public/md/ConnectedAP.md b/packages/open-scd/public/md/ConnectedAP.md new file mode 100644 index 0000000000..1207bddc17 --- /dev/null +++ b/packages/open-scd/public/md/ConnectedAP.md @@ -0,0 +1,39 @@ +The element `ConnectedAP` has only two attributes and `iedName` and `apName` that in combination are a pointer to the `AccessPoint` of an `IED`. The configuration of such an `ConnectedAP` is done inside the `Address` element. + +The structure in the **Communication** editor does not completely follow the SCL. `ConnectedAP` are grouped inside IED containers to help the user to better filter the information. When you click on such an IED container you will find that `AccessPoint`s belonging to the same IED but connected to another subnetwork are disabled but visible too. + +grafik + +  + +**Create ConnectedAP** + +As the `ConnectedAP` is just a pointer to an existing access point. The amount and the structure is limited to the amount and structure of available access points. To help the user here OpenSCD does only allow to select a `ConnectedAP` rather to create one from scratch. If an access point has already an representation in the `Communication` section you can not select it again. To create a `ConnectedAP` + +1. Navigate to the **Communication** section +2. Click in the **Add more** button of the **Subnetwork** you want to add the `ConnectedAP` element to +3. Select the access point you want to connect and click **Save** + +  + +**Edit ConnectedAP** + +grafik + +To configure an `ConnectedAP` element or to be more precise its `Address` child element + +1. Navigate to the **Communication** section +2. Click in the **ConnectedAP** you want to edit +3. Click on the **edit** action button + +> NOTE: For the various types of setting please refer to IEC 61850-6. The kind of types are summarized in [Communication basics](https://github.com/openscd/open-scd/wiki/Communication-Basics) + +  + +**Remove ConnectedAP** + +To create a `ConnectedAP` + +1. Navigate to the **Communication** section +2. Click in the **ConnectedAP** you want to remove +3. Click on the **delete** action button diff --git a/packages/open-scd/public/md/Create-GOOSE-Control-Blocks.md b/packages/open-scd/public/md/Create-GOOSE-Control-Blocks.md new file mode 100644 index 0000000000..9c2accca63 --- /dev/null +++ b/packages/open-scd/public/md/Create-GOOSE-Control-Blocks.md @@ -0,0 +1,63 @@ +**Open create wizard** + +In order to get to the GOOSE Control Block + +1. navigate to the **Substation** editor +2. click on the **G** icon button in the upper left corner +3. click in **GOOSE+** +4. select the `IED` you want to store the GOOSE in + +or + +1. navigate to the **Substation** editor +2. click one of the IEDs in the editor +3. click on the **G** action icon +4. click in **GOOSE+** + +> NOTE: The `GSEControl` element, its child elements and its referenced `DataSet` element are saved to the first `LN0` element in the selected `IED`. + +  + +This create wizard consists of three pages. All pages need to be filled properly to be able to add the GOOSE Control Block and its DataSet to the SCL. You can navigate between the pages using the buttons in the footer. + +> NOTE: The **Save** button that adds the GOOSE Control Block to the SCL is on the last page. + +  + +**GSEControl page** + +grafik + +This page contains a set of settings the server needs to have to be able to generate a GOOSE: + +- `name`: The main identifier for the GOOSE within the SCL. The name must be unique for all `GSEControl` element in the same parent element. Does influence the GOOSE Control Block reference +- `desc`: optional string that is describing the `GSEControl` element +- `type`: Whether this control block is a `GOOSE` or `GSSE` type. The later one is deprecated! +- `appID`: a unique identifier for the GOOSE. +- `fixedOffs`: Allows to specify the type of encoding for the GOOSE. For more information see IEC 61850-8-1 +- `securityEnabled`: The type of security measures the GOOSE has: encryption or/and signature or non of the two. + +  + +grafik + +**Communication page** + +This page allows do define all communication related setting for the GOOSE. These information is saved to the `Communication` section. + +1. `MAC-Address`: The destination MAC address of the GOOSE +2. `APPID`: The APPID of the GOOSE. This is recommended to be unique though out the complete project. +3. `VLAN-ID`: The virtual LAN ID the GOOSE shall be limited to. +4. `VLAN-PRIORITY`: The priority of the GOOSE message. It can be used to prioritise time-critical messages like trip signals over non-time-critical messages. +5. `MinTime`: The minimum time between two occurring GOOSEs when a e.g. a trip occurs +6. `MaxTime`: The maximum time between two occurring GOOSEs in case there is not trip. + +**Data picker** + +To define the data set a multi-select data picker is used in the last page of the create wizard. This allows you to select multiple data attributes at the same time. The exampled below picked the data attributes `general` and its quality information `q` from the data object `Op` the logical node `IP_ PTOC 1` and the logical device `ConvSS_DistProt_5051BackUpOC`. + +![grafik](https://user-images.githubusercontent.com/66802940/182411370-0be711b6-3daa-43b1-9ec3-4d7f6eb115d0.png) + +> NOTE: If no data is picked the `DataSet` is still created but is empty! You can add data using the edit wizard in a later stage. + +  diff --git a/packages/open-scd/public/md/Create-Report-Control-Blocks.md b/packages/open-scd/public/md/Create-Report-Control-Blocks.md new file mode 100644 index 0000000000..a00539e8ba --- /dev/null +++ b/packages/open-scd/public/md/Create-Report-Control-Blocks.md @@ -0,0 +1,90 @@ +**Open create wizard** + +In order to get to the Report Control Block + +1. navigate to the **Substation** editor +2. click on the **R** icon button in the upper left corner +3. click in **Report+** +4. select the `IED` you want to store the Report in + +or + +1. navigate to the **Substation** editor +2. click one of the IEDs in the editor +3. click on the **R** action icon +4. click in **Report+** + +> NOTE: The `ReportControl` element, its child elements and its referenced `DataSet` element are saved to the first `LN0` element in the selected `IED`. + +  + +This create wizard consists of four pages. All pages need to be filled properly to be able to add the Report Control Block and its DataSet to the SCL. You can navigate between the pages using the buttons in the footer. + +> NOTE: The **Save** button that adds the Report Control Block to the SCL is on the last page. + +  + +grafik + +**ReportControl page** + +This page contains a set of settings the server needs to have to be able to generate a Report: + +- `name`: The main identifier for the Report within the SCL. The name must be unique for all `ReportControl` element in the same parent element. Does influence the Report Control Block reference +- `desc`: optional string that is describing the `ReportControl` element +- `buffered`: whether the report control is buffered or not +- `rptID`: a unique identifier for the Report. If empty string the ID will be set to the Report Control Block reference (path to the report control block in the data model) +- `indexed`: Whether there can be multiple instances of the Report online. When connecting to a Report only one client can work with the Report at a same time due to the TCP/IP type connection. Therefore you need to have multiple instances of the same Report in case more than on client wants to use the same Report +- `max Clients`: This is the maximum of instances the IED has to instantiate at power-up. This field is reflecting the attribute `max` in the child element `RptEnabled` +- `bufTime`: The minimum time in [ms] between two Report messages online +- `intgPd`: The time in [ms] between two Report messages triggered periodically. + +  + +  + +  + +  + +**Trigger Options page** + +grafik +This page allows do define how a Report is triggered once activated. + +1. `dchg`: A report is send if any data in the data set is changed in the data model. E.g. the trip signal of a protection function changes from false to true +2. `qchg`: A report is send if the quality of any of the data is changes. Quality is a bit string that allow to specify the current quality of information and also allow to have indicators on the quality reason. The quality information must be part of the data set otherwise this setting does nothing. +3. `dupd`: Some data can be triggered on data update in addition to data change. This is often the case for measurement information. Let's assume you want to track our secondary voltage measurement, that is nominally 100 V. If everything work well you do not see any changes in the secondary voltage that you track but you might want to be still be updated from time to time. This trigger as active always when the values is updated in the data model independent if the value itself has been changed. +4. `period`: If true it triggers the Report periodically depending on the `intgPd` in the parent `ReportControl` attribute + > NOTE: If `period` is set to true, but `intgPd` is set to 0 the trigger condition is disabled +5. `gi`: Stand for general interrogation and allows to actively trigger a Report generation only. It simulates a master slave behavior that the Report services is trying to avoid. + +  + +**Optional Fields page** + + + +This page allows do define what extra information in addition to the data itself the Report message has as well. + +1. `seqNum`: The sequence number of the Report message. Every time a new Report is generated the sequence number is incremented. +2. `timeStamp`: The time stamp when the Report message has been generated. + > NOTE: This is not the time of the change of data in the Report but the time of the generation of the Report. The coding of this particular time does differ from those in the data set of the report and is not so precise. +3. `dataSet`: The reference to the `DataSet` connected with this Report. This allows to double check if the correct data is send with the Report +4. `reasonCode`: The trigger option that triggered the generation of the Report. data change, quality change ... +5. `dataRef`: The references fo all data in the data set of the Report. This allows the client decode a Report without knowing the structure of the data set. +6. `entryID`: The ID in the buffer for the Report. Is used for buffered Reports to retrieve only Reports from the buffered that has not been send before. +7. `configRev`: The `confRev` attribute of the Report. Allows to see if the Report has been re-configured. +8. `bufOvfl`: Indicates whether there has been a overflow of the buffer + +  + +**Data picker** + +To define the data set a multi-select data picker is used in the last page of the create wizard. This allows you to select multiple data attributes at the same time. The exampled below picked the data attributes `stVal`, `q` and `t` from the data object `Pos` the logical node `DC CSWI 1` and the logical device `CTRL`. + +![grafik](https://user-images.githubusercontent.com/66802940/182344535-9196c230-bf7b-4c90-b248-483cdd22e7d4.png) + +> NOTE: If no data is picked the `DataSet` is still created but is empty! You can add data using the edit wizard in a later stage. + +  diff --git a/packages/open-scd/public/md/Create-Sampled-Values-Control-Blocks.md b/packages/open-scd/public/md/Create-Sampled-Values-Control-Blocks.md new file mode 100644 index 0000000000..a56ca3d57f --- /dev/null +++ b/packages/open-scd/public/md/Create-Sampled-Values-Control-Blocks.md @@ -0,0 +1,79 @@ +**Open create wizard** + +In order to get to the Sampled Value Control Block + +1. navigate to the **Substation** editor +2. click on the **S** icon button in the upper left corner +3. click in **Sampled Value Control Block+** +4. select the `IED` you want to store the Sampled Value in + +or + +1. navigate to the **Substation** editor +2. click one of the IEDs in the editor +3. click on the **S** action icon +4. click in **Sampled Value Control Block+** + +> NOTE: The `SampledValueControl` element, its child elements and its referenced `DataSet` element are saved to the first `LN0` element in the selected `IED`. + +  + +This create wizard consists of three pages. All pages need to be filled properly to be able to add the Sampled Value Control Block and its DataSet to the SCL. You can navigate between the pages using the buttons in the footer. + +> NOTE: The **Save** button that adds the Sampled Value Control Block to the SCL is on the last page. + +  + +**SampledValueControl page** + +grafik + +This page contains a set of settings the server needs to have to be able to generate a Sampled Value: + +- `name`: The main identifier for the Sampled Value within the SCL. The name must be unique for all `SampledValueControl` element in the same parent element. Does influence the Sampled Value Control Block reference +- `desc`: optional string that is describing the `SampledValueControl` element +- `smvID`: a unique identifier for the Sampled Value. +- `smpMod`: The mode the sample rate is expressed in. Samples per period, sampled per second or seconds per sampled. Default is samples per period +- `smpRate`: The sample rate depending on the sample mode. +- `noASDU`: Timestamps per Ethernet packet +- `securityEnabled`: The type of security measures the Sampled Value has: encryption or/and signature or non of the two. + +  + +**SmvOpts page (optional configuration)** + +grafik + +This wizard allows to configure the optional behavior of the sampled value stream. + +1. `refreshTime`: Whether the timestamp of the generation of the sample value stream shall be included +2. `sampleRate`: Whether sample rate and sample mode shall be part of the sampled value stream +3. `dataSet`: Whether the data set reference shall be part of the sampled value stream +4. `security`: Whether the sampled value stream contains the security attribute. (Used for future definition e.g. digital signature) +5. `synchSourceId`: Whether the the sampled value stream contains the synchronizing grand master ID. + +   + +grafik + +**Communication page** + +This page allows do define all communication related setting for the Sampled Value. These information is saved to the `Communication` section to be more precise into the element `SMV`. + +1. `MAC-Address`: The destination MAC address of the Sampled Value: `01-0C-CD-04-00-00` to `01-0C-CD-04-01-FF` +2. `APPID`: The APPID of the Sampled Value. This is recommended to be unique though out the complete project. +3. `VLAN-ID`: The virtual LAN ID the Sampled Value shall be limited to. +4. `VLAN-PRIORITY`: The priority of the Sampled Value message. It can be used to prioritise time-critical messages like trip signals over non-time-critical messages. + +   + +**Data picker** + +To define the data set a multi-select data picker is used in the last page of the create wizard. This allows you to select multiple data attributes at the same time. The exampled below picked the data attributes `instMag.i` and its quality information `q` from the data object `AmpSv` the logical node `I01A TCTR 1`, `I01A TCTR 2` and the logical device `Mod2_MU1`. + +![grafik](https://user-images.githubusercontent.com/66802940/183050221-ef606fc7-1201-4e3a-930f-7bc91a56654a.png) + +> NOTE: If no data is picked the `DataSet` is still created but is empty! You can add data using the edit wizard in a later stage. +> NOTE: The picker does restrict the data for Sample Values to the data objects `AmpSv`, `Amp` in logical node `TCTR` and `VolSv`, `Vol` in logical node `TVTR` + +  diff --git a/packages/open-scd/public/md/Create-Specification-IED-from-functions.md b/packages/open-scd/public/md/Create-Specification-IED-from-functions.md new file mode 100644 index 0000000000..9ffa81b9b3 --- /dev/null +++ b/packages/open-scd/public/md/Create-Specification-IED-from-functions.md @@ -0,0 +1,125 @@ +As a user of the IEC 61850 I can formulate some of the WHAT I want in the SCL files during specification phase. Very common things to specify are: + +- substation structure +- single line diagram +- structure of the data I want to have (DataTypeTemplates) +- allocation of the logical node classes to substation elements (e.g. bay 1 shall have overcurrent protection `PTOC`) + +All of this can be done using the `Substation` section and the `DataTypeTemplate` section. Some user even want to be more specific in their specification and want in addition specify: + +- allocation of logical nodes to IEDs (e.g. main 1 has distance protection PDIS and main 2 has overcurrent protection PTOC) +- the capability of the IED (e.g. how many GOOSE does it need to subscribe or how many reports can be activated at the same time) + +That can only be done in the `IED` element in the SCL. The construction of such a co-called `SPECIFICATION` IED can be done either by hand or though a transformation algorithm based on the function structure in the substation section. + +**Automated SPECIFICATION IED creation** + +grafik + +The basic idea behind this algorithm is that function type elements are used to structure logical nodes in the substation section and logical devices in their essence to the same in the IED section. As they are different in structure we need some transformation rules: + +1. Logical devices can have only one parent the `Server` function can have multiple parents. This means that multiple functions with the same name might exist in the substation structure e.g. Circuit_Breaker that is potentially in every bay once. To deal with that the logical name can be constructed from the parent names in addition to the function name. The algorithm takes as many parents onto account as it need for a globally unique logical device name +2. If a function or sub-function has only one logical node no new logical device is created but the function/sub-function name is written to the logical nodes `prefix` attribute +3. There must be at least one logical node of the `lnClass = LLN0` in the logical device. A transformation without such a logical node in the `DataTypeTemplates` is not possible. If there are multiple defined one has to be selected. + +!!! The input for the automated IED creation is the function structure in the substation thus make sure the SCL file has: + +- [existing function(s) in the Substation section](https://github.com/openscd/open-scd/wiki/Function) + +To use this automated specification IED creation + +- activate menu plugin **Create Virtual IED** is activated. (See TODO) +- open **Menu** and click on **Create Virtual IED** +- make sure to fill in + - `manufacturer`: this is not the real manufacturer but a tag for the entity that is doing the specification + - `desc`: allows you differentiate multiple `SPECIFICATION` IED in the file + - `AccessPoint name`: must be specified for schema validity and is replaced with the real access point name in a later stage + - select at least one logical node +- do not forget to press **Save** + +> NOTE: The name of the logical device is shown above the LLN0 selection field. It is a globally unique logical device name based of the function structure in the substation section. + +Below you can see a example project for a typical function structure specified. You can load this into OpenSCD and see the outcome of the transformation yourself. Happy testing :) + +```xml + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + + + + + + +``` diff --git a/packages/open-scd/public/md/Data-attribute-type-DAType.md b/packages/open-scd/public/md/Data-attribute-type-DAType.md new file mode 100644 index 0000000000..2d19649795 --- /dev/null +++ b/packages/open-scd/public/md/Data-attribute-type-DAType.md @@ -0,0 +1,75 @@ + +**Add DAType** + +alt text + +1. Navigate to the list of `DAType`'s in the **template editor** +2. Click on **Add DAType** +3. Select either a `DAType` from the template library or an empty on (empty **value** field) + +*Settings*: +1. **id***: make sure that id is unique in the whole project. +2. **desc**: user-defined description field + +*From IEC 61850* + +OpenSCD templates contains all data attribute types from IEC 61850‑7‑3. Other than `EnumType` most pre-defined `DAType` have more flexibility in their definition. As an example you can see the definition of the `AnalogueValue` as defined in the [NSD]() files. + +``` + + + + +``` + +The definition especially the attribute `presCond` gives the freedom to decide if one or both can be children of the `AnalogueValue`. This means for you as a user that you have to decide how your `AnalogueValue` can look like. For OpenSCD templates this means that most `DAType` contain all possible children. From there on you can remove children so that the `DAType` does fit your needs. + +> NOTE: `DAType` in the OpenSCD templates contain often all possible children. Please check if you really need all of them. Check the definition of the `DAType` definition of the standard. + + +*User-defined* + +An black `DAType` is added to the project, that in a lot of cases is invalid so do not stop here. + +  + +**Edit DAType** + +alt text + +1. Navigate to the `DAType`'s list in the **template editor** +2. Click on the `DAType` you want to edit + +*Settings*: + +1. **id***: make sure that id is unique in the whole project. +2. **desc**: user-defined description field +3. List of all child `BDA`. The item shows the `id` as well as the type - `bType`. When the type starts with **#** than the `BDA` is either a constructed attribute or an enumeration. + + +*Example*: +``` + + + + +``` + +  + +**Remove EnumType** + +1. Open the `DAType` you want to remove **Edit DAType** +2. Click on **Remove** button + +> **WARNING**: OpenSCD does not check for validity before removal so be careful! + diff --git a/packages/open-scd/public/md/Data-attribute-type-child-BDA.md b/packages/open-scd/public/md/Data-attribute-type-child-BDA.md new file mode 100644 index 0000000000..8cc240b9f0 --- /dev/null +++ b/packages/open-scd/public/md/Data-attribute-type-child-BDA.md @@ -0,0 +1,61 @@ + + **Add new BDA** + +alt text + + +You can use OpenSCD to add new `BDA`s to an existing `DAType`. +1. Navigate to the `DAType` you want to edit and open the **Edit DAType** wizard. +2. Click on **DATA ATTRIBUTE** button in the middle of the wizard. + +*Settings*: +1. **name***: If you choose to have a `BDA` from IEC 61850 namespace consult IEC 61850‑7‑4. Otherwise make sure to start with an lower case latter [a-z] +2. **desc**: user-defined description field +3. **bType***: The attributes basic type. If *Enum* or *Struct* the **type** field may not be empty. +4. **type***: Type is defined as string in the SCL but is a selector in OpenSCD. If **bType** is *Struct* the selector shows all `DAType` - `id`'s in the project. Without existing `DAType` in the project you cannot create a `BDA`. If **bType** is *Enum* the selector shows all `EnumType` - `id`'s in the project. +5. **sAddr**: user-defined string to describe a short address +6. **valKind**: Might be missing and if not must be either true or false. +7. **valImport**: +8. **Val**: Value element that allow you to pre-define the value offline. This can be added to any data attribute (`DA` or `BDA`). + +> **NOTE:** `Val` definition does not make sense for all function constraints (`FC`). E.g status type data attribute as `stVal` is not very useful. For other data attributes it perfectly makes sense to pre-define the value. E.g. the `ctlModel` + +> **CHECKS**: Missing or wrong `name` is covered by schema validator. Missing or wrong `type` is covered by template validator. + + +alt text + +**Edit BDA** + +You can use OpenSCD to manipulate existing `BDA`. +1. Navigate to `DAType` list in **template editor** +2. Click on `DAType` that contains the `BDA` you want to edit +2. Click on child `BDA` you want to edit + +*Settings*: + +The settings are the same a in the **Add BDA** wizard with the difference that there is a remove button. + +*Example:* +``` + +``` +  + +**Remove BDA** + +1. Open **Edit DA** wizard +2. Click on **Remove** button + +> **WARNING**: OpenSCD does not check for validity before removal so be careful! + + + + + + + + + + + diff --git a/packages/open-scd/public/md/Data-object-type-DOType.md b/packages/open-scd/public/md/Data-object-type-DOType.md new file mode 100644 index 0000000000..7df543d382 --- /dev/null +++ b/packages/open-scd/public/md/Data-object-type-DOType.md @@ -0,0 +1,79 @@ + +**Add DOType** + +alt text + + +1. Navigate to the list of `DOType`'s in the **template editor** +2. Click on **Add DOType** +3. Select either a `DOType` from the template library or an empty one (empty **value** field) + +*Settings*: +1. **id***: make sure that id is unique in the whole project. +2. **desc**: user-defined description field + +*From IEC 61850* + +OpenSCD templates have suggestions for all common data classes defined in the IEC 61850‑7‑3. Other than with `EnumType`'s however you will have to edit the imported `DOType` to fit the needs. + +> NOTE: `DOType` in the OpenSCD templates contain often a minimal `DOType` or `CDC`. You will in most cases have to add more children to fit your needs. Check the `DOType` definition in the standard. + + +*User-defined* + +An black `DOType` is added to the project, that in a lot of cases is invalid so do not stop here. + +alt text + +  + +**Edit DOType** + +1. Navigate to the `DOType`'s list in the **template editor** +2. Click on the `DOType` you want to edit + +  + + +*Settings*: + +1. **id***: make sure that id is unique in the whole project. +2. **desc**: user-defined description field +3. **cdc***: common data class definition acc. to IEC 61850-7-3 +3. List of all child `DA` of `DO`. The item shows the `id` as well as the type - `bType`. When the type starts with **#** than the `DA` is either a constructed attribute or an enumeration. `SDO` are always constructed data and are referencing to a `DOType` itself. + + +  + +**Remove DOType** + +1. Open the `DOType` you want to remove **Edit DOType** +2. Click on **Remove** button + + +> **WARNING**: OpenSCD does not check for validity before removal so be careful! + + + +*Example*: +``` + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + +``` \ No newline at end of file diff --git a/packages/open-scd/public/md/Data-object-type-child-DA.md b/packages/open-scd/public/md/Data-object-type-child-DA.md new file mode 100644 index 0000000000..115258da79 --- /dev/null +++ b/packages/open-scd/public/md/Data-object-type-child-DA.md @@ -0,0 +1,68 @@ + + **Add new DA** + +alt text + + +You can use OpenSCD to add new `DA`s to an existing `DOType`. +1. Navigate to the `DOType` you want to edit and open the **Edit DAType** wizard. +2. Click on **DATA ATTRIBUTE** button in the middle of the wizard. + +*Settings*: +1. **name***: If you choose to have a `BDA` from IEC 61850 namespace consult IEC 61850‑7‑4. Otherwise make sure to start with an lower case latter [a-z] +2. **desc**: user-defined description field +3. **bType***: The attributes basic type. If *Enum* or *Struct* the **type** field may not be empty. +4. **type***: Type is defined as string in the SCL but is a selector in OpenSCD. If **bType** is *Struct* the selector shows all `DAType` - `id`'s in the project. Without existing `DAType` in the project you cannot create a `BDA`. If **bType** is *Enum* the selector shows all `EnumType` - `id`'s in the project. +5. **sAddr**: user-defined string to describe a short address +6. **valKind**: Might be missing and if not must be either true or false. +7. **valImport**: Might be missing and if not must be either true or false. +8. **Val**: Value element that allow you to pre-define the value offline. This can be added to any data attribute (`DA` or `BDA`). +9. **dchg**: data update acc. IEC 61850-7-3 for this particular data attribute. +10. **qchg**: quality update is true for all DA of name *a* else is empty +11. **dupd**: data update acc. to IEC 61850-7-3 +12. **fc**: functional constraint acc. IEC 61850-7-3 for this particular data attribute. + +> **NOTE:** `Val` definition does not make sense for all function constraints (`FC`). E.g status type data attribute as `stVal` is not very useful. For other data attributes it perfectly makes sense to pre-define the value. E.g. the `ctlModel` + +> **NOTE**: Since Edition 2 you cannot design your own CDC and must use for t a user-defined data object a CDC from IEC 61850-7-3. This means that the data attributes are defined. Please check the tables to set the attributes `dchg`, `qchg`, `dupd` and `fc` + + + +alt text + +**Edit DA** + +You can use OpenSCD to manipulate existing `DA`. +1. Navigate to `DOType` list in **template editor** +2. Click on `DOType` that contains the `DA` you want to edit +2. Click on child `DA` you want to edit + +*Settings*: + +The settings are the same a in the **Add DA** wizard with the difference that there is a remove button. + +*Example:* +``` + + sbo-with-enhanced-security + +``` +  + +**Remove DO** + +1. Open **Edit DA** wizard +2. Click on **Remove** button + +> **WARNING**: OpenSCD does not check for validity before removal so be careful! + + + + + + + + + + + diff --git a/packages/open-scd/public/md/Data-object-type-child-SDO.md b/packages/open-scd/public/md/Data-object-type-child-SDO.md new file mode 100644 index 0000000000..bb4dac926a --- /dev/null +++ b/packages/open-scd/public/md/Data-object-type-child-SDO.md @@ -0,0 +1,55 @@ + +**Add new SDO** + +alt text + + +You can use OpenSCD to add new `SDO`'s to an existing `DOType`. +1. Navigate to the `DOType` you want to edit and open the **Edit DOType** wizard. +2. Click on **DATA OBJECT** button in the middle of the wizard. + +*Settings*: +1. **name***: If you choose to have a `SDO` from IEC 61850 namespace consult IEC 61850‑7‑4. Otherwise make sure to start with an upper case latter [A-Z] +2. **desc**: user-defined description field +3. **type***: Type is defined as string in the SCL but is a selector in OpenSCD. The selector shows all `DOType` - `id`'s in the project. Without existing `DOType` you cannot create a `DO`. + + +> **CHECKS**: Missing or wrong `name` is covered by schema validator. Missing or wrong `type` is covered by template validator. + +alt text + +**Edit DO** + +You can use OpenSCD to manipulate existing `DO`. +1. Navigate to `DOType` list in the **template editor** +2. Click on `DOType` that contains the `SDO`. E.g. common data class `WYE` +2. Click on child `SDO` you want to manipulate - **Edit SDO** wizard + +  + +*Settings*: + +The settings are the same a in the **Add SDO** wizard with the difference that there is a remove button. + +*Example:* +``` + +``` +  + +**Remove SDO** +1. Open **Edit SDO** +2. Click on **Remove** button + +> **WARNING**: OpenSCD does not check for validity before removal so be careful! + + + + + + + + + + + diff --git a/packages/open-scd/public/md/DataTypeTemplates.md b/packages/open-scd/public/md/DataTypeTemplates.md new file mode 100644 index 0000000000..dcb761a4ab --- /dev/null +++ b/packages/open-scd/public/md/DataTypeTemplates.md @@ -0,0 +1,30 @@ +All top-down projects start here. You can define your data model in a green field approach with the **Template editor** of OpenSCD. If you are looking at this section of the wiki your job is probably the definition of a data model. For most users this means the transition of an existing signal list to IEC 61850 data model references. + +The difference between a signal list and the data model defined in the IEC 61850 is, that the data model is hierarchically structured into the following levels: + +1. Logical node +2. Data object +3. Data attribute +4. (Enumeration) + +This hierarchical structure can be defined in the `DataTypeTemplates` section of a SCL file by defining and referencing four elements `LNodeType`, `DOType`, `DAType` and `EnumType`. One builds upon the other. In other words, if you want to define a `LNodeType` or let's say a LLN0 logical node class you need some already defined `DOType`s and for those you need some already existing `DAType`s and for some of those - ENx - you also need some already existing `EnumType`s. + +This is why this process is so hard for beginners to wrap their mind around. To help users that are not so experienced with this part of the standard as well as others that you need to know, e.g. 7-4, 7-3, 8-1, OpenSCD offers so-called templates. + +The template database is nothing else than a pre-define data model. Here a lot and a growing number of logical node classes are defined with its proper references to `DOType`, `DAType` and `EnumType`. + +You can see, if OpenSCD does have a template for a logical node class you need in the **Add LNodeType** wizard (_Pre-defined lnClasses from templates_). For more detail please refer to [start from templates](https://github.com/openscd/open-scd/wiki/Start-from-template) + +If this option is disabled you have to start the process [from scratch](https://github.com/openscd/open-scd/wiki/Start-from-scratch) + +In addition to that you can read/manipulate any element and their attributes using the wizards for + +- [LNodeType](https://github.com/openscd/open-scd/wiki/Logical-node-type-LNodeType) +- [DO](https://github.com/openscd/open-scd/wiki/Logical-node-type-child-DO) +- [DOType](https://github.com/openscd/open-scd/wiki/Data-object-type-DOType) +- [SDO](https://github.com/openscd/open-scd/wiki/Data-object-type-child-SDO) +- [DA](https://github.com/openscd/open-scd/wiki/Data-object-type-child-DA) +- [DAType](https://github.com/openscd/open-scd/wiki/Data-attribute-type-DAType) +- [BDA](https://github.com/openscd/open-scd/wiki/Data-attribute-type-child-BDA) +- [EnumType](https://github.com/openscd/open-scd/wiki/Enumeration-EnumType) +- [EnumVal](https://github.com/openscd/open-scd/wiki/Enumeration-EnumVal) diff --git a/packages/open-scd/public/md/Edit-GOOSE-Control-Blocks.md b/packages/open-scd/public/md/Edit-GOOSE-Control-Blocks.md new file mode 100644 index 0000000000..5d637ce9cb --- /dev/null +++ b/packages/open-scd/public/md/Edit-GOOSE-Control-Blocks.md @@ -0,0 +1,58 @@ +The configuration of GOOSEs or to be more precise GOOSE Blocks is done on the SCL element `GSEControl`, its referenced `DataSet` element and its referenced `GSE` element allocated in the `Communication` section. +The schema does restrict the allocation of the element: + +1. `GSEControl` must reside in the `LN0` element +2. `GSEControl` and its referenced `DataSet` must have the same parent + +**Editing GOOSEs** + +In OpenSCD `GSEControl` elements are configured using so-called wizards. There are three wizards combined that allow editing of GOOSE + +grafik + +  + +The wizard contains a set of setting allocated in the element `GSEControl`: + +- `name`: The main identifier for the GOOSE within the SCL. The name must be unique for all `GSEControl` element in the same parent element. Does influence the GOOSE Control Block reference +- `desc`: optional string that is describing the `GSEControl` element +- `type`: Whether this control block is a `GOOSE` or `GSSE` type. The later one is deprecated! +- `appID`: a unique identifier for the GOOSE. +- `fixedOffs`: Allows to specify the type of encoding for the GOOSE. For more information see IEC 61850-8-1 +- `securityEnabled`: The type of security measures the GOOSE has: encryption or/and signature or non of the two. + +To change any of the attributes you have to click on the **Save** button of the wizard. + +  + +**Communication page** + +grafik + +This page allows do define all communication related setting for the GOOSE. These information is saved to the `Communication` section. + +1. `MAC-Address`: The destination MAC address of the GOOSE +2. `APPID`: The APPID of the GOOSE. This is recommended to be unique though out the complete project. +3. `VLAN-ID`: The virtual LAN ID the GOOSE shall be limited to. +4. `VLAN-PRIORITY`: The priority of the GOOSE message. It can be used to prioritise time-critical messages like trip signals over non-time-critical messages. +5. `MinTime`: The minimum time between two occurring GOOSEs when a e.g. a trip occurs +6. `MaxTime`: The maximum time between two occurring GOOSEs in case there is not trip. + +  + +**Editing data set (DataSet)** + +> See data set wizard + +  + +**Navigating between wizard** + + + +Each wizard represents one element in the SCL. To navigate between those click on the **more vert** icon button on the upper left corner. The pop up menu show various choices. + +1. Remove the `GSEControl` element + > NOTE: When the referenced `DataSet` element is referenced to this GOOSE only than this is removes as well +2. Opens the data set wizard for the `DataSet` referenced to this GOOSE +3. Opens the communication wizard diff --git a/packages/open-scd/public/md/Edit-Report-Control-Blocks.md b/packages/open-scd/public/md/Edit-Report-Control-Blocks.md new file mode 100644 index 0000000000..8541407ef0 --- /dev/null +++ b/packages/open-scd/public/md/Edit-Report-Control-Blocks.md @@ -0,0 +1,78 @@ +The configuration of Reports or to be more precise Report Control Blocks is done on the SCL element `ReportControl`, its child elements `TrgOpts`. `OptFields` and `RptEnabled` and its referenced `DataSet` element. +The schema does restrict the allocation of the element: + +1. `ReportControl` must reside in the `LN0` or `LN` element +2. `ReportControl` and its referenced `DataSet` must have the same parent + +**Editing Report** + +In OpenSCD `ReportControl` elements are configured using so-called wizards. There are four wizards combined that allow editing of Reports + +grafik + +  + +1. Edit wizard or create wizard page for the `ReportControl` element itself. This allow to set all attributes that are: + + - `name`: The main identifier for the Report within the SCL. The name must be unique for all `ReportControl` element in the same parent element + - `desc`: optional string that is describing the `ReportControl` element + - `buffered`: whether the report control is buffered or not + - `rptID`: a unique identifier for the Report. If empty string the ID will be set to the Report Control Block reference (path to the Report Control Block in the data model) + - `indexed`: Whether there can be multiple instances of the Report online. When connecting to a Report only one client can work with the Report at a time due to the TCP/IP type connection. Therefore you need to have multiple instances of the same Report in case more than on client wants to use the same Report + - `max Clients`: This is the maximum of instances the IED has to instantiate at power-up. This field is reflecting the attribute `max` in the child element `RptEnabled` + - `bufTime`: The minimum time in [ms] between two Report messages online + - `intgPd`: The time in [ms] between two Report messages triggered periodically. + +To change any of the attributes you have to click on the **Save** button of the wizard. + +  + +**Editing Trigger Options** + +grafik + +The wizard for Reports child element `TrgOps` (Trigger Options) allow do define how a Report is triggered once activated. + +1. `dchg`: A report is send if any data in the data set is changed in the data model. E.g. the trip signal of a protection function changes from false to true +2. `qchg`: A report is send if the quality of any of the data is changes. Quality is a bit string that allow to specify the current quality of information and also allow to have indicators on the quality reason. The quality information must be part of the data set otherwise this setting does nothing. +3. `dupd`: Some data can be triggered on data update in addition to data change. This is often the case for measurement information. Let's assume you want to track our secondary voltage measurement, that is nominally 100 V. If everything work well you do not see any changes in the secondary voltage that you track but you might want to be still be updated from time to time. This trigger as active always when the values is updated in the data model independent if the value itself has been changed. +4. `period`: If true it triggers the Report periodically depending on the `intgPd` in the parent `ReportControl` attribute + > NOTE: If `period` is set to true, but `intgPd` is set to 0 the trigger condition is disabled +5. `gi`: Stand for general interrogation and allows to actively trigger a Report generation only. It simulates a master slave behavior that the Report services is trying to avoid. + +  + +**Editing Optional Fields** + +grafik + +The wizard for Reports child element `OptFields` (optional Fields) allow do define what extra information in addition to the data itself the Report message has as well. + +1. `seqNum`: The sequence number of the Report message. Every time a new Report is generated the sequence number is incremented. +2. `timeStamp`: The time stamp when the Report message has been generated. + > NOTE: This is not the time of the change of data in the Report but the time of the generation of the Report. The coding of this particular time does differ from those in the data set of the report and is not so precise. +3. `dataSet`: The reference to the `DataSet` connected with this Report. This allows to double check if the correct data is send with the Report +4. `reasonCode`: The trigger option that triggered the generation of the Report. data change, quality change ... +5. `dataRef`: The references fo all data in the data set of the Report. This allows the client decode a Report without knowing the structure of the data set. +6. `entryID`: The ID in the buffer for the Report. Is used for buffered Reports to retrieve only Reports from the buffered that has not been send before. +7. `configRev`: The `confRev` attribute of the Report. Allows to see if the Report has been re-configured. +8. `bufOvfl`: Indicates whether there has been a overflow of the buffer + +**Editing data set (DataSet)** + +> See data set wizard + +  + +**Navigating between wizard** + +grafik + +Each wizard represents one element in the SCL. To navigate between those click on the **more vert** icon button on the upper left corner. The pop up menu show various choices. + +1. Remove the `ReportControl` element including all its child elements: `TrgOps`, `OptFields` and `RptEnabled`. + > NOTE: When the referenced `DataSet` element is referenced to this Report only than this is removes as well +2. Opens the data set wizard for the `DataSet` referenced to this Report +3. Opens the trigger options wizard +4. Opens the optional fields wizard +5. Allows to deep copy the Report to other IEDs diff --git a/packages/open-scd/public/md/Edit-Sampled-Value-Control-Blocks.md b/packages/open-scd/public/md/Edit-Sampled-Value-Control-Blocks.md new file mode 100644 index 0000000000..83db21c903 --- /dev/null +++ b/packages/open-scd/public/md/Edit-Sampled-Value-Control-Blocks.md @@ -0,0 +1,72 @@ +The configuration of Sampled Values or to be more precise Sampled Value Blocks is done on the SCL element `SampledValueControl`, its referenced `DataSet` element and its referenced `SMV` element allocated in the `Communication` section. +The schema does restrict the allocation of the element: + +1. `SampledValueControl` must reside in the `LN0` element +2. `SampledValueControl` and its referenced `DataSet` must have the same parent +3. `SMV` can only exist if the access point (`ConnectedAP`) of the server is connected to a sub-network (`SubNetwork`) in the `Communication` section + +**Editing Sampled Values** + +In OpenSCD `SampledValueControl` elements are configured using so-called wizards. There are three wizards combined that allow editing of Sampled Value Control Block + +grafik + +  + +The wizard contains a set of setting allocated in the element `SampledValueControl`: + +- `name`: The main identifier for the Sampled Value within the SCL. The name must be unique for all `SampledValueControl` element in the same parent element. Does influence the Sampled Value Control Block reference +- `desc`: optional string that is describing the `SampledValueControl` element +- `multicast`: Only visible when false as non-multicast sampled value streams are deprecated. +- `smvID`: a unique identifier for the Sampled Value. +- `smpMod`: The mode the sample rate is expressed in. Samples per period, sampled per second or seconds per sampled. Default is samples per period +- `smpRate`: The sample rate depending on the sample mode. +- `noASDU`: Timestamps per Ethernet packet +- `securityEnabled`: The type of security measures the Sampled Value has: encryption or/and signature or non of the two. + +To change any of the attributes you have to click on the **Save** button of the wizard. + +  + +**Editing the Optional information page** + +grafik + +This wizard allows to configure the optional behavior of the sampled value stream. + +1. `refreshTime`: Whether the timestamp of the generation of the sample value stream shall be included +2. `sampleRate`: Whether sample rate and sample mode shall be part of the sampled value stream +3. `dataSet`: Whether the data set reference shall be part of the sampled value stream +4. `security`: Whether the sampled value stream contains the security attribute. (Used for future definition e.g. digital signature) +5. `synchSourceId`: Whether the the sampled value stream contains the synchronizing grand master ID. + +   + + grafik + +**Communication page** + +This wizard allows do define all communication related setting for the Sampled Value. These information is saved to the `Communication` section to be more precise into the element `SMV`. + +1. `MAC-Address`: The destination MAC address of the Sampled Value: `01-0C-CD-04-00-00` to `01-0C-CD-04-01-FF` +2. `APPID`: The APPID of the Sampled Value. This is recommended to be unique though out the complete project. +3. `VLAN-ID`: The virtual LAN ID the Sampled Value shall be limited to. +4. `VLAN-PRIORITY`: The priority of the Sampled Value message. It can be used to priorities time-critical messages like trip signals over non-time-critical messages. + +   + +**Editing data set (DataSet)** + +> See data set wizard + +  + +grafik + +**Navigating between wizard** + +Each wizard represents one element in the SCL. To navigate between those click on the **more vert** icon button on the upper left corner. The pop up menu show various choices. + +1. Remove the `SampledValueControl` element. Its referenced data set is removed as well so long it is referenced only to this control block. +2. Opens the data set wizard for the `DataSet` referenced to this GOOSE +3. Opens the communication wizard diff --git a/packages/open-scd/public/md/Enumeration-EnumType.md b/packages/open-scd/public/md/Enumeration-EnumType.md new file mode 100644 index 0000000000..85e536fb13 --- /dev/null +++ b/packages/open-scd/public/md/Enumeration-EnumType.md @@ -0,0 +1,63 @@ + +With OpenSCD you can either add enumerations that are defined in the standard, or create your own user-defined `EnumType`. + +> **NOTE**: In most cases enumeration defined in IEC 61850‑7‑4 and IEC 61850‑7‑3 are sufficient enough. It is recommended to use those where ever possible. + +alt text + +**Add EnumType** + +1. Navigate to the `EnumType` list and click on **Add EnumType** +2. Select the in the **values** field the `EnumType` you want to add + +*Settings*: +1. **id***: make sure that id is unique in the whole project. +2. **desc**: user-defined description field + + +*From IEC 61850* + +OpenSCD templates contains all enumerations from IEC 61850‑7‑4 and IEC 61850‑7‑3. The correct `EnumType` with all possible `EnumVal` child elements are added to the project. + +*User-defined* + +Do defined a user-defined from scratch open **Add EnumType** wizard and make sure to NOT select the value. Be careful with this option as this adds a blank `EnumType`. + +  + +alt text + +**Edit EnumType** + +1. Navigate to the `EnumType` list in the **Template editor** and click on the `EnumType` you want to edit + +*Settings*: + +1. **id***: make sure that id is unique in the whole project. +2. **desc**: user-defined description field +3. List of all child `EnumVal` with its `ord` attribute and its inner text. + +*Example*: +``` + + on + blocked + test + test/blocked + off + +``` + +  + +**Remove EnumType** + +1. Open the `EnumType` you want to remove **Edit EnumType** +2. Click on **Remove** button + +> **WARNING**: OpenSCD does not check for validity before removal so be careful! + + + + + diff --git a/packages/open-scd/public/md/Enumeration-EnumVal.md b/packages/open-scd/public/md/Enumeration-EnumVal.md new file mode 100644 index 0000000000..f5ba40db21 --- /dev/null +++ b/packages/open-scd/public/md/Enumeration-EnumVal.md @@ -0,0 +1,45 @@ + +**Add EnumVal** + +You can use OpenSCD to add new `EnumVal`s to an existing `EnumType`. + +alt text + +1. Navigate to the `EnumType` you want to add a `EnumVal` to open the **Edit EnumType** wizard. +2. Click on **ENUM VALUE** button in the middle of the wizard. + +*Settings*: +1. **ord***: Must be unique within the `EnumType`. +2. **desc**: user-defined description field +3. **value***: The enumeration value as string. + +  + +**Edit EnumVal** + +You can edit existing `EnumVal` element to for example fix issues. + +1. Navigate to the `EnumType` that contains the `EnumVal` you want to edit +2. Open the **Edit EnumType** page and click on the `EnumVal` you want to edit the **Edit Enum** wizard. + +*Settings*: +1. **ord***: Must be unique within the `EnumType`. +2. **desc**: user-defined description field +3. **value***: The enumeration value as string. + + +  + +*Example:* +``` +on +``` + + + +**Remove EnumVal** + +Removing `EnumVal` from `EnumType` might be necessary from time to time to adapt to the definition to vendor specific data model. Es an exampled you can often see that `BehaviorModeKind` to consist of on, test and off only. (test/blocked and on-blocked are removed) + +1. Open the `EnumVal` you want to remove in **Edit EnumVal** wizard +2. Click on **Remove** diff --git a/packages/open-scd/public/md/Extensions.md b/packages/open-scd/public/md/Extensions.md new file mode 100644 index 0000000000..2042ecf2a7 --- /dev/null +++ b/packages/open-scd/public/md/Extensions.md @@ -0,0 +1,17 @@ +OpenSCD uses extensions to provide built-in functionality and to allow additional functionality beyond the OpenSCD defaults. + +Utilities, IED manufacturers, system integrators or other parties can create extensions and provide an interface for viewing or modifying SCL (including modification of private namespaces). + +There are three types of extensions: + +1. _Menu_ extensions - shown on the project menu after enabling them. +2. _Editor_ extensions - shown in the main window after enabling them. +3. _Validator_ extensions - ensure file compliance with a schema or design rules. + +To enable extensions, open the project menu by clicking on the top three lines in the top left, scrolling to the bottom and selecting the _Extensions_ item. +Then select and deselect functionality. +If you are confident in the source of a custom extension, you can also add an extension from a URL. + +> NOTE: Infrequently used or in-development extensions are disabled by default. + +> NOTE: Where there are many editor extensions, scroll through them by using Shift + Wheel Mouse button. diff --git a/packages/open-scd/public/md/Function.md b/packages/open-scd/public/md/Function.md new file mode 100644 index 0000000000..ee07a157ed --- /dev/null +++ b/packages/open-scd/public/md/Function.md @@ -0,0 +1,99 @@ +By default the function structure is hidden. You can un-hide it using the toggle button **Filter function type element** on the upper corner of the **Substation** editor. + +grafik + +The elements `Function`, `SubFunction`, `EqFunction` and `EqSubFunction` can be allocated in specific parent elements only each in others. OpenSCD guides you here. Click the more add button of the parent element and see if any of the options is shown like so for **Function** + +grafik + +or so for **EqFunction** + +grafik + +  + +**Function type element wizards** +grafik + +All wizards for the elements `Function`, `SubFunction`, `EqFunction` and `EqSubFunction` have the same attributes and the same restrictions. (see **Add Function** as representative for the others as well) +The wizard dialog allows to add all tree attributes: + +- `name`: name of the function +- `desc`: human readable description of the function +- `type`: user definable function type + +  + +**Create Function** + +To crate a new `Function` element + +1. select a correct parent e.g. `Bay` +2. click on the **add more** button +3. click on **Function** +4. add at least **name** and click **Save** + +**Edit Function** + +To edit `Function` element + +1. select the Function element within the **Substation** editor +2. click on the **edit** button +3. do the changes and click **Save** + +  + +**Create SubFunction** + +To crate a new `SubFunction` element + +1. select a correct parent `Function` or `SubFunction` +2. click on the **add more** button +3. click on **SubFunction** +4. add at least **name** and click **Save** + +**Edit SubFunction** + +To edit `SubFunction` element + +1. select the **SubFunction** element within the **Substation** editor +2. click on the **edit** button +3. do the changes and click **Save** + +  + +**Create EqFunction** + +To crate a new `EqFunction` element + +1. select a correct parent e.g. `ConductingEquipment` +2. click on the **add more** button +3. click on **EqFunction** +4. add at least **name** and click **Save** + +**Edit EqFunction** + +To edit `EqFunction` element + +1. select the **EqFunction** element within the **Substation** editor +2. click on the **edit** button +3. do the changes and click **Save** + +  + +**Create EqSubFunction** + +To crate a new `EqSubFunction` element + +1. select a correct parent `EqFunction` or `EqSubFunction` +2. click on the **add more** button +3. click on **EqSubFunction** +4. add at least **name** and click **Save** + +**Edit EqSubFunction** + +To edit `EqSubFunction` element + +1. select the **EQSubFunction** element within the **Substation** editor +2. click on the **edit** button +3. do the changes and click **Save** diff --git a/packages/open-scd/public/md/Functional-Naming-Basics.md b/packages/open-scd/public/md/Functional-Naming-Basics.md new file mode 100644 index 0000000000..719dbe5312 --- /dev/null +++ b/packages/open-scd/public/md/Functional-Naming-Basics.md @@ -0,0 +1,66 @@ +Functional naming is a concept that allows to create a data model structure in a IED based on the function structure in the substation section. The function structure is constructed from four elements `Function`, `SubFunction`, `EqFunction` and `EqSubFunction` where `SubFunction` is a child of `Function` or `SubFunction` itself and `EqSubFunction` is a child of `EqFunction` or `EqSubFunction` itself. + +`Function` as an element is used to add functional structure to non-equipment type process elements like `Substation`, `VoltageLevel`, `Bay`, `Line`, `Process` and others. `EqFunction` can be allocated in equipments as `PowerTransformer`, `ConductingEquipment`, `GeneralEquipment` and others. + +This type of structure allows the user of the SCL to group and organize [logical node references]() in the `Substation` section. Let's assume one wants to specify a distance protection within bay 1 that in addition to that shall have a general trip one could either directly reference in the bay 1 as + +```xml + + + + + + + + + +``` + +Although perfectly fine with a growing number of logical node references within the same bay it could not be readable any more. As an alternative the distance protection could be implemented as such + +```xml + + + + + + + + + + + + + + + + + + +``` + +An example for the use of `EqFunction` could be something like: + +```xml + + + + + + + + + + + + + + +``` + +Can you guess what it is? Would you be able to if these have been directly referenced in the bay in addition to the distance protection. + +> NOTE: The element logical device `LDevice` in the IED has a similar purpose as the function structure in the substation section. It has been designed to structure logical nodes to groups. That is why the function structure can be transformed into logical devices! OpenSCD allows you to do so using [Create SPECIFICATION IED]() + +**Create function structure in OpenSCD** +[Manipulate function type elements with OpenSCD](https://github.com/openscd/open-scd/wiki/Function) diff --git a/packages/open-scd/public/md/Generic-Substation-Event-Basics.md b/packages/open-scd/public/md/Generic-Substation-Event-Basics.md new file mode 100644 index 0000000000..cd77290faf --- /dev/null +++ b/packages/open-scd/public/md/Generic-Substation-Event-Basics.md @@ -0,0 +1,26 @@ +The Generic Substation Event is a service class that has been designed to transmit data for time critical functions such as trip signals to circuit breakers. Its most prominent type is the Generic Object Oriented Substation Event GOOSE. The other one is the so-called GSSE but is deprecated. + +The GOOSE is defined in the part IEC 61850-8-1. It is often applied to communicate between servers such as bay controller and switch gear control unit. + +GOOSE does not use TCP/IP but uses a multicast mechanism instead to send to all communication participants in the same LAN/VLAN. Its sending (or publishing) and its use (or subscribing) are, therefore, completely separated. This has an impact on the way GOOSE-related communications are configured in the SCL. + +**Publishing: GOOSE Control Block (GSEControl)** + +The configuration of GOOSE publishers is done in the SCL element `GSEControl` and its referenced `DataSet` element. The reference to its `DataSet` is set through the attribute `datSet` in the `GSEControl` element. + +> NOTE: `GSEControl` must reside in the `LN0` element and `GSEControl` and its referenced `DataSet` must have the same parent + +1. create control block: Create the element `GSEControl` or import SCL with pre-existing `GSEControl` elements +2. create data set: Create element `DataSet` in the same parent as the `GSEControl` and add data `FCDA` to it +3. combine control block and data set: Set the `datSet` attribute within the `GSEControl` element + +**Publishing: Configuring GOOSEs with OpenSCD** + +1. [Create GOOSE Control Blocks and its DataSet](https://github.com/openscd/open-scd/wiki/Create-GOOSE-Control-Blocks) +2. [Edit GOOSE Control Blocks and its DataSets](https://github.com/openscd/open-scd/wiki/Edit-GOOSE-Control-Blocks) + +**Subscription: Basics** +See [Subscription basics](https://github.com/openscd/open-scd/wiki/Subscriber-basics) + +**Subscription with OpenSCD** +See [Subscription complete GOOSE](https://github.com/openscd/open-scd/wiki/Subscribe-complete-GOOSE) diff --git a/packages/open-scd/public/md/Global-SCL-manipulation.md b/packages/open-scd/public/md/Global-SCL-manipulation.md new file mode 100644 index 0000000000..84dbeb7f17 --- /dev/null +++ b/packages/open-scd/public/md/Global-SCL-manipulation.md @@ -0,0 +1,4 @@ +This page explains with features that are not related to a specific process within a SCL. They have a global character and can be used for a lot of different task. At the moment these is a + +- [Merge functionality](https://github.com/openscd/open-scd/wiki/Merge-functionality) +- [XML editor](https://github.com/openscd/open-scd/wiki/XML-code-editor) - pro mode \ No newline at end of file diff --git a/packages/open-scd/public/md/Guess-substation-structure.md b/packages/open-scd/public/md/Guess-substation-structure.md new file mode 100644 index 0000000000..0686b72380 --- /dev/null +++ b/packages/open-scd/public/md/Guess-substation-structure.md @@ -0,0 +1,26 @@ + +The `Substation` is an optional element and therefore is often missing in so-called bottom-up projects. With `OpenSCD` you can add the `Substation` element in the aftermath. + +For exactly this purpose the `guess` function has been introduced to `OpenSCD` to either speed up this task or to give pure beginner an impression what to do. + +> NOTE: A guess will never be perfect as it is based on assumptions (see below) that not necessary fit to the IEDs you have in the `SCL` file. However, you can give it a try as you can always `undo`. + +This is how you can use the function: +- Open and `SCL` file with missing substation or delete all `Substation`elements +- Click on the fab button **+Add Substation** +- In the dialog **Add Substation** check the box **Guess content** +- Choose the `(ctlModel)` (**Control model**) that identify your switch gear in the IED +- Start **GUESS CONTENT** + + +> NOTE: The biggest challenge with the guess function is to identify the amount of voltage levels (`VoltageLevel`), bays (`Bay`) and so-called conducting equipment or primary equipment(`ConductingEquipment`). + +We therefore have to make some basic assumptions that is: +- Assumes only one voltage level +- Bays are identified with the logical node `CSWI`. That means, if there is at least a logical node `CSWI` and the mandatory data object `Pos` matches the chosen control model (ctlModel) a bay is created for this particular IED. +- Each of the logical nodes `CSWI` with matching `ctlModel ` represents a conducting equipment. If a `XCBR` is connected to it (same `prefix` and `inst` in the same `LDevice`), the conducting equipment `type` is `CBR` in every other case `DIS`. +- Logical node connections `LNode` are automatically assigned to the conducting equipment. Ideally this is the `CSWI`, a `XCRB` or `XSWI` and `CILO` + +> TIP: Especially the assumption that there is only one voltage level does not match big files with lots of IEDs. Use the **Move** function to allocate bays to other voltage levels. + + diff --git a/packages/open-scd/public/md/Home.md b/packages/open-scd/public/md/Home.md new file mode 100644 index 0000000000..ee2b6c9dfe --- /dev/null +++ b/packages/open-scd/public/md/Home.md @@ -0,0 +1,17 @@ +This is an open repository of information on OpenSCD and IEC 61850-6. You are welcome to share your knowledge with the rest of the world at https://github.com/openscd/open-scd/wiki/Home/_edit 😄 . Welcome aboard! + +You can find information related to topics like + +- [Installation](https://github.com/openscd/open-scd/wiki/Install-OpenSCD) +- [Interface](https://github.com/openscd/open-scd/wiki/Interface) +- [Project workflow](https://github.com/openscd/open-scd/wiki/Project-workflow) +- [Validators used in OpenSCD](https://github.com/openscd/open-scd/wiki/Validators) +- [Extensions](https://github.com/openscd/open-scd/wiki/Extensions) + +as well as features that allow you to manipulate or add specific information to the project covering + +- [Substation section](https://github.com/openscd/open-scd/wiki/Substation-Section-Basics) +- [Communication section](https://github.com/openscd/open-scd/wiki/Communication-Basics) +- [IED section](https://github.com/openscd/open-scd/wiki/IED) +- [DataTypeTemplate section](https://github.com/openscd/open-scd/wiki/DataTypeTemplates) +- [Global SCL manipulation capability](https://github.com/openscd/open-scd/wiki/Global-SCL-manipulation) diff --git a/packages/open-scd/public/md/IED.md b/packages/open-scd/public/md/IED.md new file mode 100644 index 0000000000..7fb8ec9277 --- /dev/null +++ b/packages/open-scd/public/md/IED.md @@ -0,0 +1,17 @@ +Here you can learn how to configure `IED`s with **OpenSCD**. + +## Create virtual IED + +- [Create SPECIFICATION IED](https://github.com/openscd/open-scd/wiki/Create-Specification-IED-from-functions) + +## Edit/create/delete control blocks + +- [GSEControl](https://github.com/openscd/open-scd/wiki/Generic-Substation-Event-Basics) (`GOOSE`) +- [SampledValueControl](https://github.com/openscd/open-scd/wiki/Sampled-Values-Basics) +- [ReportControl](https://github.com/openscd/open-scd/wiki/Report-Basics) + +## Communication mappings + +- [Create report connections](https://github.com/openscd/open-scd/wiki/ClientLN) (`ClientLN`) +- [Create GOOSE connection](https://github.com/openscd/open-scd/wiki/Subscriber-basics) +- [Create Sampled Value connections](https://github.com/openscd/open-scd/wiki/Subscriber-basics) diff --git a/packages/open-scd/public/md/Import-IEDs.md b/packages/open-scd/public/md/Import-IEDs.md new file mode 100644 index 0000000000..5b7df966ee --- /dev/null +++ b/packages/open-scd/public/md/Import-IEDs.md @@ -0,0 +1,19 @@ +Importing IEDs is a key feature for any system configuration, regardless if is follows the so-called `bottom-up` or `top-down` approach. + +To import IEDs to the project +1. Navigate to the **Menu** +2. Click on **Import IED** +3. Select the file(s) you want to import the IED(s) from + + +Behind the scenes **OpenSCD** checks for uniqueness of the IEDs `name` attribute. This must be unique within the project. There is only one exception to the rule and is called `TEMPLATE`. This is a key word defined to describe template IED an opposition to "real" IEDs. + +Another important information that is checked is within the `DataTypeTemplates` section. As the `IED` section is relying on **OpenSCD** makes sure that there are no conflict between the imported and existing templates. To be more precise the `id`'s within `LNodeType`, `DOType`, `DAType` and `EnumType` must be unique in the project. The standard describe two basic procedure how to deal with this situation: + +1. Make `id` unique. When importing IEDs with connections to data in `DataTypeTemplates` with `id`'s already present in the project the `id` and the `type` attribute can be unified. As the IED name must be unique in the project OpenSCD is attaching this variable to the `id` and `type` attributes in the `DataTypeTemplates`. + +2. Use `iedType` attribute: `LNodeType`, `DOType`, `DAType` and `EnumType` all have an attribute `iedType` that points to the attribute `type` in the IED section. With this attribute data can clearly be connected with a IED. + +> NOTE: OpenSCD does only use the first option a the moment to make sure that all `id`'s are unique within the `DataTypeTemplates` section. + +> INFO: [Tissue 366](https://iec61850.tissue-db.com/tissue/366) diff --git a/packages/open-scd/public/md/Install-OpenSCD.md b/packages/open-scd/public/md/Install-OpenSCD.md new file mode 100644 index 0000000000..aa8327004f --- /dev/null +++ b/packages/open-scd/public/md/Install-OpenSCD.md @@ -0,0 +1,41 @@ + +OpenSCD shall be an easy accessible tool. The technology allows you to use on any machine that can run a browser. In fact you can simply install it on any machine as a progressive web app - PWA. When you have access to world wide web we recommend to use the online version + +## Online +There is no need to install. You simply have to go to `https://openscd.github.io`. The advantage of this option is that you get out of the box continues delivery. That means that any change we do to the software is immediately at your hands. +> NOTE: We are not collecting any data nor do you upload any data behind the scenes. So you don't have to worry about that. The internet connection is only required to check, if you are up-to-date with the latest version and if not to load the missing elements. + +You can install OpenSCD as PWA on your machine like so +![InstallOpenSCD](https://user-images.githubusercontent.com/66802940/121010699-0520f580-c796-11eb-9e9e-4ec8a314be4c.png) +* Use `Chrome`, `Chromium` or `Edge` +* Open `https://openscd.github.io` +* Click on the installation button + + + +## Offline + +OpenSCD can be installed on computers with no World Wide Web connection. There are two approaches to do that. + +*** +1. You still have access to a local network (intranet): +Ask your IT colleagues and ask them to configure a web server in the intranet and load the version you want to e.g. [version 0.7.0](https://github.com/openscd/open-scd/releases/tag/v0.7.0) -> `open-scd.zip` + +*** + +2. You have no access to any network: +You have to install a software that allows you to run a web server locally on your machine e.g [Web Server for Chrome](https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb) +For `Web Server for Chrome` +* Download a [version](https://github.com/openscd/open-scd/releases) of OpenSCD. To be more precise, the `open-scd.zip`. +* Extract `open-scd.zip` +* Start the web server +* Click on `CHOOSE FOLDER` +* Navigate to the extracted `open-scd` folder (You see folders .git, doc, public and other). +* Click on the web server URL within `Web Server for Chrome` + +![WebServer](https://user-images.githubusercontent.com/66802940/121010207-685e5800-c795-11eb-8805-ca59e1a2d98b.png) + + + + + diff --git a/packages/open-scd/public/md/Interface.md b/packages/open-scd/public/md/Interface.md new file mode 100644 index 0000000000..32eb9833ef --- /dev/null +++ b/packages/open-scd/public/md/Interface.md @@ -0,0 +1,6 @@ +OpenSCD makes extensive use of lists which allow filtering by a search query. + +You can use wildcards as part of a search query: + +* A question mark, `?` will match any single character +* An asterisk, `*` will match one or more characters diff --git a/packages/open-scd/public/md/Logical-Node-Reference.md b/packages/open-scd/public/md/Logical-Node-Reference.md new file mode 100644 index 0000000000..b3e7a1f4db --- /dev/null +++ b/packages/open-scd/public/md/Logical-Node-Reference.md @@ -0,0 +1,64 @@ +  + +Logical node references are not visible so long the function structure is filtered. (see [Function](https://github.com/openscd/open-scd/wiki/Function) for more detail). When the function structure is visible logical node references are renders using the first letter of the logical node class e.g. **P** for protection or **C** for control. The element is an action icon. You can click on it and see what action can be performed (edit, duplicate, remove) + +**Edit Logical Node reference** + +The wizard does not allow you to manipulate the logical node reference but it can give you a bit more insight into its structure for trouble shooting in falsy SCL files. + +  + +**Remove Logical Node reference** + +Removes the logical node reference from the parent element + +  + +**Duplicate Logical Node reference** + +This feature is allowed on logical node references with `iedName = None` (pointer into the data type template). It allows faster instantiate the same logical nodes from the data type templates section by cloning an already existing one and incrementing the logical node instance (`lnInst`). E.g. you need 7 zone for a distance protection. Each is a logical node of the class `PDIS`. You can then ad one using the create wizard and the others can be cloned with the duplicate feature. + +  + +**Create Logical Node instance** + +grafik + +grafik + +To create a new logical node reference either + +- click on the icon grafik + or +- navigate to the element you want to add the logical node reference to +- click on the **add more** icon +- Click on **LNode** + +  + +**Reference to instantiated Logical Node in IED** + +To create a reference ot a logical node within an IED you can navigate to any process structure type element in the substation section and click in the icon show in the beginning of the article. The wizard is constructed from two pages. + +_Select IED_ + +Allows to select the IED you want to have the logical node from + +_Select Logical Node_ + +Show all logical nodes form the selected IEDs on the first page. IEDs can have a lot of logical node references and we therefore recommend to use the filter function. You can filter for the IED the logical device as well as the prefix and the class of the logical node you want to reference. NOTE: If the logical node has been referenced to another element in the substation OpenSCD won't allow you to reference it twice. + +  + +**Reference to typical Logical Node in DataTypeTemplates section** + +grafik + +To create a reference to a template logical node in the data type templates section of the file navigate to one of the functional structure element like `Function` and click on the **add more** and click on **LNode**. The wizard has only one page that is showing all `LNodeType` elements with its `lnClass` and `id`. + +> NOTE: You can select multiple templates but you cannot make multiple instance of one template in this wizard. See the duplicate feature in this article + +> NOTE: You can navigate between the wizard to instantiate a new logical node and the one to reference to an instantiated logical node. Click on the **more vert** button on the upper right corner of the wizard and select the click on the proposed - other - wizard. + +grafik +grafik diff --git a/packages/open-scd/public/md/Logical-node-type-LNodeType.md b/packages/open-scd/public/md/Logical-node-type-LNodeType.md new file mode 100644 index 0000000000..df19be53b3 --- /dev/null +++ b/packages/open-scd/public/md/Logical-node-type-LNodeType.md @@ -0,0 +1,61 @@ +**Add LNodeType** + +alt text + +1. Navigate to the list of `LNodeType`'s in the **template editor** +2. Click on **Add LNodeType** +3. Select a logical node class form the **lnClass** field +4. You can add a pre-defined lnClass form templates or create your own lnClass with the help of OpenSCD + +_Settings_: + +1. **id**: make sure that id is unique in the whole project. +2. **desc**: user-defined description field + +_From IEC 61850_ + +See details how to [start from templates database]() + +_User-defined_ + +See details how to [start from scratch]() + +alt text + +  + +**Edit LNodeType** + +1. Navigate to the `LNodeType`'s list in the **template editor** +2. Click on the `LNodeType` you want to edit + +  + +_Settings_: + +1. **id\***: make sure that id is unique in the whole project. +2. **desc**: user-defined description field +3. **lnClass\***: the class acc. to the IEC 61850-7-4 +4. List of all child `DO`. The item shows the `id` as well as the type reference to `DOType`. `DO` must have a `type` attribute + +  + +**Remove LNodeType** + +1. Open the `LNodeType` you want to remove **Edit LNodeType** +2. Click on **Remove** button + +> **WARNING**: OpenSCD does not check for validity before removal so be careful! + +_Example_: + +``` + + + + + + + + +``` diff --git a/packages/open-scd/public/md/Logical-node-type-child-DO.md b/packages/open-scd/public/md/Logical-node-type-child-DO.md new file mode 100644 index 0000000000..c3d78f3103 --- /dev/null +++ b/packages/open-scd/public/md/Logical-node-type-child-DO.md @@ -0,0 +1,56 @@ +**Add new DO** + +alt text + + +You can use OpenSCD to add new `DO`'s to an existing `LNodeType`. +1. Navigate to the `LNodeType` you want to edit and open the **Edit LNodeType** wizard. +2. Click on **DATA OBJECT** button in the middle of the wizard. + +*Settings*: +1. **name***: If you choose to have a `DO` from IEC 61850 namespace consult IEC 61850‑7‑4. Otherwise make sure to start with an upper case latter [A-Z] +2. **desc**: user-defined description field +3. **type***: Type is defined as string in the SCL but is a selector in OpenSCD. The selector shows all `DOType` - `id`'s in the project. Without existing `DOType` you cannot create a `DO`. +4. **accessControl**: user-defined string to describe the access control +5. **transient**: If `DO` is from the IEC 61850 namespace transient must be as defined in the IEC 61850‑7‑4. E.g. `Tr` from logical node class `PTRC`. + + +> **CHECKS**: Missing or wrong `name` is covered by schema validator. Missing or wrong `type` is covered by template validator. + +alt text + +**Edit DO** + +You can use OpenSCD to manipulate existing `DO`. +1. Navigate to `LNodeType` list in the **template editor** +2. Click on `LNodeType` that contains the `DO` +2. Click on child `DO` you want to manipulate - **Edit DO** wizard + +  + +*Settings*: + +The settings are the same a in the **Add DO** wizard with the difference that there is a remove button. + +*Example:* +``` + +``` +  + +**Remove DO** +1. Open **Edit DO** +2. Click on **Remove** button + +> **WARNING**: OpenSCD does not check for validity before removal so be careful! + + + + + + + + + + + diff --git a/packages/open-scd/public/md/Merge-functionality.md b/packages/open-scd/public/md/Merge-functionality.md new file mode 100644 index 0000000000..2122c7a14a --- /dev/null +++ b/packages/open-scd/public/md/Merge-functionality.md @@ -0,0 +1,43 @@ +# Merge or Diff +Merge is a basic functionality that allows to import information from other files or to update existing elements with information from other files. + +To understand what **OpenSCD** is doing behind the scenes we need to explain to terms first: + +1. Same: Two elements are the same if they have the same identity. In case of **OpenSCD** we have defined the identity for all elements in our foundation and it is a string of all unique attributes of the path. E.g. A `Bay` must have a `name` attribute and it must be unique within the `VoltageLevel` - so says the standard. This is the id for this element. The same is true vor all parent elements until the `SCL` tag. Therefore the identity of a `Bay` are all `name` attributes separated by `>`: `AA1>E1>Q01` for example. Other element might have other identifiers like the `id` attribute of `LNodeType` element. Sometimes we have to use the index to build the identity. + +2. Equal: Two elements are equal if it and all its children are the same and their attributes are equal. + +The merge functionality is using these two attributes of element to calculate a difference and allows to merge elements from different files. + +To use this functionality you can click on **Merge Project** or **Update Substation** + +## Merge Project + +alt text + +1. Edit: Attributes same - element's - imported and existing - are present but differ. E.g in the existing it is *Bay01* and the imported *Bay Q01* +2. Add: An attribute is present in the imported but not in the existing file or a child element is present in the imported but not in the existing file. +3. Delete: An attribute is present in the existing but not in the imported same element or a same child element is present in the existing but not in the imported file. E.g. the attribute *sxy:x* is present in the existing but not in the imported file. +4. Merge: Element in the existing file and the imported file are the same but differ in attribute and or child elements themselves. + + The merge is a step by step procedure that starts at the root element `SCL` moving first through all its child elements. This means that you will see a wizard page for all children that are not the same. Once those are done all child elements of the selected element is following. + + As an example let's assume you imported a file that differs in one `DO` definition within a `LNodeType` - `desc`, a `LN` definition with one of four `IED` elements and within one of three `Bay` elements within a `Substation` - here `desc` again is different. + 1. The merge starts at the `SCL` element showing you that three elements are not equal and can be merged: `Substation`, one `IED` and the `DataTypeTemplates`. Let's assume you select the `Substation` and the `DataTypeTemplates` only and leave out the `IED`. + 2. The next wizard page will shows you the `Substation` element and that the `VoltageLevel` is not equal and can be merged - let's assume there is only one `VoltageLevel`. We follow this path and select the `VoltageLevel` + 3. Next is the `DataTypeTemplates` element showing you that one `LNodeType` is not equal and you chose to merge this. + 4. Next would be the `Bay` element. Here the attribute `desc` is different and you can edit it. No child element are shows as they are equal. + 5. Next is the `LNodeType` showing you the one `DO` child element that is not equal. + 6. Next is the `DO` element differs in the attribute `desc` that you can decide to edit. + + + ## Update Substation +The difference between **Merge Project** and **Update Substation** is that the later is focusing only on the `Substation` element and the process is automated. We have robed the user of its options to reduce the complexity. This means in detail that that we pre-define the selection of the four options to be: + +1. Edit: selected +2. Add: selected +3. Delete: de-selected +4. Merge: selected + +In order to produce valid files or better to not knowingly break valid files elements of `LNode` are checked before editing and adding to be unique within the `Substation` element and to reference to an existing `LN` or `LN0` in the project. E.g. if the imported project has a `LNode` that is pointing to a logical node that does not exist in the existing project the `LNode` element is ignored. + \ No newline at end of file diff --git a/packages/open-scd/public/md/Power-Transformer.md b/packages/open-scd/public/md/Power-Transformer.md new file mode 100644 index 0000000000..9d419ae5e4 --- /dev/null +++ b/packages/open-scd/public/md/Power-Transformer.md @@ -0,0 +1,41 @@ +**Create PowerTransformer** + +grafik + +To create a new `PowerTransformer` element within the parent `Bay`, `VoltageLevel` or `Substation` + +- Navigate to the **Substation** editor +- Select the parent you want to add the power transformer to +- Fill in all required values +- Click on **Add** + +The create wizard allows to set + +- `type`: is fixed to `PTR` +- `name`: unique identified of the power transformer in the parent +- `desc`: human readable description + +**Edit PowerTransformer** + +grafik + +To edit a `PowerTransformer` element: + +- Navigate to the **Substation** editor +- Select the **PowerTransformer** you want to edit +- Click on the **edit** button +- Make the changes and click **Save** + +The element `PowerTransformer` has two attributes + +- `name`: unique identified of the Bay in the parent +- `desc`: human readable description +- `type`: fixed to `PTR` + +**Remove PowerTransformer** + +To remove an existing `PowerTransformer` element within the parent `Bay` + +- Navigate to the **Substation** editor +- Select the **PowerTransformer** you want to remove +- Click on the **delete** button diff --git a/packages/open-scd/public/md/Project-workflow.md b/packages/open-scd/public/md/Project-workflow.md new file mode 100644 index 0000000000..93488a1a73 --- /dev/null +++ b/packages/open-scd/public/md/Project-workflow.md @@ -0,0 +1,20 @@ +This page is related to topics concerning project workflow within **OpenSCD**. One of the basic goals of **OpenSCD** is to save the information in the project exclusivity to SCL files and while doing so to avoid `private` elements where possible. To be more precise we try to avoid to put information to namespaces that are not defined by the standard. This shall ensure the likelihood for interoperability in multi vendor projects. Avoiding `private` element does not mean that OpenSCD removes any. In fact for the time being OpenSCD just ignores private section. + +As all information in **OpenSCD** are saved to SCL files and not some proprietary file formats a project is equal to a SCL file. + +### Create new project +1. Open **OpenSCD** +2. Click on **New project** + +### Open project +1. Navigate to the **Menu** +2. Click **Open project** + +> NOTE: You can open any kind of SCL type. + +### Import information from other SCL files +See more information in [Import IEDs](https://github.com/openscd/open-scd/wiki/Import-IEDs) + +### Save project + +See more information in [Save project to SCL](https://github.com/openscd/open-scd/wiki/Save-project) \ No newline at end of file diff --git a/packages/open-scd/public/md/Report-Basics.md b/packages/open-scd/public/md/Report-Basics.md new file mode 100644 index 0000000000..1eabca90a9 --- /dev/null +++ b/packages/open-scd/public/md/Report-Basics.md @@ -0,0 +1,27 @@ +The Report is a services defined in the IEC 61850-7-2. It allows event driven communication by introducing trigger options to the Report which allow the server to create a Report and send it to the client based on events in the substation. This services is commonly applied for communication between the bay level equipment and station level equipment and is used for signals like: + +1. Measurement information +2. Status of switch gear and other sensors in the substation + +**Report Control Block** + +The configuration of Reports or to be more precise Report Control Blocks is done on the SCL element `ReportControl`, its child elements `TrgOpts` (trigger options), `OptFields` (optional fields) and `RptEnabled` (containing the clients) and its referenced `DataSet` element. The reference to its `DataSet` is set through the attribute `datSet` in the `ReportControl` element. + +> NOTE: `ReportControl` must reside in the `LN0` or `LN` element and `ReportControl` and its referenced `DataSet` must have the same parent + +**Dynamic vs. Static Reporting** + +Reports need to be configured in three steps and depending on the strategy - dynamic vs static reporting - online or in a system configuration tool(SCT) or IED configuration tool (ICT) + +| basic step  |  static reporting | dynamic reporting | +| ---------------------------------- | -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | +| create control block | Both SCT or ICT but more common in SCT | Predefined empty Report control blocks in the \*.icd file | +| create data set | Both SCT or ICT but more common in SCT | Online using `CreateDataSet` request defined in IEC 61850-7-2 | +| combine control block and data set | Both SCT and ICT but more common in SCT | Online using `SetBRCBValues`, `SetURCBValues` | +| Enable the Report by a client | Online using `SetBRCBValues`, `SetURCBValues` request. Can be automated using the `ClientLN` element in the SCL file | Online using `SetBRCBValues`, `SetURCBValues` request. Can be automated using the `ClientLN` element in the SCL file but not common for dynamic reports | + +**Configuring Reports with OpenSCD** + +1. [Create Report Control Blocks and its DataSet](https://github.com/openscd/open-scd/wiki/Create-Report-Control-Blocks) +2. [Edit Report Control Blocks and its DataSets](https://github.com/openscd/open-scd/wiki/Edit-Report-Control-Blocks) +3. [Manage ClientLN configuration](https://github.com/openscd/open-scd/wiki/ClientLN) diff --git a/packages/open-scd/public/md/Sampled-Values-Basics.md b/packages/open-scd/public/md/Sampled-Values-Basics.md new file mode 100644 index 0000000000..cef26888ff --- /dev/null +++ b/packages/open-scd/public/md/Sampled-Values-Basics.md @@ -0,0 +1,28 @@ +The service called Sampled Values is designed to transmit current and voltage measurement data via Ethernet as defined in 9-2. Strictly there is also a way to do that using other connection mechanism as defined in the IEC 61850-9-1 but this is not described nor supported in OpenSCD. + +Sampled Value Streams do not use TCP/IP but use multicast mechanism instead to be send to all communication participants in the same LAN/VLAN. Its sending (publishing) and its use (subscription) are therefore completely separated. That has its effect also on the configuration of Sampled Value related communication in the SCL. + +**Publishing: Sampled Value Control Block (SampledValueControl)** + +The configuration of Sampled Value publishers is done in the SCL element `SampledValueControl` and its referenced `DataSet` element. The reference to its `DataSet` is set through the attribute `datSet` in the `SampledValueControl` element. + +> NOTE: `SampledValueControl` must reside in the `LN0` element and `SampledValueControl` and its referenced `DataSet` must have the same parent + +A configuration of the publisher has three basics steps: + +1. create control block: Create the element `SampledValueControl` or import SCL with pre-existing `SampledValueControl` elements +2. create data set: Create element `DataSet` in the same parent as the `SampledValueControl` and add data `FCDA` to it +3. combine control block and data set: Set the `datSet` attribute within the `SampledValueControl` element + +**Publishing: Configuring Sampled Values with OpenSCD** + +1. [Create Sampled Value Control Blocks and its DataSet](https://github.com/openscd/open-scd/wiki/Create-Sampled-Value-Control-Blocks) +2. [Edit Sampled Value Control Blocks and its DataSets](https://github.com/openscd/open-scd/wiki/Edit-Sampled-Value-Control-Blocks) + +**Subscription: Basics** + +See [Subscription basics](https://github.com/openscd/open-scd/wiki/Subscriber-basics) + +**Subscription with OpenSCD** + +See [Subscription complete Sampled Value Stream](https://github.com/openscd/open-scd/wiki/Subscribe-complete-SMV) diff --git a/packages/open-scd/public/md/Save-project.md b/packages/open-scd/public/md/Save-project.md new file mode 100644 index 0000000000..4135ba6067 --- /dev/null +++ b/packages/open-scd/public/md/Save-project.md @@ -0,0 +1,3 @@ +One of the things that user might be different in OpenSCD compared to a desktop application is **Save project**. As OpenSCD runs in the browser we use the browser standard behavior to save files and in most browsers this means that the file is downloaded in the download folder on your machine directly. + +HOWEVER, you can change this standard behavior. In Chrome and Chromium, this setting is called **Ask where to save each file before downloading**. \ No newline at end of file diff --git a/packages/open-scd/public/md/Start-from-scratch.md b/packages/open-scd/public/md/Start-from-scratch.md new file mode 100644 index 0000000000..b36cc5da3e --- /dev/null +++ b/packages/open-scd/public/md/Start-from-scratch.md @@ -0,0 +1,80 @@ +In this section you are guided through the process to create ONE valid `LNodeType`. We will concentrate on the logical node class `CSWI`. + +But before going into details let make a small experiment: + +1. Open **OpenSCD** +2. Create new Edition 2.1 project +3. Navigate to **Template editor** +4. Add a `DataTypeTemplate` +5. Click on **Add LNodeType** +6. Click on **Value** +7. Select empty logical node class e.g. _CSWI_ as **lnClass** +8. Click on **Next...** +9. Click on **Save** + +![grafik](https://user-images.githubusercontent.com/66802940/131665399-3b7ffd50-74f5-424a-b9a5-926eb71eb8be.png) + +The wizard does not let you to save it. Well the reason is that you have not defined the minimum required data objects. Those are highlighted red. When you try to add something here your are disappointed again, as the list is empty. The reason is that **OpenSCD** tries to find a `DOType` that fits the definition of the `DO` but cannot find any as there are no `DOType`s yet in the project. + +In this case for example you need to have one `DOType` of the type `ENS`. In addition to that the data object `Pos` is required - `DPC`. + +Lets start with `Beh` first. This is of the common data class (CDC) `ENS`. And if you look into the IEC 61850 7-3 and look for the `ENS` table, you will see that you need at least `stVal`, `q` and `t`. So let's create the `DOType` first. + +1. Click on **Add DOType** +2. Leave **value** empty +3. Type _BehENS_ into the **id** field + +OpenSCD does add this `DOType` but the validator tells you this is not valid, so don't stop here. Let's add the `DA`s `q` and `t` first. + +1. Click on **BehENS** +2. Click on **Add Data Attribute** +3. Type in _q_ into the **name** field +4. Select is _Quality_ in the **bType** field +5. Type in _ST_ in the **fc** field (functional constraint) +6. Click **Save** + +7. Click on **BehENS** again +8. Click on **Add Data Attribute** +9. Type in _t_ into the **name** field +10. Select is _Timestamp_ in the **bType** field +11. Type in _ST_ in the **fc** field (functional constraint) +12. Click **Save** + +Where do I get this information you might ask: you have to look into the IEC 61850 7-3 table for `ENS`. + +The next attribute `stVal` is a bit more tricky. If you look into the same table you will see that the `bType` attribute is Enum and is also defined in the 7-3. This Enum is called `BehaviorModeKind`. Here you can decide to either create it from scratch again. But with Enums we do not recommend it as all Enums are clearly defined and are part of the templates. So take the one from the templates: + +1. Click on **Add EnumType** +2. Select _BehaviorModeKind_ as **Value** +3. Type in _OpenSCD_BehaviorModeKind_ into **id** field +4. Click **Save** + +Now we can proceed to add the data attribute `stVal`. + +1. Click in **BehENS** once again +2. Click **Add Data Attribute** ` +3. Type in _stVal_ into **name** field +4. Select _Enum_ in the **bType** field +5. The type is enabled and show all `EnumType`s in the project. +6. Select _OpenSCD_BehaviorModeKind_ in **type** field +7. Click **Save** + +Still the validator will complain. The `cdc` attribute is empty but required within our `DOType`. + +1. Click on **BehENS** as last time +2. Type in _ENS_ into the **cdc** field +3. Click **Save** + +Nearly done. Now we need to define a `DOType` which must be a `DPC` common data class. To reduce complexity you can a [status-only DPC type](https://github.com/openscd/open-scd/wiki/Create-status-only-DPC). For the full experience create a [sbo-with-enhanced-security DPC](https://github.com/openscd/open-scd/wiki/Create-sbw-with-enchanced-security-DPC) + +Finally we are in a stage to create the `LNodeType` with `lnClass` `CSWI`. + +1. Click on **Add LNodeType** +2. Select empty logical node class e.g. _CSWI_ as **lnClass** +3. Don't forget the **id** field +4. Click on **Next...** +5. For the required data objects `Beh` and `Pos`. The wizard suggests the two `DOType` you just create and... + +...tada you have made it. This procedure is basically always the same but with different kind of common data classes that you need to create before being able to create a LNodeType. + +> NOTE: In the **Select Data Objects** wizard OpenSCD suggests `DOType`s based in their `cdc` definition. It does not check if the `DOType` has the correct structure. diff --git a/packages/open-scd/public/md/Start-from-template.md b/packages/open-scd/public/md/Start-from-template.md new file mode 100644 index 0000000000..8bc00d4154 --- /dev/null +++ b/packages/open-scd/public/md/Start-from-template.md @@ -0,0 +1,20 @@ + +The template database offers a growing number of pre-defined `LNodeType`, `DOType`, `DAType` and `EnumType`. `EnumType`. You can add any of them from the templates database to your project and use re-use whoever you need it. + +If you look into the template database and compare the numbers of the different types you will see that they are growing from `EnumType`, `DAType`, `DOType` to `LNodeType`. The reason for this is the number of possibilities that are growing with each component. + +`EnumType`s for example are pretty straight forward. The Parts 7-3 and 7-4 defines a bunch of those and in most cases you just use them. You might need to reduce the number of the values within your `EnumType` but you will rarely define your owns during this step. + +For the `DAType` this becomes a bit more complicated. Here the child element might be present or not or one of those must be present. As an example lets look at the `AnalogueValue`. This potentially can have two children, a float and/or a integer attribute. This means that potentially there are three different types of `AnalogueValue`. This becomes more complicated with let's say a `Vector`. This consists of one or two AnalogueValues,`mag` and/or `ang`, and there are therefore 9 different possibilities. + +It becomes even more complicated dealing with `DOType` and `LNodeType`. The complexity and the theoretical possibilities grow here as well. What does this mean for OpenSCD? We cannot provide any possible combination for every data defined within the namespace of the IEC 61850. This would just create a insanely big XML file that makes it difficult to navigate trough it. What is does give is a most common most general type that is used by most users. + +You can add all types from the template database: +- [LNodeType](https://github.com/openscd/open-scd/wiki/Add-LNodeType-from-templates) +- [DOType](https://github.com/openscd/open-scd/wiki/Add-DOType-from-templates) +- [DAType](https://github.com/openscd/open-scd/wiki/Add-DAType-from-templates) +- [EnumType](https://github.com/openscd/open-scd/wiki/Add-EnumType-from-templates) + +However, we suggest you to start from the `LNodeType`. This will automatically add a valid element into your project, you cannot make so many mistakes along the way and you have the minimum element in your `DataTypeTemplates` section. + +Please be aware though that in some cases you will need to adapt the element imported from the template database. You can see [here]() how to do that. diff --git a/packages/open-scd/public/md/Subnetwork.md b/packages/open-scd/public/md/Subnetwork.md new file mode 100644 index 0000000000..5f90326737 --- /dev/null +++ b/packages/open-scd/public/md/Subnetwork.md @@ -0,0 +1,47 @@ +**Create Subnetwork** + +grafik + +To create a `SubNetwork` element + +1. Navigate to the **Communication** editor +2. Click on the fab button **Add Subnetwork** +3. Fill in required data and click **Add** + +The create wizard for the `SubNetwork` allows you to set + +- `name`: the identifier for the sub network in the `Communication` section +- `desc`: a description of this element +- `type`: the type of sub network you are building e.g. 8-MMS for IEC 61850 +- `BitRate`: the value itself and the multiplier. Unit is always fixed to `b/s` + +  + +**Edit Subnetwork** + +grafik + +To edit a `SubNetwork` element + +1. Navigate to the **Communication** editor +2. Click on **Subnetwork** you want to configure +3. Fill in required data and click **Save** + +The edit wizard for the `SubNetwork` allows you to set + +- `name`: the identifier for the sub network in the `Communication` section +- `desc`: a description of this element +- `type`: the type of sub network you are building e.g. 8-MMS for IEC 61850 +- `BitRate`: the value itself and the multiplier. Unit is always fixed to `b/s` + +  + +**Remove Subnetwork** + +To remove a subnetwork from the existing file + +1. Navigate to the **Communication** editor +2. Click on **Subnetwork** you want to configure +3. Click in the **delete** button + +> NOTE: Not only the subnetwork but also all its children will be removed diff --git a/packages/open-scd/public/md/Subscribe-complete-GOOSE.md b/packages/open-scd/public/md/Subscribe-complete-GOOSE.md new file mode 100644 index 0000000000..66dab1202c --- /dev/null +++ b/packages/open-scd/public/md/Subscribe-complete-GOOSE.md @@ -0,0 +1,27 @@ +This editor plugin _Subscriber (GOOSE)_ allows to connect a complete GOOSE message to a subscriber IED. This means in detail that the plugin connects all the data within a GOOSE - the so-called `FCDA` - to a sink IED. + +> NOTE: For detail explanation what happens under the hood to the SCL file see [subscriber basics](https://github.com/openscd/open-scd/wiki/Subscriber-basics) + +There are two different views that allow you to work in your preferred way. + +**Show subscriber IED per selected GOOSE** + +This view shows all GOOSE control blocks per IED on the left hand side and on the right hand side shows all IEDs that are either fully subscribed, partially subscribed or not subscribed to the selected GOOSE control block. +![grafik](https://user-images.githubusercontent.com/66802940/182098255-5e953de6-e9f0-4ea3-b823-fe33304c0167.png) + +1. To subscribed to a not yet subscribed IED navigate to the _Available to subscribe_ list an click on the IED you want to subscribe to. +2. To unsubscribe to a already subscribed IED navigate to the _Subscribed_ list and click in the IED you want to un-subscribe +3. To fully subscribe a partially subscribed IED navigate to the _Partially subscribed_ list and click on the IED you want to fully subscribe to. + > NOTE: If a IED is partially subscribed this might be on purpose because a vendor of an IED maybe only be capable of working with partially subscribed information. Before you change it make sure this does not lead to export/import issues in a later process step. +4. To un-subscribe a partially subscribed IED you need to first make it fully subscribed (3) and then un-subscribe again (1) + +**Show subscribed GOOSE publisher for selected IED** + +This view shows all IEDs in the project on the left hand side and on the right hand side all GOOSE publishers that are either fully subscribed, partially subscribed or not subscribed to the selected IED. +![grafik](https://user-images.githubusercontent.com/66802940/182098679-4cd28ff6-09ba-42a3-a810-c8d7012b038b.png) + +1. To subscribed to a not yet subscribed GOOSE navigate to the _Available to subscribe_ list an click on the GOOSE you want to subscribe to the selected sink IED. +2. To un-subscribe to a already subscribed GOOSE navigate to the _Subscribed_ list and click in the GOOSE you want to un-subscribe from the selected sink IED +3. To fully subscribe a partially subscribed GOOSE navigate to the _Partially subscribed_ list and click on the GOOSE you want to fully subscribe to in the selected sink IED. + > NOTE: If a GOOSE is partially subscribed to an IED this might be on purpose because a vendor of an IED maybe only be capable of working with partially subscribed information. Before you change it make sure this does not lead to export/import issues in a later process step. +4. To un-subscribe a partially subscribed GOOSE you need to first make it fully subscribed (3) and then un-subscribe again (1) diff --git a/packages/open-scd/public/md/Subscribe-complete-SMV.md b/packages/open-scd/public/md/Subscribe-complete-SMV.md new file mode 100644 index 0000000000..45aceea026 --- /dev/null +++ b/packages/open-scd/public/md/Subscribe-complete-SMV.md @@ -0,0 +1,27 @@ +This editor plugin _Subscriber (SMV)_ allows to connect a complete sampled value message to a subscriber IED. This means in detail that the plugin connects all the data within a sampled value control block - the so-called `FCDA` - to a sink IED. + +> NOTE: For detail explanation what happens under the hood to the SCL file see [subscriber basics](https://github.com/openscd/open-scd/wiki/Subscriber-basics) + +There are two different views that allow you to work in your preferred way. + +**Show subscriber IED per selected Sampled Value** + +This view shows all sampled value control blocks per IED on the left hand side and on the right hand side shows all IEDs that are either fully subscribed, partially subscribed or not subscribed to the selected sampled value control block. +![grafik](https://user-images.githubusercontent.com/66802940/182143252-c1ee2c48-0453-463c-b14b-b47d2e482544.png) + +1. To subscribed to a not yet subscribed IED navigate to the _Available to subscribe_ list an click on the IED you want to subscribe to. +2. To unsubscribe to a already subscribed IED navigate to the _Subscribed_ list and click in the IED you want to un-subscribe +3. To fully subscribe a partially subscribed IED navigate to the _Partially subscribed_ list and click on the IED you want to fully subscribe to. + > NOTE: If a IED is partially subscribed this might be on purpose because a vendor of an IED maybe only be capable of working with partially subscribed information. Before you change it make sure this does not lead to export/import issues in a later process step. +4. To un-subscribe a partially subscribed IED you need to first make it fully subscribed (3) and then un-subscribe again (1) + +**Show subscribed Sampled Value(s) publisher for selected IED** + +This view shows all IEDs in the project on the left hand side and on the right hand side all sampled value publishers that are either fully subscribed, partially subscribed or not subscribed to the selected IED. +![grafik](https://user-images.githubusercontent.com/66802940/182143377-c4c0cd72-d8ab-4bac-a654-1058e791a624.png) + +1. To subscribed to a not yet subscribed sampled value control block navigate to the _Available to subscribe_ list an click on the sampled value control block you want to subscribe to the selected sink IED. +2. To un-subscribe to a already subscribed sampled value control block navigate to the _Subscribed_ list and click in the sampled value control block you want to un-subscribe from the selected sink IED +3. To fully subscribe a partially subscribed sampled value control block navigate to the _Partially subscribed_ list and click on the sampled value control block you want to fully subscribe to in the selected sink IED. + > NOTE: If a sampled value control block is partially subscribed to an IED this might be on purpose because a vendor of an IED maybe only be capable of working with partially subscribed information. Before you change it make sure this does not lead to export/import issues in a later process step. +4. To un-subscribe a partially subscribed sampled value control block you need to first make it fully subscribed (3) and then un-subscribe again (1) diff --git a/packages/open-scd/public/md/Subscriber-basics.md b/packages/open-scd/public/md/Subscriber-basics.md new file mode 100644 index 0000000000..c423845e59 --- /dev/null +++ b/packages/open-scd/public/md/Subscriber-basics.md @@ -0,0 +1,164 @@ +The process step in the system configuration that is called `subscribing` does allow to connect data of an sending IED to inputs of an receiving IED. The sending data can either be stored in a control block - `ReportControl`, `GSEControl` or `SampledValueControl`, respectively or can be a reference to some data within the data model of the sending IED - for polling. The receiving IEDs input is modelled with the SCL element `ExtRef`. What we call subscription becomes nothing more than updating/creating `ExtRef` element in the receiving IED. The connection between the sending data and receiving input is made with the several attributes within the `ExtRef` element: + +- `iedName`: the name of the sending IED +- `ldName`: the name of the logical device the sending data resides in +- `prefix`: the prefix of the logical node the sending data receives in +- `lnClass`: the class of the logical node the sending data resides in +- `lnInst`: the instance if the logical node the sending data resides in +- `doName`: the path through the structure of data objects names the data resides in (e.g. `Pos` or `A.phsA` for a structured data object) +- `daName`: the path through the structure of the data attribute names the data resides in (e.g. `stVal` for simple type of `cVal.mag.f` for complex types) + +For a connection to send data with `Report`, `GOOSE` or `SMV` (Sampled Values) and for projects Ed2 and higher some more attributes can be written: + +- `srcLDInst`: the instance of the logical the sending control block resides in +- `srcPrefix`: the prefix of the logical node the sending control bloc resides in +- `srcLNClass`: the class of the logical node the sending control block resides in +- `srcLNInst`: the instance of the logical node the sending control block resides in +- `srcCBName`: the name of the sending control block carrying the information +- `serviceType`: either `GOOSE`, `Report` or `SMV` depending on the service sending the data + +> NOTE: Reports are rarely connected to receiving IED using the subscription process. OpenSCD does only support to subscribe `GOOSE` and `SMV` for the time being + +OpenSCD will over three type of basic subscription plugins for `GOOSE` and three for `SMV`. They differ in the way/how(many) `ExtRef`s are created/updated. + +**Connecting the complete GOOSE/SMV** + +> NOTE: See [subscribe to GOOSE](https://github.com/openscd/open-scd/wiki/Subscribe-complete-GOOSE) or [subscribe to sampled value stream](https://github.com/openscd/open-scd/wiki/Subscribe-complete-SMV) to see how to do this with OpenSCD + +In this case OpenSCD writes for every data point the `GOOSE`/`SMV` is carrying one `ExtRef` in the receiving IED. It does this in the first logical device in the logical node `LN0`. Let's see an example for `GOOSE` further down. There are two `ExtRef` each for one of the `FCDA` element in the `DataSet` connected to the GOOSE control block or `GSEControl`. `FCDA` share the date that defines the reference to the data point in the data model: `ldInst`, `prefix`, `lnClass`, `lnInst`, `doName`, `daName`. In addition the sending IED name is written to `ExtRef`. The rest of the attributes are identifying the control block the `FCDA`s are connected with/are carried by. + +> NOTE: The fact that both the `FCDA` are connected is a matter of choice and must not necessary be done as well as the fact that the `ExtRef` are allocated to the first logical node `LN0` in the receiving IED. This is what differentiates this type of connection to the others further down below. + +```xml + + + + + + + + + + + ... + + + ... + + + + +... + + + + + + ... + + + + + + ... + + + + +``` + +**Connecting the single data from GOOSE/SMV** + +> NOTE: Not implemented yet in OpenSCD! + +In this case OpenSCD writes for the _selected_ data point in a `GOOSE`/`SMV` control block one `ExtRef` in the receiving IED. The location of the `ExtRef` can be selected by the user and can be any logical node in the server. Let's see an example for `GOOSE` further down. + +There is only one`ExtRef` representing the connection to the selected `FCDA` element in the `DataSet` connected to the GOOSE control block or `GSEControl`. `FCDA` share the date that defines the reference to the data point in the data model: `ldInst`, `prefix`, `lnClass`, `lnInst`, `doName`, `daName`. The allocation to the logical node is done by the user and allows to better sort in the project. + +> NOTE: The connection of single `FCDA` element and the free choice fo the allocation of the `ExtRef` in the receiving IED differentiates this method from the other two. + +```xml + + + + + + + + + + + ... + + + ... + + + + +... + + + + + ... + + ... + + + + + ... + + + + +``` + +**Connecting on later binding type inputs** + +> NOTE: Not implemented yet in OpenSCD! + +Later binding is a concept that allows to predefine `ExtRef` elements in the IED configuration Tool (ICT) prior to system configuration. You can see, if a `ExtRef` is predefined by the attribute `intAddr`. This is a string set by the ICT to identify which internal function is using this specific input. This means that the OpenSCD does not create a new `ExtRef` element but updates existing ones. + +Let's see an example for `GOOSE` further down. There is only one`ExtRef` representing the connection to the selected `FCDA` element in the `DataSet` connected to the GOOSE control block or `GSEControl`. `FCDA` share the date that defines the reference to the data point in the data model: `ldInst`, `prefix`, `lnClass`, `lnInst`, `doName`, `daName`. The `intAddr` is already predefined and must not be altered nor can OpenSCD delete such an `ExtRef` + +> NOTE: The connection of single `FCDA` element to an existing `ExtRef` with `instAddr` set makes this type of plugin unique compared to the others. + +```xml + + + + + + + + + + + ... + + + ... + + + + +... + + + + + ... + + ... + + + + + ... + + + + +``` diff --git a/packages/open-scd/public/md/Substation-Section-Basics.md b/packages/open-scd/public/md/Substation-Section-Basics.md new file mode 100644 index 0000000000..d1a771310c --- /dev/null +++ b/packages/open-scd/public/md/Substation-Section-Basics.md @@ -0,0 +1,19 @@ +The so-called substation section does have two variants of element. The first one we will refer to as process type elements or process structure that allow to create the physically visible structure in the substation. This process structure consists of the elements: + +- [Substation](https://github.com/openscd/open-scd/wiki/Substation) +- [Voltage Level](https://github.com/openscd/open-scd/wiki/Voltage-Level) +- [Bay](https://github.com/openscd/open-scd/wiki/Bay) +- [Conducting Equipment](https://github.com/openscd/open-scd/wiki/Conducting-Equipment) +- `General Equipment` (not yet implemented) +- [Conducting Equipment](https://github.com/openscd/open-scd/wiki/Power-Transformer) +- `Transformer Winding` (not yet implemented) +- `Neutral Winding` (not yet implemented) +- `Line` (not yet implemented) +- `Process` (not yet implemented) + +the other type of elements we call function type elements or functional structure that consist of the following elements: + +- [Function](https://github.com/openscd/open-scd/wiki/Function) +- [SubFunction](https://github.com/openscd/open-scd/wiki/Function) +- [EqFunction](https://github.com/openscd/open-scd/wiki/Function) +- [EqSubFunction](https://github.com/openscd/open-scd/wiki/Function) diff --git a/packages/open-scd/public/md/Substation.md b/packages/open-scd/public/md/Substation.md new file mode 100644 index 0000000000..07e049bbcb --- /dev/null +++ b/packages/open-scd/public/md/Substation.md @@ -0,0 +1,40 @@ +**Create Substation** + +grafik + +To create a new `Substation` element within the SCL root element + +- Navigate to the **Substation** editor +- Click on the **Add mode** button on the upper right of the editor pane +- Fill in all required value +- Chose if the [substation structure shall be created automatically](https://github.com/openscd/open-scd/wiki/Guess-substation-structure) +- Click on **Add** + +The create wizard allows to set + +- `name`: unique identified of the substation in the SCL root element +- `desc`: human readable description + +**Edit Substation** + +grafik + +To edit a `Substation` element: + +- Navigate to the **Substation** editor +- Select the **Substation** you want to edit +- Click on the **edit** button +- Make the changes and click **Save** + +The element `Substation` has two attributes + +- `name`: unique identified of the substation in the SCL root element +- `desc`: human readable description + +**Remove Substation** + +To remove an existing `Substation` element within the SCL root element + +- Navigate to the **Substation** editor +- Select the **Substation** you want to remove +- Click on the **delete** button diff --git a/packages/open-scd/public/md/Update-subscriber-info.md b/packages/open-scd/public/md/Update-subscriber-info.md new file mode 100644 index 0000000000..ddcf7f7335 --- /dev/null +++ b/packages/open-scd/public/md/Update-subscriber-info.md @@ -0,0 +1,36 @@ +A `GOOSE` and `Sampled Value` is a service defined in `IEC 61850-8-1`, `IED 61850-9-2`, respectively. This services can be configured in a SCL file. Both the sending end and the receiving end can be configured - publisher/subscriber. + +## Send end configuration +Sending end configuration means creating a GOOSE control block `GSEControl` and connect this to a `DataSet` with the attribute `datSet`. +The `DataSet` contains all the data (functional constrained data attributes `FCDA`) send with the GOOSE. + + +## Receiving end +The receiving end - or subscriber - is defined with the SCL elements `ExtRef` (external reference) and `IEDName`. + +#### 1) `IEDName` +The `IEDName` element is located in the publisher `IED` and contains a reference to the subscriber `IED`(s). It is optional and that is why not all tools have implemented it. + +#### 2) `ExtRef` +The element `ExtRef` is located in the subscriber IED and is containing the reference to the data attribute that is used (subscriber). + +> NOTE: With Edition 2 attributes have been introduced to `ExtRef` element to identify the control block that is carrying the information. Before that this information had to be parsed form the publisher IED. + + +This what the function **Update subscriber** is designed for. With this feature you can add the missing `IEDName` elements into an SCL file. To use this feature follow the procedure +1. Open the project you want to update +2. Navigate to Menu -> **Update subscriber info** +3. Check the log to see how many `IEDName` element(s) are added to the project. + + +The algorithm works as follows: +1. Get `ExtRef` +2. Find connected `FCDA` +3. Find the control block that is connected to the `DataSet` of the `FCDA` +4. See if the `IEDName` information is in the control block +5. If not add them + + +> NOTE: Edition 1 only allowed to add the IED name to the element `IEDName`. With Edition 2 and higher you can also add the path until logical node level. + + diff --git a/packages/open-scd/public/md/Validate-schema.md b/packages/open-scd/public/md/Validate-schema.md new file mode 100644 index 0000000000..495fced7c4 --- /dev/null +++ b/packages/open-scd/public/md/Validate-schema.md @@ -0,0 +1,5 @@ +Schema validation is the most important validation tool. It is crucial to make sure that there are no schema related issues latest on saving the project, as the schema defines the SCL structure it therefore ensures interoperability and should be a minimal requirement. + +Under the hood we are using the industry standard to do schema validation [libxml2](https://en.wikipedia.org/wiki/Libxml2). The external library can be used by other web based tools as well. We have create another repository [xmlvalidate.js](https://github.com/openscd/xmlvalidate.js) that allows you to use the schema validation. + +The results/issues are show in the **diagnostics** pane and als important when there are no issues and the schema validation is successful. This at the end what you want to see :). \ No newline at end of file diff --git a/packages/open-scd/public/md/Validate-template.md b/packages/open-scd/public/md/Validate-template.md new file mode 100644 index 0000000000..de87d0ad8a --- /dev/null +++ b/packages/open-scd/public/md/Validate-template.md @@ -0,0 +1,27 @@ +The templates validator can find issues that the schema validator cannot, because the issues are not connected to the schema defined in IEC 61850-6 but with other parts of the standard: IEC 61850-7-3/IEC 61850-7-4/IEC 61850-8-1. + +> NOTE: OpenSCD is using name space description (NSD) files as a reference (how it should be). These files are provided by the standard but not for all Editions. That is why we only validate the `DataTypeTemplate` section for projects 2007B3 and higher (Edition 2.1). + + + +The validator is triggered on every change in the project basis and the results are displayed in the **diagnostics** pane like so: + +![grafik](https://user-images.githubusercontent.com/66802940/133213707-80789ca7-b23f-467e-9142-711e54ffe70c.png) + + +There rules we have implemented so far cover the following issues: + +- Mandatory `DO` is missing in `LNodeType` +- Mandatory `DA` is missing in the `DOType` +- Mandatory `SDO` is missing in the `DOType` +- Mandatory `BDA` is missing in the `DAType` +- Missing `DA` needed for control operation depending in ctlModel + - `sbo-with-enhanced-security`: Missing `Oper`, `SBOw` + - `sbo-with-normal-security`: Missing `Oper`, `SBO` + - `direct-with-enhanced-security`: Missing `Oper` + - `direct-with-normal-security`: Missing `Oper` +- Check for correct service data implementation `Oper`, +- Broken reference of `DO` to `DOType` - missing type or invalid type +- Broken reference of `SDO` to `DOType` - missing type or invalid type +- Broken reference of `DA` to `DAType` - missing type or invalid type +- Broken reference of `BDA` to `DAType` - missing type or invalid type diff --git a/packages/open-scd/public/md/Validators.md b/packages/open-scd/public/md/Validators.md new file mode 100644 index 0000000000..c23c43a7fb --- /dev/null +++ b/packages/open-scd/public/md/Validators.md @@ -0,0 +1,7 @@ +Validators are the backbone of this editor. It is very tricky to handle the complexity of an SCL file without it. This is especially true for people just working with SCL files and OpenSCD. In most cases, we try to avoid producing invalid files, but especially in **expert mode**, it is not always possible. + +There are two validation functions implemented at the moment. Both are triggered on opening an project or creating a new project. So every time the project basis change. And all validators are triggered on every editor action. That means every time there are changes in the project basis. All results are displayed in the **diagnostics** pane (Ctrl D) and are group by the validation function + + +1. [Schema validator](https://github.com/openscd/open-scd/wiki/Validate-schema) +2. [Templates validator](https://github.com/openscd/open-scd/wiki/Validate-template) \ No newline at end of file diff --git a/packages/open-scd/public/md/Voltage-Level.md b/packages/open-scd/public/md/Voltage-Level.md new file mode 100644 index 0000000000..b0ce162eb0 --- /dev/null +++ b/packages/open-scd/public/md/Voltage-Level.md @@ -0,0 +1,53 @@ +**Create Voltage Level** + +grafik + +To create a new `VoltageLevel` element within a `Substation` element + +- Navigate to the **Substation** editor +- Select the **Substation** you want to add the voltage level to +- Click on the **Add mode** button on the upper right of the **Substation** pane +- Fill in all required value +- Click on **Add** + +The create wizard allows to set + +- `name`: unique identified of the voltage level in the parent substation +- `desc`: human readable description +- `nomFreq`: nominal frequency of the voltage level e.g. 50Hz/60Hz/16.6hz +- `numPhases`: number of phases +- `Voltage`: the voltage of the voltage level (combination of value and multiplier) + +**Edit Voltage Level** + +grafik + +To edit a `VoltageLevel` element: + +- Navigate to the **Substation** editor +- Select the **VoltageLevel** you want to edit +- Click on the **edit** button +- Make the changes and click **Save** + +The element `VoltageLevel` has four attributes + +- `name`: unique identified of the voltage level in the parent substation +- `desc`: human readable description +- `nomFreq`: nominal frequency of the voltage level e.g. 50Hz/60Hz/16.6hz +- `numPhases`: number of phases + +The setting **Voltage** is editing the element `Voltage` that looks like this + +```xml +110 +``` + +In the wizard you can set the `multiplier` and the value (110). The unit is fixed to `V`. + +**Remove Voltage Level** + +To remove an existing `VoltageLevel` element within the parent `Substation` + +- Navigate to the **Substation** editor +- Select the **Voltage Level** you want to remove +- Click on the **delete** button diff --git a/packages/open-scd/public/md/XML-code-editor.md b/packages/open-scd/public/md/XML-code-editor.md new file mode 100644 index 0000000000..2b6c4e6bf8 --- /dev/null +++ b/packages/open-scd/public/md/XML-code-editor.md @@ -0,0 +1,19 @@ + +With **OpenSCD** elements are manipulated with so-called wizard pages. If such a page has not been created yet for an element you want to manipulate or you just are curious how this element looks like in the XML we have added a **pro mode** that you can select in **Settings** + +alt text + +1. Open **Menu** +2. Click on **Setting** +3. Click on switch **pro mode** + + + +Once this is done you can open any wizard page e.g. **Edit Substation**. You can see a toggle button on the upper right corner. If you click this toggle button the wizard page disappears and the XML code editor appear containing the element in raw XML. + +![grafik](https://user-images.githubusercontent.com/66802940/133257710-ba6a8824-c51c-48f6-8e93-49125332bd28.png) + +> NOTE: This is a feature for experienced users. You can also use this feature to change SCL content. Behind the scenes the element will be exchanged completely with the updated version. Of course you can undo anytime. + + + diff --git a/packages/open-scd/public/md/_Sidebar.md b/packages/open-scd/public/md/_Sidebar.md new file mode 100644 index 0000000000..73bd86e9f7 --- /dev/null +++ b/packages/open-scd/public/md/_Sidebar.md @@ -0,0 +1,113 @@ +## 1. About OpenSCD + +### 1.1 [Install OpenSCD](https://github.com/openscd/open-scd/wiki/Install-OpenSCD) + +### 1.2 [Interface](https://github.com/openscd/open-scd/wiki/Interface) + +## 2. [Project management](https://github.com/openscd/open-scd/wiki/Project-workflow) + +### 2.1 [Import IEDs](https://github.com/openscd/open-scd/wiki/Import-IEDs) + +### 2.2 [Save project](https://github.com/openscd/open-scd/wiki/Save-project) + +## 3. [Validators](https://github.com/openscd/open-scd/wiki/Validators) + +### 3.1 [Validate Templates](https://github.com/openscd/open-scd/wiki/Validate-template) + +### 3.2 [Validate Schema](https://github.com/openscd/open-scd/wiki/Validate-schema) + +## 4. [Global SCL manipulation functionality](https://github.com/openscd/open-scd/wiki/Global-SCL-manipulation) + +### 4.1 [Merge two projects](https://github.com/openscd/open-scd/wiki/Merge-functionality) + +### 4.2 [XML editor](https://github.com/openscd/open-scd/wiki/XML-code-editor) - **pro mode** + +## 5. [Substation section](https://github.com/openscd/open-scd/wiki/Substation-Section-Basics) + +## 5.1 [Substation element](https://github.com/openscd/open-scd/wiki/Substation) + +### 5.1.1 - [Guess substation structure](https://github.com/openscd/open-scd/wiki/Guess-substation-structure) + +## 5.2 [Voltage Level element](https://github.com/openscd/open-scd/wiki/Voltage-Level) + +## 5.3 [Bay element](https://github.com/openscd/open-scd/wiki/Bay) + +## 5.4 [Conducting Equipment element](https://github.com/openscd/open-scd/wiki/Conducting-Equipment) + +## 5.5 [Power Transformer element](https://github.com/openscd/open-scd/wiki/Power-Transformer) + +## 5.6 [Logical Node References (LNode)](https://github.com/openscd/open-scd/wiki/Logical-Node-Reference) + +## 6. [IED section](https://github.com/openscd/open-scd/wiki/IED) + +### 6.1 [Report](https://github.com/openscd/open-scd/wiki/Report-Basics) + +#### 6.1.1 [Create Report Control Blocks](https://github.com/openscd/open-scd/wiki/Create-Report-Control-Blocks) + +#### 6.1.2 [Edit Report Control Blocks](https://github.com/openscd/open-scd/wiki/Edit-Report-Control-Blocks) + +#### 6.1.3 [Connect Report Control Blocks with ClientLN](https://github.com/openscd/open-scd/wiki/ClientLN) + +### 6.2 [GOOSE](https://github.com/openscd/open-scd/wiki/Generic-Substation-Event-Basics) + +#### 6.2.1 [Create GOOSE Control Blocks](https://github.com/openscd/open-scd/wiki/Create-GOOSE-Control-Blocks) + +#### 6.2.2 [Edit GOOSE Control Blocks](https://github.com/openscd/open-scd/wiki/Edit-GOOSE-Control-Blocks) + +### 6.3 [Sampled Values](https://github.com/openscd/open-scd/wiki/Sampled-Values-Basics) + +#### 6.3.1 [Create Sampled Value Control Blocks](https://github.com/openscd/open-scd/wiki/Create-Sampled-Value-Control-Blocks) + +#### 6.3.2 [Edit Sampled Value Control Blocks](https://github.com/openscd/open-scd/wiki/Edit-Sampled-Value-Control-Blocks) + +### 6.4 [Subscribing](https://github.com/openscd/open-scd/wiki/Subscriber-basics) + +### 6.5 [Importing IEDs](https://github.com/openscd/open-scd/wiki/Import-IEDs) + +### 6.6 [Update subscriber info in SCL](https://github.com/openscd/open-scd/wiki/Update-subscriber-info) + +## 7. [Communication section](https://github.com/openscd/open-scd/wiki/Communication-Basics) + +## 7.1 [Configure Subnetwork with OpenSC](https://github.com/openscd/open-scd/wiki/Subnetwork) + +## 8. [DataTypeTemplates](https://github.com/openscd/open-scd/wiki/DataTypeTemplates) + +### 8.1 [Start from template](https://github.com/openscd/open-scd/wiki/Start-from-template) + +#### 8.1.1 [Add LNodeType from template](https://github.com/openscd/open-scd/wiki/Add-LNodeType-from-templates) + +#### 8.1.2 [Add DOType from template](https://github.com/openscd/open-scd/wiki/Add-DOType-from-templates) + +#### 8.1.3 [Add DAType from template](https://github.com/openscd/open-scd/wiki/Add-DAType-from-templates) + +#### 8.1.4 [Add EnumType from template](https://github.com/openscd/open-scd/wiki/Add-EnumType-from-templates) + +### 8.2 [Start from scratch](https://github.com/openscd/open-scd/wiki/Start-from-scratch) + +### 8.3 [Wizard pages in template editor](https://github.com/openscd/open-scd/wiki/All-template-editor-wizards) + +#### 8.3.1 [Enumeration type](https://github.com/openscd/open-scd/wiki/Enumeration-EnumType) + +#### 8.3.2 [Enumeration Value](https://github.com/openscd/open-scd/wiki/Enumeration-EnumVal) + +#### 8.3.3 [Data Attribute type](https://github.com/openscd/open-scd/wiki/Data-attribute-type-DAType) + +#### 8.3.4 [Data attribute BDA](https://github.com/openscd/open-scd/wiki/Data-attribute-type-child-BDA) + +#### 8.3.5 [Data object type ](https://github.com/openscd/open-scd/wiki/Data-object-type-DOType) + +#### 8.3.6 [Data object child DA](https://github.com/openscd/open-scd/wiki/Data-object-type-child-DA) + +#### 8.3.7 [Data object child SDO](https://github.com/openscd/open-scd/wiki/Data-object-type-child-SDO) + +#### 8.3.8 [logical node type](https://github.com/openscd/open-scd/wiki/Logical-node-type-LNodeType) + +#### 8.3.9 [Logical node type child DO](https://github.com/openscd/open-scd/wiki/Logical-node-type-child-DO) + +## 9. [Functional naming](https://github.com/openscd/open-scd/wiki/Functional-Naming-Basics) + +### 9.1 [Manipulate function type elements with OpenSCD](https://github.com/openscd/open-scd/wiki/Function) + +### 9.2 [Create SPECIFICATION IED from function elements](https://github.com/openscd/open-scd/wiki/Create-Specification-IED-from-functions) + +## 10. [Extensions](https://github.com/openscd/open-scd/wiki/Extensions) \ No newline at end of file diff --git a/packages/open-scd/public/monochrome_icon.png b/packages/open-scd/public/monochrome_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b13dc761777b02c97bfa604f1988c72d5d9434e6 GIT binary patch literal 39286 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 literal 0 HcmV?d00001 diff --git a/packages/open-scd/public/mstile-150x150.png b/packages/open-scd/public/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..8dc85d81c29eb2ab543aa80299825c1db68a46f7 GIT binary patch literal 2045 zcmZ`)X;f258hs8lpc0)(+l(;T(<*Z=?k41e0z4FJ|{(sVs7h;bpWe+*69S8SYY0HEr@##O&>pxD^|w3`zETr&fJ z*mwX~hN##H0HC7)VDcvbz@-6zAtmeO*`rXRCD$K3>>vS=!Xr|7L<*NgY9)dYZX<$R zLPQ%0!W1qM)P%$^2=FujJan4Dr6d$#p-62ci(4rDEg%zC*)ul_a#R( zt%d;aK2vayTjyI_65d!jF)kf=Cpu7&zArBgU!JcR5hw6oOpeQrmu8v_d!uJ*1jPUdrx`So|(>a0t$You+Kg&A=zHT(0@*pe1Ec9Bxm8(8=3gIZQAZ5ti! zJyet>8R~Ll7p8R7(;L`RYME_W?y#yy_(sT@8_-&hEfT_Sn{Eo|EwWyr7SWn%WtIqQWh>apd&&lw^fi6h>b! z*j!%rclUQm4|gpXyMA&RGE61=LGE>z9UW|+zIw4=b0c+WcqcpEQT_D>I)~OrJMV-p zryt(d#v@{I`puUMo_0t+s5qhZt&@|x&>US`TlSt~c1t_ezP_&BH6<{ElbKG~W}j+@ z|99PTxQ_2^c9bY9{h(om);yy*+9OAmzBmsa5Hoh{-v^cYV~ZWJ4En$U{rOALzrZiA z#w#uww68=bKg_M(7w+O&G!s61m4eU@IN^uTFTAWQ^l3e1z-WH-y&Qvu*k@PXNGslT)i{-)xBU(S5vR#>YZT4Z-#vx4)#v&l z{-UF_N_eHKJerWJ>n23U8J(U^Nh-EDoCx!S6~3&H5ws5{?s78W+|Z{ZY+wO@D~9)+ zNRsxKJZUdhcUc|!29?+)?Vr0|BYB+)=p@k*XBrcWZhh7%-EOW0axg!>xsR!Pu2@UX zxbefbty+TPup(b{UxZ*4esF`1CH=?Mq8Bp}*iY^S$D*K>NP5)jz-E_4hHuTbgDP@E zsQ2=fiK~whU&E&FTQkP>hxb@T26(M9LZkGp-9FIE@?=e1)s^ngjG&ti2JFlz^Tzfm z^5NI6WV0M={$e_8-0ae!MXzAy*9y$0pLbaILDVFACJM!B&m%E0GMjEy$n~6oT;KU7 zBLenq7%LBleh||Isdj`5W|<){5;L+%Ohm=ld`4ctT@0C^{xfZ6rORxiVW4QXA{6Gt z-1FV?@hZDErEr~R9g;QkJ_PB^h6~Qp7r#HRc(+n}-n?ooVz|+MH-F2pdizJ@PEMcR zVgAD{!P;4>wk^T&nW_nki_8a12m14S0x*Bz*?eId9XS{*2G5ABQ>C8~SG0$WuCOp7 zj6eW3Nxf96jd91%AFq;gmP&Is4?5-yP<_1Os6JKlB_F&{agX41wDD=YXyj}YpMkYB# zHawcS;>~}nk7*TKM9^#3PBL5Nvs2{r!P+^hw{ppRR57AO-EqmNZ>_`2WC{7Dtl)@$ zLQm)@dy~o=nM7R}Y*r?w_`jRv&<}<}{K7!9@~^+glddNJL4Nh-lO7{(s3(Gdl`e0+ zor`3UVz6?(Bm9KsHLwg0?IFe}B>suYx)0%}rZ{Y(CZ2L-9x-YgcLuP+IOM3YE_U~5 z$Fa@Bd-n=mI=k>=Zh)4_#smHv4NMFilfTt6Ft&|Fw*_dK)OZ+o_RBiBU0ftr fw=?#1?wJF?q#>L(cM|hRvr)XAvu(x6pW=Q4=ppIa literal 0 HcmV?d00001 diff --git a/packages/open-scd/public/mstile-310x150.png b/packages/open-scd/public/mstile-310x150.png new file mode 100644 index 0000000000000000000000000000000000000000..a39cf445d2026879968deba831ec42cc588d6839 GIT binary patch literal 2276 zcmai0X;>3k7A=Rt1;J?r#kO@s6vWZggs32V2(l><*&;2N4#;9aAR!B3RTf)7ac2!^ zM2QKDBm~1|n6L*3B&-1;EGm!?K!g?*Wpye#f9A*Z)Q|hlJ@4FeU%h(Y`zqPR>5PWj zE;RrEH0-gEB904F&9{}PL z0ALBC;wJ$h3=RO(-T+{l1pwMaT9vCAWc1bLteY()z!95p8U?zP?$RCtvYL{yhdPDrG0JHThz|H#d(tNWXSU$S8I>^n^rCkt|rY&yHU{x@#EXsGRK4OcGjG0LO)l|PTH zDY@QIMicRQeS(Y@9{*Ky7{4Tt$2wQSl#X^<6h0Xm?Yu3hfIoZKFwiok=rt?IVRqCO zb=Aexa^1OkX)Q0)T6oEg6&3|KrIJPjp{U+;P@ki6<^i{8&W6^m{bq_cMw7R-U^SyULAyJl>&^nY-Rf47NPFUBG(#B4Qo>rJR;_F>?w0t;ib$e?a<`1xj@xgk8JQoA2{fyJ#=-JQ4c_YVz zFGgRGDwq~|PQfcSm3YGHp2d3Ia@vcS-^PoaAE6hL1K-FczgTn@-$1N6V9&fjr^-h2 zs83>Tr2%<(ccU1Z=l!x`d3TH2t5mbsD@*PfG5&)_&lbmLqUl)Bc?Vlwm`;7-x{w_> zl%C!h8c>7|$Acb7?oqk?U^*myl|3Id8-f_n3kVm>?sHpfaq z+8{!sBAmTob9?@1H_*@K@t?ShHtb!}-IKw>Y>7>$igIm0*VZ=qI3I0pFWW|CVJaqi z=cg=rHv0Ri$8T5^g)v@ab{ZcbC!d|IwfnL}&&_3XZU9ic*ue#L91jT$< z3|OSe6C6B29seAM{nB1ZPIe)J2d9Ii%bvQ_jj9T6ZAIpsvpzZ5l?dhs1=&XlY(dwJ z?abNfd23zjiNp!im9Ry_6ePncw2)WDFdx&U8YE2gM1)BxIvnMuc!M$S)E)O<3iZ^k z@jiKaZjtvxJEJCMewpU(fBHjl(w)k-Xw~!g;eEn*#;)lxl(Yw^;DBf1G@e5{x;+#5 zrB6OU@F^EExees0nyTHKSV}$};`Kgm)#lmkGoWfNes5#Rqg7X}#3EiQU0lHY`MsnR zq?Q%g9$U;wFBqTSg9&Tucl~L1I;9S{c<+ZcmWpq7rd+Jnui zlr16PQIYvxmFcDWcC4jT;dcs#IhIv^q$+pjqhU!1#w@b@NKN64#IS1uoa9HjP(Tll z1?ivMT>oz>iT-WfeL~aq(xk62NUKM&^`KnxpW{7~nP23DkOyNeR z$4?xF8=Au5S}Icq{;L2_xD@Cg^}h?SUarvp0pK3(=0QREMCcI71ph!BR)-Qr#OeeR zDSiMDNgJP6-$*)dV9@3)65GpBfXe>Opx7vz9nVm{u)VF5O|g~t@BapSzE~&# literal 0 HcmV?d00001 diff --git a/packages/open-scd/public/mstile-310x310.png b/packages/open-scd/public/mstile-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..d4f8eb44f5df5927031abdef6a8b5c0e5fe70cc4 GIT binary patch literal 4007 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 VC)(s8)7yw`YfC!|)*;XH{|0B&p-2D# literal 0 HcmV?d00001 diff --git a/packages/open-scd/public/mstile-70x70.png b/packages/open-scd/public/mstile-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..0492c400b11cb36cdeb74f43cf7973e0d2166779 GIT binary patch literal 1507 zcmZ{jc{tR09LImgxJGiTsBPlW$~n$m%C0HatrAAI%{imVU`Dgf$yJY19vzk#BKI9b z2O~41IWRMZ5jiSG;|h7CRR+uc(qH?>KF{a-IliCQ`}_Ul`}t;`@p4vzX~O^jP;zx~ z^af+o>YzGWzjEHigo+ zG&{UJKYZg>_t@~@*i`=`Ugyw6-&J~xVQD^zM)^2DES?rxRTe(vz8Dq`x;2zlRr42T zhdW0&l~ufmwubntoH3EWq^uyG#EFbyWwD`D;-huDvmn`ONci`OM7V z{Oqga)ena!`)d0cW@QER5e{d(w^7(dqP669x5srhkBbBjwI%P~57Z6N%`3<~Xi_|2 zQ9{3O~S67ogMub&3@p+=o7uY&H>80Y9$-Rm}Tu&ui5g6E{4uA1DS;n!P`N; z{aXcTsm4Z8rq|4cNh_d0D#YE{F(Yf@_#a>)M|AaclAGS6pe}1Yhc~kX0LXJ!N2E{u z_{Tgf>Xm~=#wnu~J;SKGQ~)VTcUR)-h6rKHw>B@LG>~WCewEpI-WWOVQP}H2=D%fr z`eicbYkS;8Z)UIx6#32S3(5XU7!t{|(YM1UJ1-CwJyX-f%#6PDnk{~Qww2RMbx}vbO-r134ZI*U`-jo8!ZfsharkU)BRHpZ955*ob zxIzMT=;`4}Q|M{FBB+lp5BnURm zg_@}|I+vXwfAB%C+!y=TznxF};<^gyMtN}3cj}YE)=F2uj~(zz(~zP=(ev&{G)?Z!JNhS5Pfe?TA2QJI$fQUq z;!eBf7%zY$4E_lxe_~iL5p5S5g9Za&fv`ZBm|K`2Y<%WGj5i>yr)V0gsII5(o}(eH4tGqoVunfUwfew$qeDF`KI + + + + COPYRIGHT (c) IEC, www.iec.ch/tc57/supportdocuments. This version of this NSD is part of IEC_61850-7-2:2010 Edition 2.1; see the IEC_61850-7-2:2010 Edition 2.1 for full legal notices. In case of any differences between the here-below code and the IEC published content, the here-below definition supersedes the IEC publication; it may contain updates. See history files. The whole document has to be taken into account to have a full description of this code component. + See www.iec.ch/CCv1 for copyright details. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/open-scd/public/xml/IEC_61850-7-3_2007B3.nsd b/packages/open-scd/public/xml/IEC_61850-7-3_2007B3.nsd new file mode 100644 index 0000000000..777a13cf59 --- /dev/null +++ b/packages/open-scd/public/xml/IEC_61850-7-3_2007B3.nsd @@ -0,0 +1,6228 @@ + + + + + COPYRIGHT (c) IEC, www.iec.ch/tc57/supportdocuments. This version of this NSD is part of IEC_61850-7-3:2010 Edition 2.1; see the IEC_61850-7-3:2010 Edition 2.1 for full legal notices. In case of any differences between the here-below code and the IEC published content, the here-below definition supersedes the IEC publication; it may contain updates. See history files. The whole document has to be taken into account to have a full description of this code component. + See www.iec.ch/CCv1 for copyright details. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/open-scd/public/xml/IEC_61850-7-420_2019A4.nsd b/packages/open-scd/public/xml/IEC_61850-7-420_2019A4.nsd new file mode 100644 index 0000000000..b34c2af1f1 --- /dev/null +++ b/packages/open-scd/public/xml/IEC_61850-7-420_2019A4.nsd @@ -0,0 +1,5520 @@ + + + + + COPYRIGHT (c) IEC, www.iec.ch/tc57/supportdocuments. This version of this NSD is part of IEC_61850-7-420:2020 Edition 2.0; see the IEC_61850-7-420:2020 Edition 2.0 for full legal notices. In case of any differences between the here-below code and the IEC published content, the here-below definition supersedes the IEC publication; it may contain updates. See history files. The whole document has to be taken into account to have a full description of this code component. + See www.iec.ch/CCv1 for copyright details. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/open-scd/public/xml/IEC_61850-7-4_2007B3.nsd b/packages/open-scd/public/xml/IEC_61850-7-4_2007B3.nsd new file mode 100644 index 0000000000..aeb56b185e --- /dev/null +++ b/packages/open-scd/public/xml/IEC_61850-7-4_2007B3.nsd @@ -0,0 +1,9926 @@ + + + + + COPYRIGHT (c) IEC, www.iec.ch/tc57/supportdocuments. This version of this NSD is part of IEC_61850-7-4:2007; see the IEC_61850-7-4:2007 for full legal notices. In case of any differences between the here-below code and the IEC published content, the here-below definition supersedes the IEC publication; it may contain updates. See history files. The whole document has to be taken into account to have a full description of this code component. + See www.iec.ch/CCv1 for copyright details. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/open-scd/public/xml/IEC_61850-8-1_2003A2.nsd b/packages/open-scd/public/xml/IEC_61850-8-1_2003A2.nsd new file mode 100644 index 0000000000..d43eeb2ab3 --- /dev/null +++ b/packages/open-scd/public/xml/IEC_61850-8-1_2003A2.nsd @@ -0,0 +1,153 @@ + + + + + + + + COPYRIGHT (c) IEC, 2018. This version of this NSD is part of IEC 61850-8-1:2018; see the IEC 61850-8-1:2018 for full legal notices. In case of any differences between the here-below code and the IEC published content, the here-below code is the valid one; it may contain updates. See history files. The whole document has to be taken into account to have a full description of this code component. +See www.iec.ch/CCv1 for copyright details + + IEC License + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/open-scd/public/xml/templates.scd b/packages/open-scd/public/xml/templates.scd new file mode 100644 index 0000000000..4df107ee34 --- /dev/null +++ b/packages/open-scd/public/xml/templates.scd @@ -0,0 +1,1524 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1000 + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1000 + + + direct-with-enhanced-security + + + + + + + + + + + 6000 + + + direct-with-enhanced-security + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + + + 6000 + + + direct-with-enhanced-security + + + + + + + + + status-only + + + + + + + + + IEC 61850-7-4:2007B4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + 1000 + + + direct-with-enhanced-security + + + + + + + + + + 1000 + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.001 + + + 0 + + + + + 0.01 + + + 0 + + + + + A + + + + + A + + + + + Hz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + on + blocked + test + test/blocked + off + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + status-only + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + y + z + a + f + p + n + µ + m + c + d + + da + h + k + M + G + T + P + E + Z + Y + + + V + A + other + Synchrophasor + + + None + ANSI Extremely Inverse + ANSI Very Inverse + ANSI Normal Inverse + ANSI Moderate Inverse + ANSI Definite Time + Long-Time Extremely Inverse + Long-Time Very Inverse + Long-Time Inverse + IEC Normal Inverse + IEC Very Inverse + IEC Inverse + IEC Extremely Inverse + IEC Short-Time Inverse + IEC Long-Time Inverse + IEC Definite Tim + Reserved + + + unknown + forward + backward + both + + + fundamental + rms + absolute + + + reserved + January + February + March + April + May + June + July + August + September + October + November + December + + + Time + WeekDay + WeekOfYear + DayOfMonth + DayOfYear + + + pulse + persistent + persistent-feedback + + + Hour + Day + Week + Month + Year + + + Va + Vb + Vc + Aa + Ab + Ac + Vab + Vbc + Vca + Vother + Aother + Synchrophasor + + + unknown + forward + backward + + + A + B + C + Synchrophasor + + + normal + high + low + high-high + low-low + + + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + Bq + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + W/m² + J/m² + S/m + K/s + Pa/s + J/kg K + VA + Watts + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + h + min + Ohm/m + percent/s + + + operate-once + operate-many + + + pos-neg-zero + dir-quad-zero + + + unknown + critical + major + minor + warning + + + reserved + Monday + Tuesday + Wednesday + Thursday + Friday + Saturday + Sunday + + + Completed + Cancelled + New adjustments + Under way + + + PhaseA + PhaseB + PhaseAB + PhaseC + PhaseAC + PhaseBC + PhaseABC + None + + + Ready + InProgress + + Successful + WaitingForTrip + TripFromProtection + FaultDisappeared + WaitToComplete + CBclosed + CycleUnsuccessful + Unsuccessful + Aborted + NotReady + + + None + Open + Close-Open + Open-Close-Open + Close-Open-Close-Open + Open-Close-Open-Close-Open + more + + + MS + PER_CYCLE + CYCLE + DAY + WEEK + MONTH + YEAR + EXTERNAL + + + UNSPECIFIED + TRUE_RMS + PEAK_FUNDAMENTAL + RMS_FUNDAMENTAL + MIN + MAX + AVG + SDV + PREDICTION + RATE + P-CLASS + M-CLASS + DIFF + + + TOTAL + PERIOD + SLIDING + + + Unknown + SNTP + PTP + IRIG-B + Substation internal + + + InternalClock + LocalAreaClock + GlobalAreaClock + + + Locked + Unlocked10s + Unlocked100s + Unlocked1000s + UnlockedMoreThan1000s + + + NonDirectional + Forward + Reverse + + + Current + Breaker Status + Both current and breaker status + Other + + + PhaseAtoGround + PhaseBtoGround + PhaseCtoGround + PhaseAtoB + PhaseBtoC + PhaseCtoA + Others + + + At Start Moment + At Trip Moment + Peak Fault Value + + + Low pass + High pass + Bandpass + Bandstop + Deadband + + + Slow time delay + Fast time delay + Fast acting + Very fast acting + Not applicable / Unknown + Other + + + Ok + Warning + Alarm + + + 0.05 + 0.1 + 0.2 + 0.2S + 0.5 + 0.5S + 1 + 3 + 5 + + + 1 + 3 + 5 + 6 + 10 + + + Unknown + Normal Time + Last minute of the day has 61 seconds + Last minute of the day has 59 seconds + + + Positive or Rising + Negative or Falling + Both + Other + + + Dead Line, Dead Bus + Live Line, Dead Bus + Dead Line, Live Bus + Dead Line, Dead Bus OR Live Line, Dead Bus + Dead Line, Dead Bus OR Dead Line, Live Bus + Live Line, Dead Bus OR Dead Line, Live Bus + Dead Line, Dead Bus OR Live Line, Dead Bus OR Dead Line, Live Bus + + + Air + Water + Steam + Oil + Hydrogen + Natural gas + Butane + Propane + Waste gas + Not applicable / Unknown + Other + + + Gaseous + Liquid + Solid + Not applicable / Unknown + Other + + + IEC + EEI + + + P + I + D + PI + PD + ID + PID + + + None + Close + Open + Close and Open + + + Master/Slave + Master/Slave with fixed slave position + Master/Slave with variable slave position + Parallel operation without communication + + + Master + Slave + Independent + + + No Mode predefined + Master + Follower + Power Factor + Negative Reactance + Circulating Current + Circulating Reactive Current (var balancing) + Circulating Reactive Current by equalizing power factor + + + None + Zero Sequence Current + Zero Sequence Voltage + Negative Sequence Voltage + Phase to Phase Voltages + Phase to Ground Voltages + Positive sequence voltage + + + Overwrite existing values + Stop when full or saturated + + + Current + Voltage + Active Power + + + None + Definite Time Delayed Reset + Inverse Reset + + + None + Harmonic2 + Harmonic5 + Harmonic2and5 + WaveformAnalysis + WaveformAnalysisAndHarmonic2 + Other + WaveformAnalysisAndHarmonic5 + WaveformAnalysisAndHarmonic2AndHarmonic5 + + + Off + Without Check + With Current Check + With Breaker Status Check + With Current and Breaker Status Check + Other Checks + + + Stopped + Stopping + Started + Starting + Disabled + + + Clockwise + Counter-Clockwise + Unknown + + + Cold + Warm + Overload + + + SwitchCommand + BreakerClosed + VoltageAndCurrentLevel + + + ExternalSignal + VoltageAndCurrent + ExternalSignal or VoltageAndCurrent + + + Vector + Arithmetic + + + None + Missing valid NumEnt + Missing valid SchdIntv + Missing valid schedule values + Inconsistent values CDC + Missing valid StrTm + Other + + + Not ready + Start Time required + Ready + Running + + + Ended normally + Ended with overshoot + Cancelled: measurement was deviating + Cancelled: loss of communication with dispatch centre + Cancelled: loss of communication with local area network + Cancelled: loss of communication with the local interface + Cancelled: timeout + Cancelled: voluntarily + Cancelled: noisy environments + Cancelled: material failure + Cancelled: new set-point request + Cancelled: improper environment (blockage) + Cancelled: stability time was reached + Cancelled: immobilisation time was reached + Cancelled: equipment was in the wrong mode + Unknown causes + + + Inactive + Stage1 + Stage2 + Stage3 + + + Load Break + Disconnector + Earthing Switch + High Speed Earthing Switch + + + None + Open + Close + Open and Close + + + Automatic-synchronizing + Automatic-paralleling + Manual + Test + + + pressure only + level only + both pressure and level + + + Unknown + P + PR + PX + PXR + TPX + TPY + TPZ + TPE + + + Unused + Blocking + Permissive + Direct + Unblocking + Status + + + Internal + External + Both + + + Single Pole Tripping + Undefined + Three Pole Tripping + + + 3 phase tripping + 1 or 3 phase tripping + specific + 1 phase tripping + + + Not tuned + Tuned + Tuned but not compensated + Umax + Umax but not compensated + Umax but not compensated due to U continous limitation + + + Negative sequence + Zero sequence + Neg-pos sequence + Zero-pos sequence + Phase vector comparison + Others + + + Off + Permanent + Time window + + + Voltage + Voltage and Current + Voltage and Normally Open breaker contact + Voltage and Normally Closed breaker contact + Voltage and Normally Open and Normally Closed breaker contacts + Normally Open breaker contact + Normally Closed breaker contact + Both Normally Open and Normally Closed breaker contacts + + + Off + Operate + Echo + Echo and Operate + + + + diff --git a/packages/open-scd/snowpack.config.mjs b/packages/open-scd/snowpack.config.mjs new file mode 100644 index 0000000000..e6336daa7e --- /dev/null +++ b/packages/open-scd/snowpack.config.mjs @@ -0,0 +1,21 @@ +export default ({ + plugins: ["@snowpack/plugin-typescript"], + packageOptions : { + external: ['@web/dev-server-core','@web/dev-server-esbuild','esbuild','crypto'], + }, + exclude: [ + "**/*.@(spec|test).@(js|mjs)", + "**/test/**/*", + "**/out-tsc/**/*", + "**/.editorconfig", + "**/.eslintrc.cjs", + "**/.git/**/*", + "**/.gitignore", + "**/.idea/**/*", + "**/.travis.yml", + "**/package*", + "**/tsconfig.json", + "**/web-test-runner.config.mjs", + "**/node_modules/**/*" + ], +}); diff --git a/packages/open-scd/src/Editing.ts b/packages/open-scd/src/Editing.ts new file mode 100644 index 0000000000..bc76e103e9 --- /dev/null +++ b/packages/open-scd/src/Editing.ts @@ -0,0 +1,457 @@ +import { property } from 'lit-element'; +import { get } from 'lit-translate'; + +import { + Create, + Delete, + EditorAction, + EditorActionEvent, + getReference, + isCreate, + isDelete, + isMove, + isSimple, + isReplace, + LitElementConstructor, + Mixin, + Move, + newLogEvent, + newValidateEvent, + OpenDocEvent, + SCLTag, + SimpleAction, + Replace, + Update, + isUpdate, +} from './foundation.js'; + +/** Mixin that edits an `XML` `doc`, listening to [[`EditorActionEvent`]]s */ +export type EditingElement = Mixin; + +/** @typeParam TBase - a type extending `LitElement` + * @returns `Base` with an `XMLDocument` property "`doc`" and an event listener + * applying [[`EditorActionEvent`]]s and dispatching [[`LogEvent`]]s. */ +export function Editing(Base: TBase) { + class EditingElement extends Base { + /** The `XMLDocument` to be edited */ + @property({ attribute: false }) + doc: XMLDocument | null = null; + /** The name of the current [[`doc`]] */ + @property({ type: String }) docName = ''; + /** The UUID of the current [[`doc`]] */ + @property({ type: String }) docId = ''; + + private checkCreateValidity(create: Create): boolean { + if (create.checkValidity !== undefined) return create.checkValidity(); + + if ( + !(create.new.element instanceof Element) || + !(create.new.parent instanceof Element) + ) + return true; + + const invalidNaming = + create.new.element.hasAttribute('name') && + Array.from(create.new.parent.children).some( + elm => + elm.tagName === (create.new.element).tagName && + elm.getAttribute('name') === + (create.new.element).getAttribute('name') + ); + + if (invalidNaming) { + this.dispatchEvent( + newLogEvent({ + kind: 'error', + title: get('editing.error.create', { + name: create.new.element.tagName, + }), + message: get('editing.error.nameClash', { + parent: + create.new.parent instanceof HTMLElement + ? create.new.parent.tagName + : 'Document', + child: create.new.element.tagName, + name: create.new.element.getAttribute('name')!, + }), + }) + ); + + return false; + } + + const invalidId = + create.new.element.hasAttribute('id') && + Array.from( + create.new.parent.ownerDocument.querySelectorAll( + 'LNodeType, DOType, DAType, EnumType' + ) + ).some( + elm => + elm.getAttribute('id') === + (create.new.element).getAttribute('id') + ); + + if (invalidId) { + this.dispatchEvent( + newLogEvent({ + kind: 'error', + title: get('editing.error.create', { + name: create.new.element.tagName, + }), + message: get('editing.error.idClash', { + id: create.new.element.getAttribute('id')!, + }), + }) + ); + + return false; + } + + return true; + } + + private onCreate(action: Create) { + if (!this.checkCreateValidity(action)) return false; + + if ( + action.new.reference === undefined && + action.new.element instanceof Element && + action.new.parent instanceof Element + ) + action.new.reference = getReference( + action.new.parent, + action.new.element.tagName + ); + else action.new.reference = action.new.reference ?? null; + + action.new.parent.insertBefore(action.new.element, action.new.reference); + return true; + } + + private logCreate(action: Create) { + const name = + action.new.element instanceof Element + ? action.new.element.tagName + : get('editing.node'); + + this.dispatchEvent( + newLogEvent({ + kind: 'action', + title: get('editing.created', { name }), + action, + }) + ); + } + + private onDelete(action: Delete) { + if (!action.old.reference) + action.old.reference = action.old.element.nextSibling; + + if (action.old.element.parentNode !== action.old.parent) return false; + + action.old.parent.removeChild(action.old.element); + return true; + } + + private logDelete(action: Delete) { + const name = + action.old.element instanceof Element + ? action.old.element.tagName + : get('editing.node'); + + this.dispatchEvent( + newLogEvent({ + kind: 'action', + title: get('editing.deleted', { name }), + action, + }) + ); + } + + private checkMoveValidity(move: Move): boolean { + if (move.checkValidity !== undefined) return move.checkValidity(); + + const invalid = + move.old.element.hasAttribute('name') && + move.new.parent !== move.old.parent && + Array.from(move.new.parent.children).some( + elm => + elm.tagName === move.old.element.tagName && + elm.getAttribute('name') === move.old.element.getAttribute('name') + ); + + if (invalid) + this.dispatchEvent( + newLogEvent({ + kind: 'error', + title: get('editing.error.move', { + name: move.old.element.tagName, + }), + message: get('editing.error.nameClash', { + parent: move.new.parent.tagName, + child: move.old.element.tagName, + name: move.old.element.getAttribute('name')!, + }), + }) + ); + + return !invalid; + } + + private onMove(action: Move) { + if (!this.checkMoveValidity(action)) return false; + + if (!action.old.reference) + action.old.reference = action.old.element.nextSibling; + + if (action.new.reference === undefined) + action.new.reference = getReference( + action.new.parent, + action.old.element.tagName + ); + + action.new.parent.insertBefore(action.old.element, action.new.reference); + return true; + } + + private logMove(action: Move) { + this.dispatchEvent( + newLogEvent({ + kind: 'action', + title: get('editing.moved', { + name: action.old.element.tagName, + }), + action: action, + }) + ); + } + + private checkReplaceValidity(replace: Replace): boolean { + if (replace.checkValidity !== undefined) return replace.checkValidity(); + + const invalidNaming = + replace.new.element.hasAttribute('name') && + replace.new.element.getAttribute('name') !== + replace.old.element.getAttribute('name') && + Array.from(replace.old.element.parentElement?.children ?? []).some( + elm => + elm.tagName === replace.new.element.tagName && + elm.getAttribute('name') === + replace.new.element.getAttribute('name') + ); + + if (invalidNaming) { + this.dispatchEvent( + newLogEvent({ + kind: 'error', + title: get('editing.error.update', { + name: replace.new.element.tagName, + }), + message: get('editing.error.nameClash', { + parent: replace.old.element.parentElement!.tagName, + child: replace.new.element.tagName, + name: replace.new.element.getAttribute('name')!, + }), + }) + ); + + return false; + } + + const invalidId = + replace.new.element.hasAttribute('id') && + replace.new.element.getAttribute('id') !== + replace.old.element.getAttribute('id') && + Array.from( + replace.new.element.ownerDocument.querySelectorAll( + 'LNodeType, DOType, DAType, EnumType' + ) + ).some( + elm => + elm.getAttribute('id') === + (replace.new.element).getAttribute('id') + ); + + if (invalidId) { + this.dispatchEvent( + newLogEvent({ + kind: 'error', + title: get('editing.error.update', { + name: replace.new.element.tagName, + }), + message: get('editing.error.idClash', { + id: replace.new.element.getAttribute('id')!, + }), + }) + ); + + return false; + } + + return true; + } + + private onReplace(action: Replace) { + if (!this.checkReplaceValidity(action)) return false; + + action.new.element.append(...Array.from(action.old.element.children)); + action.old.element.replaceWith(action.new.element); + return true; + } + + private logUpdate(action: Replace | Update) { + const name = isReplace(action) + ? action.new.element.tagName + : (action as Update).element.tagName; + + this.dispatchEvent( + newLogEvent({ + kind: 'action', + title: get('editing.updated', { + name, + }), + action: action, + }) + ); + } + + private checkUpdateValidity(update: Update): boolean { + if (update.checkValidity !== undefined) return update.checkValidity(); + + if (update.oldAttributes['name'] !== update.newAttributes['name']) { + const invalidNaming = Array.from( + update.element.parentElement?.children ?? [] + ).some( + elm => + elm.tagName === update.element.tagName && + elm.getAttribute('name') === update.newAttributes['name'] + ); + + if (invalidNaming) { + this.dispatchEvent( + newLogEvent({ + kind: 'error', + title: get('editing.error.update', { + name: update.element.tagName, + }), + message: get('editing.error.nameClash', { + parent: update.element.parentElement!.tagName, + child: update.element.tagName, + name: update.newAttributes['name']!, + }), + }) + ); + + return false; + } + } + + const invalidId = + update.newAttributes['id'] && + Array.from( + update.element.ownerDocument.querySelectorAll( + 'LNodeType, DOType, DAType, EnumType' + ) + ).some(elm => elm.getAttribute('id') === update.newAttributes['id']); + + if (invalidId) { + this.dispatchEvent( + newLogEvent({ + kind: 'error', + title: get('editing.error.update', { + name: update.element.tagName, + }), + message: get('editing.error.idClash', { + id: update.newAttributes['id']!, + }), + }) + ); + + return false; + } + + return true; + } + + private onUpdate(action: Update) { + if (!this.checkUpdateValidity(action)) return false; + + Array.from(action.element.attributes).forEach(attr => + action.element.removeAttributeNode(attr) + ); + + Object.entries(action.newAttributes).forEach(([key, value]) => { + if (value !== null && value !== undefined) + action.element.setAttribute(key, value); + }); + + return true; + } + + private onSimpleAction(action: SimpleAction) { + if (isMove(action)) return this.onMove(action as Move); + else if (isCreate(action)) return this.onCreate(action as Create); + else if (isDelete(action)) return this.onDelete(action as Delete); + else if (isReplace(action)) return this.onReplace(action as Replace); + else if (isUpdate(action)) return this.onUpdate(action as Update); + } + + private logSimpleAction(action: SimpleAction) { + if (isMove(action)) this.logMove(action as Move); + else if (isCreate(action)) this.logCreate(action as Create); + else if (isDelete(action)) this.logDelete(action as Delete); + else if (isReplace(action)) this.logUpdate(action as Replace); + else if (isUpdate(action)) this.logUpdate(action as Update); + } + + private async onAction(event: EditorActionEvent) { + if (isSimple(event.detail.action)) { + if (this.onSimpleAction(event.detail.action)) + this.logSimpleAction(event.detail.action); + } else if (event.detail.action.actions.length > 0) { + event.detail.action.actions.forEach(element => + this.onSimpleAction(element) + ); + this.dispatchEvent( + newLogEvent({ + kind: 'action', + title: event.detail.action.title, + action: event.detail.action, + }) + ); + } else return; + + if (!this.doc) return; + + await this.updateComplete; + this.dispatchEvent(newValidateEvent()); + } + + private async onOpenDoc(event: OpenDocEvent) { + this.doc = event.detail.doc; + this.docName = event.detail.docName; + this.docId = event.detail.docId ?? ''; + + await this.updateComplete; + + this.dispatchEvent(newValidateEvent()); + + this.dispatchEvent( + newLogEvent({ + kind: 'info', + title: get('openSCD.loaded', { name: this.docName }), + }) + ); + } + + constructor(...args: any[]) { + super(...args); + + this.addEventListener('editor-action', this.onAction); + this.addEventListener('open-doc', this.onOpenDoc); + } + } + + return EditingElement; +} diff --git a/packages/open-scd/src/Historing.ts b/packages/open-scd/src/Historing.ts new file mode 100644 index 0000000000..5b0ef07f2b --- /dev/null +++ b/packages/open-scd/src/Historing.ts @@ -0,0 +1,525 @@ +import { + html, + internalProperty, + property, + query, + TemplateResult, +} from 'lit-element'; +import { ifDefined } from 'lit-html/directives/if-defined'; +import { get, translate } from 'lit-translate'; + +import '@material/mwc-button'; +import '@material/mwc-dialog'; +import '@material/mwc-icon'; +import '@material/mwc-icon-button'; +import '@material/mwc-icon-button-toggle'; +import '@material/mwc-list'; +import '@material/mwc-list/mwc-list-item'; +import '@material/mwc-snackbar'; +import { Dialog } from '@material/mwc-dialog'; +import { Snackbar } from '@material/mwc-snackbar'; + +import './filtered-list.js'; +import { + CommitDetail, + CommitEntry, + ifImplemented, + InfoDetail, + InfoEntry, + invert, + IssueDetail, + IssueEvent, + LitElementConstructor, + LogEntry, + LogEntryType, + LogEvent, + Mixin, + newActionEvent, +} from './foundation.js'; +import { getFilterIcon, iconColors } from './icons/icons.js'; +import { Plugin } from './Plugging.js'; + +const icons = { + info: 'info', + warning: 'warning', + error: 'report', +}; + +function getPluginName(src: string): string { + const plugin = ( + JSON.parse(localStorage.getItem('plugins') ?? '[]').find( + (p: Plugin) => p.src === src + ) + ); + if (!plugin) return src; + + const name = plugin.name; + return name || src; +} + +/** + * A mixin adding a `history` property to any `LitElement`, in which + * incoming [[`LogEvent`]]s are logged. + * + * For [[`EditorAction`]] entries, also sets `editCount` to the index of + * the committed action, allowing the user to go to `previousAction` with + * `undo()` if `canUndo` and to go to `nextAction` with `redo()` if `canRedo`. + * + * Renders the `history` to `logUI` and the latest `'error'` [[`LogEntry`]] to + * `messageUI`. + */ +export type HistoringElement = Mixin; + +export function Historing(Base: TBase) { + class HistoringElement extends Base { + /** All [[`LogEntry`]]s received so far through [[`LogEvent`]]s. */ + @property({ type: Array }) + log: InfoEntry[] = []; + + /** All [[`CommitEntry`]]s received so far through [[`LogEvent`]]s */ + @property({ type: Array }) + history: CommitEntry[] = []; + + /** Index of the last [[`EditorAction`]] applied. */ + @property({ type: Number }) + editCount = -1; + @property() + diagnoses = new Map(); + @internalProperty() + latestIssue!: IssueDetail; + + @query('#log') logUI!: Dialog; + @query('#history') historyUI!: Dialog; + @query('#diagnostic') diagnosticUI!: Dialog; + @query('#error') errorUI!: Snackbar; + @query('#warning') warningUI!: Snackbar; + @query('#info') infoUI!: Snackbar; + @query('#issue') issueUI!: Snackbar; + + get canUndo(): boolean { + return this.editCount >= 0; + } + get canRedo(): boolean { + return this.nextAction >= 0; + } + + get previousAction(): number { + if (!this.canUndo) return -1; + return this.history + .slice(0, this.editCount) + .map(entry => (entry.kind == 'action' ? true : false)) + .lastIndexOf(true); + } + get nextAction(): number { + let index = this.history + .slice(this.editCount + 1) + .findIndex(entry => entry.kind == 'action'); + if (index >= 0) index += this.editCount + 1; + return index; + } + + private onIssue(de: IssueEvent): void { + const issues = this.diagnoses.get(de.detail.validatorId); + + if (!issues) this.diagnoses.set(de.detail.validatorId, [de.detail]); + else issues?.push(de.detail); + + this.latestIssue = de.detail; + this.issueUI.close(); + this.issueUI.show(); + } + + undo(): boolean { + if (!this.canUndo) return false; + this.dispatchEvent( + newActionEvent( + invert((this.history[this.editCount]).action) + ) + ); + this.editCount = this.previousAction; + return true; + } + redo(): boolean { + if (!this.canRedo) return false; + this.dispatchEvent( + newActionEvent((this.history[this.nextAction]).action) + ); + this.editCount = this.nextAction; + return true; + } + + private onHistory(detail: CommitDetail) { + const entry: CommitEntry = { + time: new Date(), + ...detail, + }; + + if (entry.kind === 'action') { + if (entry.action.derived) return; + entry.action.derived = true; + if (this.nextAction !== -1) this.history.splice(this.nextAction); + this.editCount = this.history.length; + } + + this.history.push(entry); + this.requestUpdate('history', []); + } + + private onReset() { + this.log = []; + this.history = []; + this.editCount = -1; + } + + private onInfo(detail: InfoDetail) { + const entry: InfoEntry = { + time: new Date(), + ...detail, + }; + + this.log.push(entry); + if (!this.logUI.open) { + const ui = { + error: this.errorUI, + warning: this.warningUI, + info: this.infoUI, + }[detail.kind]; + + ui.close(); + ui.show(); + } + if (detail.kind == 'error') { + this.errorUI.close(); // hack to reset timeout + this.errorUI.show(); + } + this.requestUpdate('log', []); + } + + private onLog(le: LogEvent): void { + switch (le.detail.kind) { + case 'reset': + this.onReset(); + break; + case 'action': + this.onHistory(le.detail); + break; + default: + this.onInfo(le.detail); + break; + } + } + + async performUpdate() { + await new Promise(resolve => + requestAnimationFrame(() => resolve()) + ); + super.performUpdate(); + } + + constructor(...args: any[]) { + super(...args); + + this.undo = this.undo.bind(this); + this.redo = this.redo.bind(this); + this.onLog = this.onLog.bind(this); + + this.addEventListener('log', this.onLog); + this.addEventListener('issue', this.onIssue); + } + + renderLogEntry( + entry: InfoEntry, + index: number, + log: LogEntry[] + ): TemplateResult { + return html` + + + + ${entry.time?.toLocaleString()} + ${entry.title} + ${entry.message} + ${icons[entry.kind]} + `; + } + + renderHistoryEntry( + entry: CommitEntry, + index: number, + history: LogEntry[] + ): TemplateResult { + return html` + + + + ${entry.time?.toLocaleString()} + ${entry.title} + ${entry.message} + history + `; + } + + private renderLog(): TemplateResult[] | TemplateResult { + if (this.log.length > 0) + return this.log.slice().reverse().map(this.renderLogEntry, this); + else + return html` + ${translate('log.placeholder')} + info + `; + } + + private renderHistory(): TemplateResult[] | TemplateResult { + if (this.history.length > 0) + return this.history + .slice() + .reverse() + .map(this.renderHistoryEntry, this); + else + return html` + ${translate('history.placeholder')} + info + `; + } + + private renderIssueEntry(issue: IssueDetail): TemplateResult { + return html` + ${issue.title} + ${issue.message} + `; + } + + renderValidatorsIssues(issues: IssueDetail[]): TemplateResult[] { + if (issues.length === 0) return [html``]; + return [ + html`${getPluginName(issues[0].validatorId)}`, + html`
  • `, + ...issues.map(issue => this.renderIssueEntry(issue)), + ]; + } + + private renderIssues(): TemplateResult[] | TemplateResult { + const issueItems: TemplateResult[] = []; + + this.diagnoses.forEach(issues => { + this.renderValidatorsIssues(issues).forEach(issueItem => + issueItems.push(issueItem) + ); + }); + + return issueItems.length + ? issueItems + : html` + ${translate('diag.placeholder')} + info + `; + } + + private renderFilterButtons() { + return (Object.keys(icons)).map( + kind => html`${getFilterIcon(kind, false)} + ${getFilterIcon(kind, true)}` + ); + } + + private renderLogDialog(): TemplateResult { + return html` + ${this.renderFilterButtons()} + ${this.renderLog()} + ${translate('close')} + `; + } + + private renderHistoryDialog(): TemplateResult { + return html` + ${this.renderHistory()} + + + ${translate('close')} + `; + } + + render(): TemplateResult { + return html`${ifImplemented(super.render())} + + ${this.renderLogDialog()} ${this.renderHistoryDialog()} + + ${this.renderIssues()} + ${translate('close')} + + + + + + + this.logUI.show()} + >${translate('log.snackbar.show')} + + + + this.logUI.show()} + >${translate('log.snackbar.show')} + + + + this.diagnosticUI.show()} + >${translate('log.snackbar.show')} + + `; + } + } + + return HistoringElement; +} diff --git a/packages/open-scd/src/Hosting.ts b/packages/open-scd/src/Hosting.ts new file mode 100644 index 0000000000..33701eee00 --- /dev/null +++ b/packages/open-scd/src/Hosting.ts @@ -0,0 +1,355 @@ +import { html, property, query, TemplateResult } from 'lit-element'; +import { translate } from 'lit-translate'; + +import '@material/mwc-drawer'; +import '@material/mwc-icon'; +import '@material/mwc-icon-button'; +import '@material/mwc-linear-progress'; +import '@material/mwc-list'; +import '@material/mwc-list/mwc-list-item'; +import '@material/mwc-tab'; +import '@material/mwc-tab-bar'; +import '@material/mwc-top-app-bar-fixed'; + +import { Drawer } from '@material/mwc-drawer'; +import { ActionDetail, List } from '@material/mwc-list'; +import { ListItem } from '@material/mwc-list/mwc-list-item'; + +import { Mixin, newPendingStateEvent } from './foundation.js'; +import { HistoringElement } from './Historing.js'; +import { Plugin, PluggingElement, pluginIcons } from './Plugging.js'; +import { SettingElement } from './Setting.js'; + +interface MenuItem { + icon: string; + name: string; + hint?: string; + actionItem?: boolean; + action?: (event: CustomEvent) => void; + disabled?: () => boolean; + content?: TemplateResult; + kind: string; +} + +interface Validator { + validate: () => Promise; +} + +interface MenuPlugin { + run: () => Promise; +} + +/** Mixin that hosts the UI for Plugins, Settings and Historing */ +export type HostingElement = Mixin; + +export function Hosting< + TBase extends new (...args: any[]) => PluggingElement & + HistoringElement & + SettingElement +>(Base: TBase) { + class HostingElement extends Base { + /** The currently active editor tab. */ + @property({ type: Number }) + activeTab = 0; + @property({ attribute: false }) + validated: Promise = Promise.resolve(); + + private shouldValidate = false; + + @query('#menu') menuUI!: Drawer; + + get menu(): (MenuItem | 'divider')[] { + const topMenu: (MenuItem | 'divider')[] = []; + const middleMenu: (MenuItem | 'divider')[] = []; + const bottomMenu: (MenuItem | 'divider')[] = []; + const validators: (MenuItem | 'divider')[] = []; + + this.topMenu.forEach(plugin => + topMenu.push({ + icon: plugin.icon || pluginIcons['menu'], + name: plugin.name, + action: ae => { + this.dispatchEvent( + newPendingStateEvent( + (( + (( + (ae.target).items[ae.detail.index].nextElementSibling + )) + )).run() + ) + ); + }, + disabled: (): boolean => plugin.requireDoc! && this.doc === null, + content: plugin.content, + kind: 'top', + }) + ); + + this.middleMenu.forEach(plugin => + middleMenu.push({ + icon: plugin.icon || pluginIcons['menu'], + name: plugin.name, + action: ae => { + this.dispatchEvent( + newPendingStateEvent( + (( + (( + (ae.target).items[ae.detail.index].nextElementSibling + )) + )).run() + ) + ); + }, + disabled: (): boolean => plugin.requireDoc! && this.doc === null, + content: plugin.content, + kind: 'middle', + }) + ); + + this.bottomMenu.forEach(plugin => + bottomMenu.push({ + icon: plugin.icon || pluginIcons['menu'], + name: plugin.name, + action: ae => { + this.dispatchEvent( + newPendingStateEvent( + (( + (( + (ae.target).items[ae.detail.index].nextElementSibling + )) + )).run() + ) + ); + }, + disabled: (): boolean => plugin.requireDoc! && this.doc === null, + content: plugin.content, + kind: 'middle', + }) + ); + + this.validators.forEach(plugin => + validators.push({ + icon: plugin.icon || pluginIcons['validator'], + name: plugin.name, + action: ae => { + if (this.diagnoses.get(plugin.src)) + this.diagnoses.get(plugin.src)!.length = 0; + + this.dispatchEvent( + newPendingStateEvent( + (( + (( + (ae.target).items[ae.detail.index].nextElementSibling + )) + )).validate() + ) + ); + }, + disabled: (): boolean => this.doc === null, + content: plugin.content, + kind: 'validator', + }) + ); + + if (middleMenu.length > 0) middleMenu.push('divider'); + if (bottomMenu.length > 0) bottomMenu.push('divider'); + + return [ + 'divider', + ...topMenu, + 'divider', + { + icon: 'undo', + name: 'undo', + actionItem: true, + action: this.undo, + disabled: (): boolean => !this.canUndo, + kind: 'static', + }, + { + icon: 'redo', + name: 'redo', + actionItem: true, + action: this.redo, + disabled: (): boolean => !this.canRedo, + kind: 'static', + }, + ...validators, + { + icon: 'list', + name: 'menu.viewLog', + actionItem: true, + action: (): void => this.logUI.show(), + kind: 'static', + }, + { + icon: 'history', + name: 'menu.viewHistory', + actionItem: true, + action: (): void => this.historyUI.show(), + kind: 'static', + }, + { + icon: 'rule', + name: 'menu.viewDiag', + actionItem: true, + action: (): void => this.diagnosticUI.show(), + kind: 'static', + }, + 'divider', + ...middleMenu, + { + icon: 'settings', + name: 'settings.title', + action: (): void => this.settingsUI.show(), + kind: 'static', + }, + ...bottomMenu, + { + icon: 'extension', + name: 'plugins.heading', + action: (): void => this.pluginUI.show(), + kind: 'static', + }, + ]; + } + + constructor(...args: any[]) { + super(...args); + + this.addEventListener('validate', async () => { + this.shouldValidate = true; + await this.validated; + + if (!this.shouldValidate) return; + + this.diagnoses.clear(); + this.shouldValidate = false; + + this.validated = Promise.allSettled( + this.menuUI + .querySelector('mwc-list')! + .items.filter(item => item.className === 'validator') + .map(item => + ((item.nextElementSibling)).validate() + ) + ).then(); + this.dispatchEvent(newPendingStateEvent(this.validated)); + }); + this.addEventListener('close-drawer', async () => { + this.menuUI.open = false; + }); + } + + renderMenuItem(me: MenuItem | 'divider'): TemplateResult { + if (me === 'divider') + return html`
  • `; + if (me.actionItem) return html``; + return html` + ${me.icon} + ${translate(me.name)} + ${me.hint + ? html`${me.hint}` + : ''} + + ${me.content ?? ''} + `; + } + + renderActionItem(me: MenuItem | 'divider'): TemplateResult { + if (me !== 'divider' && me.actionItem) + return html``; + else return html``; + } + + renderEditorTab({ name, icon }: Plugin): TemplateResult { + return html` + `; + } + + render(): TemplateResult { + return html` + ${translate('menu.title')} + ${this.docName + ? html`${this.docName}` + : ''} + ) => { + //FIXME: dirty hack to be fixed in open-scd-core + // if clause not necessary when oscd... components in open-scd not list + if (ae.target instanceof List) + (( + this.menu.filter( + item => item !== 'divider' && !item.actionItem + )[ae.detail.index] + ))?.action?.(ae); + }} + > + ${this.menu.map(this.renderMenuItem)} + + + + (this.menuUI.open = true)} + > +
    ${this.docName}
    + ${this.menu.map(this.renderActionItem)} + ${this.doc + ? html` + (this.activeTab = e.detail.index)} + > + ${this.editors.map(this.renderEditorTab)} + ` + : ``} +
    +
    + + ${this.doc && this.editors[this.activeTab]?.content + ? this.editors[this.activeTab].content + : html`
    + ${(this.menu.filter(mi => mi !== 'divider')).map( + (mi: MenuItem, index) => + mi.kind === 'top' && !mi.disabled?.() + ? html` + +
    ${mi.name}
    +
    + ` + : html`` + )} +
    `} + ${super.render()}`; + } + } + return HostingElement; +} diff --git a/packages/open-scd/src/Plugging.ts b/packages/open-scd/src/Plugging.ts new file mode 100644 index 0000000000..781da6cac2 --- /dev/null +++ b/packages/open-scd/src/Plugging.ts @@ -0,0 +1,569 @@ +import { html, query, TemplateResult } from 'lit-element'; +import { classMap } from 'lit-html/directives/class-map'; +import { translate } from 'lit-translate'; + +import '@material/mwc-button'; +import '@material/mwc-dialog'; +import '@material/mwc-formfield'; +import '@material/mwc-icon'; +import '@material/mwc-list'; +import '@material/mwc-list/mwc-check-list-item'; +import '@material/mwc-list/mwc-list-item'; +import '@material/mwc-list/mwc-radio-list-item'; +import '@material/mwc-select'; +import '@material/mwc-switch'; +import '@material/mwc-textfield'; +import { Dialog } from '@material/mwc-dialog'; +import { List } from '@material/mwc-list'; +import { ListItem } from '@material/mwc-list/mwc-list-item'; +import { MultiSelectedEvent } from '@material/mwc-list/mwc-list-foundation'; +import { Select } from '@material/mwc-select'; +import { Switch } from '@material/mwc-switch'; +import { TextField } from '@material/mwc-textfield'; + +import { ifImplemented, Mixin } from './foundation.js'; +import { EditingElement } from './Editing.js'; +import { officialPlugins } from '../public/js/plugins.js'; +import { Nsdoc } from './foundation/nsdoc.js'; +import { HistoringElement } from './Historing.js'; +const pluginTags = new Map(); +/** + * Hashes `uri` using cyrb64 analogous to + * https://github.com/bryc/code/blob/master/jshash/experimental/cyrb53.js . + * @returns a valid customElement tagName containing the URI hash. + */ +function pluginTag(uri: string): string { + if (!pluginTags.has(uri)) { + let h1 = 0xdeadbeef, + h2 = 0x41c6ce57; + for (let i = 0, ch; i < uri.length; i++) { + ch = uri.charCodeAt(i); + h1 = Math.imul(h1 ^ ch, 2654435761); + h2 = Math.imul(h2 ^ ch, 1597334677); + } + h1 = + Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ + Math.imul(h2 ^ (h2 >>> 13), 3266489909); + h2 = + Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ + Math.imul(h1 ^ (h1 >>> 13), 3266489909); + pluginTags.set( + uri, + 'oscd-plugin' + + ((h2 >>> 0).toString(16).padStart(8, '0') + + (h1 >>> 0).toString(16).padStart(8, '0')) + ); + } + return pluginTags.get(uri)!; +} + +/** + * This is a template literal tag function. See: + * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates + * + * Passes its arguments to LitElement's `html` tag after combining the first and + * last expressions with the first two and last two static strings. + * Throws unless the first and last expressions are identical strings. + * + * We need this to get around the expression location limitations documented in + * https://lit.dev/docs/templates/expressions/#expression-locations + * + * After upgrading to Lit 2 we can use their static HTML functions instead: + * https://lit.dev/docs/api/static-html/ + */ +function staticTagHtml( + oldStrings: ReadonlyArray, + ...oldArgs: unknown[] +): TemplateResult { + const args = [...oldArgs]; + const firstArg = args.shift(); + const lastArg = args.pop(); + + if (firstArg !== lastArg) + throw new Error( + `Opening tag <${firstArg}> does not match closing tag .` + ); + + const strings = [...oldStrings] as string[] & { raw: string[] }; + const firstString = strings.shift(); + const secondString = strings.shift(); + + const lastString = strings.pop(); + const penultimateString = strings.pop(); + + strings.unshift(`${firstString}${firstArg}${secondString}`); + strings.push(`${penultimateString}${lastArg}${lastString}`); + + return html(strings, ...args); +} + +type PluginKind = 'editor' | 'menu' | 'validator'; +const menuPosition = ['top', 'middle', 'bottom'] as const; +type MenuPosition = typeof menuPosition[number]; + +export type Plugin = { + name: string; + src: string; + icon?: string; + kind: PluginKind; + requireDoc?: boolean; + position?: MenuPosition; + installed: boolean; + official?: boolean; + content?: TemplateResult; +}; + +type InstalledOfficialPlugin = { + src: string; + official: true; + installed: boolean; +}; + +function withoutContent

    ( + plugin: P +): P { + return { ...plugin, content: undefined }; +} + +function storePlugins(plugins: Array) { + localStorage.setItem('plugins', JSON.stringify(plugins.map(withoutContent))); +} + +export const pluginIcons: Record = { + editor: 'tab', + menu: 'play_circle', + validator: 'rule_folder', + top: 'play_circle', + middle: 'play_circle', + bottom: 'play_circle', +}; + +function resetPlugins(): void { + storePlugins( + officialPlugins.map(plugin => { + return { + src: plugin.src, + installed: plugin.default ?? false, + official: true, + }; + }) + ); +} + +const menuOrder: (PluginKind | MenuPosition)[] = [ + 'editor', + 'top', + 'validator', + 'middle', + 'bottom', +]; + +function menuCompare(a: Plugin, b: Plugin): -1 | 0 | 1 { + if (a.kind === b.kind && a.position === b.position) return 0; + const earlier = menuOrder.find(kind => + [a.kind, b.kind, a.position, b.position].includes(kind) + ); + return [a.kind, a.position].includes(earlier) ? -1 : 1; +} + +function compareNeedsDoc(a: Plugin, b: Plugin): -1 | 0 | 1 { + if (a.requireDoc === b.requireDoc) return 0; + return a.requireDoc ? 1 : -1; +} + +const loadedPlugins = new Set(); + +/** Mixin that manages Plugins in `localStorage` */ +export type PluggingElement = Mixin; + +export function Plugging< + TBase extends new (...args: any[]) => EditingElement & HistoringElement +>(Base: TBase) { + class PluggingElement extends Base { + // DIRTY HACK: will refactored with open-scd-core + nsdoc!: Nsdoc; + + get editors(): Plugin[] { + return this.plugins.filter( + plugin => plugin.installed && plugin.kind === 'editor' + ); + } + get validators(): Plugin[] { + return this.plugins.filter( + plugin => plugin.installed && plugin.kind === 'validator' + ); + } + get menuEntries(): Plugin[] { + return this.plugins.filter( + plugin => plugin.installed && plugin.kind === 'menu' + ); + } + get topMenu(): Plugin[] { + return this.menuEntries.filter(plugin => plugin.position === 'top'); + } + get middleMenu(): Plugin[] { + return this.menuEntries.filter(plugin => plugin.position === 'middle'); + } + get bottomMenu(): Plugin[] { + return this.menuEntries.filter(plugin => plugin.position === 'bottom'); + } + + private get plugins(): Plugin[] { + return this.storedPlugins + .map(plugin => { + if (!plugin.official) return plugin; + const officialPlugin = officialPlugins.find( + needle => needle.src === plugin.src + ); + return { + ...officialPlugin, + ...plugin, + }; + }) + .sort(compareNeedsDoc) + .sort(menuCompare); + } + + private get storedPlugins(): Plugin[] { + return ( + JSON.parse(localStorage.getItem('plugins') ?? '[]', (key, value) => + value.src && value.installed ? this.addContent(value) : value + ) + ); + } + + @query('#pluginManager') + pluginUI!: Dialog; + @query('#pluginList') + pluginList!: List; + @query('#pluginAdd') + pluginDownloadUI!: Dialog; + + private setPlugins(indices: Set) { + const newPlugins = this.plugins.map((plugin, index) => { + return { ...plugin, installed: indices.has(index) }; + }); + storePlugins(newPlugins); + this.requestUpdate(); + } + + private updatePlugins() { + const stored: Plugin[] = this.storedPlugins; + const officialStored = stored.filter(p => p.official); + const newOfficial: Array = + officialPlugins + .filter(p => !officialStored.find(o => o.src === p.src)) + .map(plugin => { + return { + src: plugin.src, + installed: plugin.default ?? false, + official: true as const, + }; + }); + const oldOfficial = officialStored.filter( + p => !officialPlugins.find(o => p.src === o.src) + ); + const newPlugins: Array = stored.filter( + p => !oldOfficial.find(o => p.src === o.src) + ); + newOfficial.map(p => newPlugins.push(p)); + storePlugins(newPlugins); + } + + private addExternalPlugin(plugin: Omit): void { + if (this.storedPlugins.some(p => p.src === plugin.src)) return; + + const newPlugins: Omit[] = this.storedPlugins; + newPlugins.push(plugin); + storePlugins(newPlugins); + } + + private addContent(plugin: Omit): Plugin { + const tag = pluginTag(plugin.src); + if (!loadedPlugins.has(tag)) { + loadedPlugins.add(tag); + import(plugin.src).then(mod => customElements.define(tag, mod.default)); + } + return { + ...plugin, + content: staticTagHtml`<${tag} + .doc=${this.doc} + .docName=${this.docName} + .editCount=${this.editCount} + .docId=${this.docId} + .pluginId=${plugin.src} + .nsdoc=${this.nsdoc} + class="${classMap({ + plugin: true, + menu: plugin.kind === 'menu', + validator: plugin.kind === 'validator', + editor: plugin.kind === 'editor', + })}" + >`, + }; + } + + private handleAddPlugin() { + const pluginSrcInput = ( + this.pluginDownloadUI.querySelector('#pluginSrcInput') + ); + const pluginNameInput = ( + this.pluginDownloadUI.querySelector('#pluginNameInput') + ); + const pluginKindList = ( + this.pluginDownloadUI.querySelector('#pluginKindList') + ); + const requireDoc = ( + this.pluginDownloadUI.querySelector('#requireDoc') + ); + const positionList = + { + const input = ( + this.shadowRoot!.querySelector('#nsdoc-file') + ); + input?.click(); + }} + > + + `; + } + + private async uploadNsdocFile(evt: Event): Promise { + const files = Array.from( + (evt.target)?.files ?? [] + ); + + if (files.length == 0) return; + for (const file of files) { + const text = await file.text(); + this.dispatchEvent(newLoadNsdocEvent(text, file.name)); + } + + this.nsdocFileUI.value = ''; + this.requestUpdate(); + } + + private async onLoadNsdoc(event: LoadNsdocEvent) { + const nsdocElement = this.parseToXmlObject( + event.detail.nsdoc + ).querySelector('NSDoc'); + + const id = nsdocElement?.getAttribute('id'); + if (!id) { + this.dispatchEvent( + newLogEvent({ + kind: 'error', + title: get('settings.invalidFileNoIdFound', { + filename: event.detail.filename, + }), + }) + ); + return; + } + + const nsdVersions = await this.nsdVersions(); + const nsdVersion = nsdVersions[id as keyof NsdVersions]; + const nsdocVersion = { + version: nsdocElement!.getAttribute('version') ?? '', + revision: nsdocElement!.getAttribute('revision') ?? '', + release: nsdocElement!.getAttribute('release') ?? '', + }; + + if (!this.isEqual(nsdVersion, nsdocVersion)) { + this.dispatchEvent( + newLogEvent({ + kind: 'error', + title: get('settings.invalidNsdocVersion', { + id: id, + filename: event.detail.filename, + nsdVersion: `${nsdVersion.version}${nsdVersion.revision}${nsdVersion.release}`, + nsdocVersion: `${nsdocVersion.version}${nsdocVersion.revision}${nsdocVersion.release}`, + }), + }) + ); + return; + } + + this.setSetting(id as keyof Settings, event.detail.nsdoc); + this.nsdoc = initializeNsdoc(); // update nsdoc + } + + /** + * Check the equality of two NsdVersions. + * @param versionA - First version to compare. + * @param versionB - Second version to compare. + * @returns Are they equal or not. + */ + private isEqual(versionA: NsdVersion, versionB: NsdVersion): boolean { + return ( + versionA.version == versionB.version && + versionA.revision == versionB.revision && + versionA.release == versionB.release + ); + } + + /** + * Render one .nsdoc item in the Settings wizard + * @param key - The key of the nsdoc file in the settings. + * @returns a .nsdoc item for the Settings wizard + */ + private renderNsdocItem(key: T): TemplateResult { + const nsdSetting = this.settings[key]; + let nsdVersion: string | undefined | null; + let nsdRevision: string | undefined | null; + let nsdRelease: string | undefined | null; + + if (nsdSetting) { + const nsdoc = this.parseToXmlObject(nsdSetting)!.querySelector('NSDoc'); + nsdVersion = nsdoc?.getAttribute('version'); + nsdRevision = nsdoc?.getAttribute('revision'); + nsdRelease = nsdoc?.getAttribute('release'); + } + + return html` + ${key} + ${nsdSetting + ? html`${nsdVersion}${nsdRevision}${nsdRelease}` + : html``} + ${nsdSetting + ? html`done` + : html`close`} + ${nsdSetting + ? html` { + this.removeSetting(key); + }} + >delete` + : html``} + `; + } + + private parseToXmlObject(text: string): XMLDocument { + return new DOMParser().parseFromString(text, 'application/xml'); + } + + constructor(...params: any[]) { + super(...params); + + registerTranslateConfig({ loader, empty: key => key }); + use(this.settings.language); + + (this).addEventListener('load-nsdoc', this.onLoadNsdoc); + } + + render(): TemplateResult { + return html`${ifImplemented(super.render())} + +

    + + ${Object.keys(languages).map( + lang => + html`${translate(`settings.languages.${lang}`)}` + )} + + + + + + + + + + +
    + +
    +

    ${translate('settings.loadNsdTranslations')}

    + ${this.renderFileSelect()} +
    + + ${this.renderNsdocItem('IEC 61850-7-2')} + ${this.renderNsdocItem('IEC 61850-7-3')} + ${this.renderNsdocItem('IEC 61850-7-4')} + ${this.renderNsdocItem('IEC 61850-8-1')} + + + ${translate('cancel')} + + + ${translate('reset')} + + + ${translate('save')} + + `; + } + } + + return SettingElement; +} diff --git a/packages/open-scd/src/Waiting.ts b/packages/open-scd/src/Waiting.ts new file mode 100644 index 0000000000..912dd0c397 --- /dev/null +++ b/packages/open-scd/src/Waiting.ts @@ -0,0 +1,52 @@ +import { html, property, TemplateResult } from 'lit-element'; + +import '@material/mwc-linear-progress'; + +import { + LitElementConstructor, + Mixin, + PendingStateDetail, + ifImplemented, +} from './foundation.js'; + +/** Mixin implementing + * [Pending State](https://github.com/justinfagnani/pending-state-protocol) */ +export type WaitingElement = Mixin; + +export function Waiting(Base: TBase) { + class WaitingElement extends Base { + /** Whether the element is currently waiting for some async work. */ + @property({ type: Boolean }) + waiting = false; + + private work: Set> = new Set(); + /** A promise which resolves once all currently pending work is done. */ + workDone = Promise.allSettled(this.work); + + private async onPendingState(e: CustomEvent) { + this.waiting = true; + this.work.add(e.detail.promise); + this.workDone = Promise.allSettled(this.work); + await e.detail.promise.catch(reason => console.warn(reason)); + this.work.delete(e.detail.promise); + this.waiting = this.work.size > 0; + } + + constructor(...args: any[]) { + super(...args); + + this.onPendingState = this.onPendingState.bind(this); + this.addEventListener('pending-state', this.onPendingState); + } + + render(): TemplateResult { + return html`${ifImplemented(super.render())} + `; + } + } + + return WaitingElement; +} diff --git a/packages/open-scd/src/WizardDivider.ts b/packages/open-scd/src/WizardDivider.ts new file mode 100644 index 0000000000..bef16841a5 --- /dev/null +++ b/packages/open-scd/src/WizardDivider.ts @@ -0,0 +1,44 @@ +import { + css, + customElement, + html, + LitElement, + property, + TemplateResult, +} from 'lit-element'; + +@customElement('wizard-divider') +export class WizardDividerElement extends LitElement { + @property({ + type: String, + }) + header?: string; + + render(): TemplateResult { + return html` ${this.renderHeader()} ${this.renderSeparator()}`; + } + + private renderHeader(): TemplateResult { + if (!this.header) { + return html``; + } + + return html`

    ${this.header}

    `; + } + + private renderSeparator(): TemplateResult { + return html`
    `; + } + + static styles = css` + div { + height: 0px; + margin: 10px 0px 10px 0px; + border-top: none; + border-right: none; + border-left: none; + border-image: initial; + border-bottom: 1px solid rgba(0, 0, 0, 0.12); + } + `; +} diff --git a/packages/open-scd/src/Wizarding.ts b/packages/open-scd/src/Wizarding.ts new file mode 100644 index 0000000000..85f107a7cb --- /dev/null +++ b/packages/open-scd/src/Wizarding.ts @@ -0,0 +1,56 @@ +import { html, internalProperty, TemplateResult, query } from 'lit-element'; +import { + ifImplemented, + LitElementConstructor, + Mixin, + WizardEvent, + WizardFactory, +} from './foundation.js'; + +import './wizard-dialog.js'; +import { WizardDialog } from './wizard-dialog.js'; + +/** `LitElement` mixin that adds a `workflow` property which [[`Wizard`]]s are + * queued onto on incoming [[`WizardEvent`]]s, first come first displayed. */ +export type WizardingElement = Mixin; + +export function Wizarding(Base: TBase) { + class WizardingElement extends Base { + /** FIFO queue of [[`Wizard`]]s to display. */ + @internalProperty() + workflow: WizardFactory[] = []; + + @query('wizard-dialog') wizardUI!: WizardDialog; + + private onWizard(we: WizardEvent) { + const wizard = we.detail.wizard; + if (wizard === null) this.workflow.shift(); + else if (we.detail.subwizard) this.workflow.unshift(wizard); + else this.workflow.push(wizard); + this.requestUpdate('workflow'); + this.updateComplete.then(() => + this.wizardUI.updateComplete.then(() => + this.wizardUI.dialog?.updateComplete.then(() => + this.wizardUI.dialog?.focus() + ) + ) + ); + } + + constructor(...args: any[]) { + super(...args); + + this.addEventListener('wizard', this.onWizard); + this.addEventListener('editor-action', () => + this.wizardUI.requestUpdate() + ); + } + + render(): TemplateResult { + return html`${ifImplemented(super.render())} + `; + } + } + + return WizardingElement; +} diff --git a/packages/open-scd/src/action-icon.ts b/packages/open-scd/src/action-icon.ts new file mode 100644 index 0000000000..6b09d2ea11 --- /dev/null +++ b/packages/open-scd/src/action-icon.ts @@ -0,0 +1,219 @@ +import { + css, + customElement, + html, + LitElement, + property, + TemplateResult, +} from 'lit-element'; +import { nothing } from 'lit-html'; + +import '@material/mwc-icon'; + +/** + * A responsive container rendering actions in a header. + * + * The "action" slot may contain up to eight icon buttons. + * The "icon" slot, if filled overrides the icon property. + * The default slot will be rendered into the pane body in a single column. + */ +@customElement('action-icon') +export class ActionIcon extends LitElement { + /** caption text, displayed in the header */ + @property({ type: String }) + label?: string; + /** icon name, displayed unless the "icon" slot is filled */ + @property({ type: String }) + icon?: string; + /** color header with secondary theme color while focus is within */ + @property({ type: Boolean }) + secondary = false; + /** highlight pane with dotted outline */ + @property({ type: Boolean }) + highlighted = false; + /** disables CSS adoption to action buttons */ + @property({ type: Boolean }) + hideActions = false; + + async firstUpdated(): Promise { + this.tabIndex = 0; + } + + private renderIcon(): TemplateResult { + return html` + ${this.icon ? html`${this.icon}` : nothing} `; + } + + render(): TemplateResult { + return html`
    ${this.label ?? nothing}
    +
    ${this.renderIcon()}
    +
    ${this.label ?? nothing}
    `; + } + + static styles = css` + :host { + display: flex; + flex-direction: column; + outline: none; + } + + section { + align-self: center; + } + + ::slotted([slot='icon']), + mwc-icon { + display: block; + color: var(--mdc-theme-on-surface); + transition: transform 150ms linear, box-shadow 200ms linear; + outline-color: var(--mdc-theme-primary); + outline-style: solid; + margin: 0px; + outline-width: 0px; + width: 64px; + height: 64px; + --mdc-icon-size: 64px; + } + + :host([secondary]) ::slotted([slot='icon']), + :host([secondary]) mwc-icon { + outline-color: var(--mdc-theme-secondary); + } + + :host([highlighted]) ::slotted([slot='icon']), + :host([highlighted]) mwc-icon { + outline-style: dotted; + outline-width: 2px; + } + + :host(:focus-within) ::slotted([slot='icon']), + :host(:focus-within) mwc-icon { + outline-style: solid; + outline-width: 4px; + } + + :host(:focus-within:not([hideActions])) ::slotted([slot='icon']), + :host(:focus-within:not([hideActions])) mwc-icon { + transform: scale(0.8); + transition: all 250ms linear; + 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); + } + + ::slotted([slot='icon']:hover), + mwc-icon:hover { + outline-style: dashed; + outline-width: 2px; + transition: transform 200ms linear, box-shadow 250ms linear; + } + + ::slotted([slot='action']) { + color: var(--mdc-theme-on-surface); + transition: transform 200ms cubic-bezier(0.4, 0, 0.2, 1), + opacity 200ms linear; + position: absolute; + pointer-events: none; + z-index: 1; + opacity: 0; + margin-top: -56px; + margin-left: 8px; + } + + :host(:focus-within) ::slotted([slot='action']) { + transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), + opacity 250ms linear; + pointer-events: auto; + opacity: 1; + } + + :host(:focus-within) ::slotted([slot='action']:nth-of-type(1)) { + transform: translate(0px, -52px); + } + :host(:focus-within) ::slotted([slot='action']:nth-of-type(2)) { + transform: translate(0px, 52px); + } + :host(:focus-within) ::slotted([slot='action']:nth-of-type(3)) { + transform: translate(52px, 0px); + } + :host(:focus-within) ::slotted([slot='action']:nth-of-type(4)) { + transform: translate(-52px, 0px); + } + :host(:focus-within) ::slotted([slot='action']:nth-of-type(5)) { + transform: translate(52px, -52px); + } + :host(:focus-within) ::slotted([slot='action']:nth-of-type(6)) { + transform: translate(-52px, 52px); + } + :host(:focus-within) ::slotted([slot='action']:nth-of-type(7)) { + transform: translate(-52px, -52px); + } + :host(:focus-within) ::slotted([slot='action']:nth-of-type(8)) { + transform: translate(52px, 52px); + } + + footer { + color: var(--mdc-theme-on-surface); + font-family: 'Roboto', sans-serif; + font-weight: 300; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + margin: 0px; + text-align: center; + align-self: center; + max-width: 100%; + direction: rtl; + } + + header { + color: var(--mdc-theme-on-primary); + background-color: var(--mdc-theme-primary); + font-family: 'Roboto', sans-serif; + font-weight: 500; + font-size: 1.2em; + position: absolute; + text-align: center; + align-self: center; + max-width: 100vw; + padding: 4px 8px; + border-radius: 4px; + opacity: 0; + transition: transform 200ms cubic-bezier(0.4, 0, 0.2, 1), + opacity 200ms linear; + } + + :host([secondary]) header { + background-color: var(--mdc-theme-secondary); + } + + :host(:hover) header { + position: absolute; + opacity: 1; + transform: translate(0, -40px); + 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); + transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), + opacity 250ms linear; + } + + :host(:focus-within) header { + position: absolute; + opacity: 1; + 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); + transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), + opacity 250ms linear; + } + + :host(:focus-within:not([hideActions])) header { + transform: translate(0, -80px); + } + + :host(:focus-within[hideActions]) header { + transform: translate(0, -40px); + } + `; +} diff --git a/packages/open-scd/src/action-pane.ts b/packages/open-scd/src/action-pane.ts new file mode 100644 index 0000000000..2102b899a7 --- /dev/null +++ b/packages/open-scd/src/action-pane.ts @@ -0,0 +1,181 @@ +import { + css, + customElement, + html, + LitElement, + property, + TemplateResult, +} from 'lit-element'; +import { classMap } from 'lit-html/directives/class-map'; + +import '@material/mwc-icon'; +import { nothing } from 'lit-html'; + +function closestTo(node: Node, selector: string): E | null { + const closest = + node.nodeType === Node.ELEMENT_NODE + ? (node).closest(selector) + : null; + + if (closest) return closest; + + const root = node.getRootNode(); + + if (root instanceof ShadowRoot) return closestTo(root.host, selector); + + return null; +} + +/** + * A responsive container rendering actions in a header. + * + * The "action" slot may contain up to eight icon buttons. + * The "icon" slot, if filled overrides the icon property. + * The default slot will be rendered into the pane body in a single column. + */ +@customElement('action-pane') +export class ActionPane extends LitElement { + /** caption text, displayed in the header */ + @property({ type: String }) + label?: string; + /** icon name, displayed unless the "icon" slot is filled */ + @property({ type: String }) + icon?: string; + /** color header with secondary theme color while focus is within */ + @property({ type: Boolean }) + secondary = false; + /** highlight pane with dotted outline */ + @property({ type: Boolean }) + highlighted = false; + /** nesting level, default (closest pane ancestor's level) + 1 */ + @property({ type: Number }) + level = 1; + + async firstUpdated(): Promise { + this.tabIndex = 0; + + const parentPane = closestTo(this.parentNode!, 'action-pane'); + if (parentPane) this.level = parentPane.level + 1; + + this.level = Math.floor(this.level); + } + + private renderHeader(): TemplateResult { + const content = html`${this.icon + ? html`${this.icon}` + : nothing} + ${this.label ?? nothing} + `; + + const headingLevel = Math.floor(Math.max(this.level, 1)); + // Sometimes a TemplateResult is passed in as Label, not a string. So only when it's a string show a title. + const title = typeof this.label === 'string' ? this.label : ''; + switch (headingLevel) { + case 1: + return html`

    ${content}

    `; + case 2: + return html`

    ${content}

    `; + case 3: + return html`

    ${content}

    `; + default: + return html`

    ${content}

    `; + } + } + + render(): TemplateResult { + return html`
    + ${this.renderHeader()} +
    +
    `; + } + + static styles = css` + :host { + outline: none; + } + + :host(:focus-within) section { + 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); + outline-width: 4px; + transition: all 250ms linear; + } + + section { + background-color: var(--mdc-theme-surface); + transition: all 200ms linear; + outline-style: solid; + margin: 0px; + outline-width: 0px; + outline-color: var(--mdc-theme-primary); + } + + section.secondary { + outline-color: var(--mdc-theme-secondary); + } + + section > div { + display: flex; + flex-direction: column; + gap: 12px; + padding: 8px 12px 16px; + clear: right; + } + + .highlighted { + outline-style: dotted; + outline-width: 2px; + } + + :host(:focus-within) .highlighted { + outline-style: solid; + } + + .contrasted { + background-color: var(--mdc-theme-on-primary); + } + + h1, + h2, + h3, + h4 { + color: var(--mdc-theme-on-surface); + font-family: 'Roboto', sans-serif; + font-weight: 300; + overflow: clip visible; + white-space: nowrap; + text-overflow: ellipsis; + margin: 0px; + line-height: 52px; + padding-left: 0.3em; + } + + nav { + float: right; + } + + mwc-icon { + vertical-align: middle; + position: relative; + top: -0.1em; + --mdc-icon-size: 1em; + } + + ::slotted([slot='icon']) { + vertical-align: middle; + position: relative; + top: -0.1em; + --mdc-icon-size: 1em; + } + `; +} diff --git a/packages/open-scd/src/editors/Cleanup.ts b/packages/open-scd/src/editors/Cleanup.ts new file mode 100644 index 0000000000..6296511847 --- /dev/null +++ b/packages/open-scd/src/editors/Cleanup.ts @@ -0,0 +1,63 @@ +'use strict'; + +import { css, html, LitElement, property, TemplateResult } from 'lit-element'; + +import { styles } from './templates/foundation.js'; + +import './cleanup/datasets-container.js'; +import './cleanup/control-blocks-container.js'; +import './cleanup/datatypes-container.js'; + +/** An editor [[`plugin`]] for cleaning SCL references and definitions. */ +export default class Cleanup extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property() + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + render(): TemplateResult { + return html` +
    + + + +
    + `; + } + + static styles = css` + ${styles} + + :host { + width: 100vw; + } + + @media (max-width: 799px) { + .cleanup { + flex-direction: column; + } + } + + @media (min-width: 800px) { + .cleanup { + max-height: 60vh; + } + } + + cleanup-datasets, cleanup-control-blocks, cleanup-data-types { + display: flex; + flex: 1; + flex-direction: column; + justify-content: space-between; + } + + .cleanup { + display: flex; + flex-wrap: wrap; + gap: 20px; + padding: 20px; + } + } + `; +} diff --git a/packages/open-scd/src/editors/Communication.ts b/packages/open-scd/src/editors/Communication.ts new file mode 100644 index 0000000000..876f2f6547 --- /dev/null +++ b/packages/open-scd/src/editors/Communication.ts @@ -0,0 +1,115 @@ +import { LitElement, html, TemplateResult, property, css } from 'lit-element'; +import { translate, get } from 'lit-translate'; + +import '@material/mwc-fab'; + +import './communication/subnetwork-editor.js'; +import { + newWizardEvent, + newActionEvent, + createElement, + isPublic, +} from '../foundation.js'; +import { createSubNetworkWizard } from '../wizards/subnetwork.js'; + +/** An editor [[`plugin`]] for editing the `Communication` section. */ +export default class CommunicationPlugin extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property() + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + /** + * Creates the Communication Element and returns the created Element + * @returns {Element} Communication `Element` + */ + private createCommunication(): Element { + const element: Element = createElement(this.doc, 'Communication', {}); + this.dispatchEvent( + newActionEvent({ + new: { + parent: this.doc.documentElement, + element: element, + }, + }) + ); + return element; + } + + /** Opens a [[`WizardDialog`]] for creating a new `SubNetwork` element. */ + private openCreateSubNetworkWizard(): void { + const parent = + this.doc.querySelector(':root > Communication') || + this.createCommunication(); + + this.dispatchEvent(newWizardEvent(createSubNetworkWizard(parent!))); + } + + render(): TemplateResult { + if (!this.doc?.querySelector(':root > Communication >SubNetwork')) + return html`

    + ${translate('communication.missing')} this.openCreateSubNetworkWizard()} + > +

    `; + + return html` this.openCreateSubNetworkWizard()} + > +
    + ${Array.from(this.doc.querySelectorAll('SubNetwork') ?? []) + .filter(isPublic) + .map( + subnetwork => + html`` + )} +
    `; + } + + static styles = css` + :host { + width: 100vw; + } + + h1 { + color: var(--mdc-theme-on-surface); + font-family: 'Roboto', sans-serif; + font-weight: 300; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + margin: 0px; + line-height: 48px; + padding-left: 0.3em; + transition: background-color 150ms linear; + } + + section { + outline: none; + padding: 8px 12px 16px; + } + + subnetwork-editor { + margin: 8px 12px 16px; + } + + mwc-fab { + position: fixed; + bottom: 32px; + right: 32px; + } + `; +} diff --git a/packages/open-scd/src/editors/GooseSubscriberDataBinding.ts b/packages/open-scd/src/editors/GooseSubscriberDataBinding.ts new file mode 100644 index 0000000000..10b29be7d7 --- /dev/null +++ b/packages/open-scd/src/editors/GooseSubscriberDataBinding.ts @@ -0,0 +1,59 @@ +import { css, html, LitElement, property, TemplateResult } from 'lit-element'; + +import { Nsdoc } from '../foundation/nsdoc.js'; + +import './subscription/fcda-binding-list.js'; +import './subscription/later-binding/ext-ref-ln-binding-list.js'; + +/** An editor [[`plugin`]] for Subscribe Data Binding (GOOSE). */ +export default class GooseSubscribeDataBindingPlugin extends LitElement { + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + @property() + nsdoc!: Nsdoc; + + render(): TemplateResult { + return html`
    +
    + + + + +
    +
    `; + } + + static styles = css` + :host { + width: 100vw; + } + + .container { + display: flex; + padding: 8px 6px 16px; + height: calc(100vh - 136px); + } + + .column { + flex: 50%; + margin: 0px 6px 0px; + min-width: 300px; + height: 100%; + overflow-y: auto; + } + `; +} diff --git a/packages/open-scd/src/editors/GooseSubscriberLaterBinding.ts b/packages/open-scd/src/editors/GooseSubscriberLaterBinding.ts new file mode 100644 index 0000000000..c77bc1f754 --- /dev/null +++ b/packages/open-scd/src/editors/GooseSubscriberLaterBinding.ts @@ -0,0 +1,52 @@ +import { css, html, LitElement, property, TemplateResult } from 'lit-element'; + +import './subscription/fcda-binding-list.js'; +import './subscription/later-binding/ext-ref-later-binding-list.js'; + +/** An editor [[`plugin`]] for Subscribe Later Binding (GOOSE). */ +export default class GooseSubscribeLaterBindingPlugin extends LitElement { + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + render(): TemplateResult { + return html`
    +
    + + + + +
    +
    `; + } + + static styles = css` + :host { + width: 100vw; + } + + .container { + display: flex; + padding: 8px 6px 16px; + height: calc(100vh - 136px); + } + + .column { + flex: 50%; + margin: 0px 6px 0px; + min-width: 300px; + height: 100%; + overflow-y: auto; + } + `; +} diff --git a/packages/open-scd/src/editors/GooseSubscriberMessageBinding.ts b/packages/open-scd/src/editors/GooseSubscriberMessageBinding.ts new file mode 100644 index 0000000000..31128d220d --- /dev/null +++ b/packages/open-scd/src/editors/GooseSubscriberMessageBinding.ts @@ -0,0 +1,119 @@ +import { + css, + html, + LitElement, + property, + query, + TemplateResult, +} from 'lit-element'; +import { translate } from 'lit-translate'; + +import '@material/mwc-radio'; +import '@material/mwc-formfield'; +import { RadioListItem } from '@material/mwc-list/mwc-radio-list-item'; + +import './subscription/goose/subscriber-list.js'; +import './subscription/goose/goose-list.js'; +import './subscription/ied-list.js'; +import { newViewEvent, View, ViewEvent } from './subscription/foundation.js'; + +/** Defining view outside the class, which makes it persistent. */ +let view: View = View.PUBLISHER; + +/** An editor [[`plugin`]] for subscribing IEDs to GOOSE messages. */ +export default class GooseSubscriberMessageBindingPlugin extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property() + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + @query('#goosePublisherView') + goosePublisherView!: RadioListItem; + + @query('#gooseSubscriberView') + gooseSubscriberView!: RadioListItem; + + @query('div[class="container"]') + listDiv!: Element; + + constructor() { + super(); + this.addEventListener('view', (evt: ViewEvent) => { + view = evt.detail.view; + this.requestUpdate(); + }); + } + + firstUpdated(): void { + view == View.PUBLISHER + ? this.goosePublisherView.setAttribute('checked', '') + : this.gooseSubscriberView.setAttribute('checked', ''); + } + + render(): TemplateResult { + return html`
    + + + this.listDiv.dispatchEvent(newViewEvent(View.PUBLISHER))} + > + + + + this.listDiv.dispatchEvent(newViewEvent(View.SUBSCRIBER))} + > + +
    + ${view == View.PUBLISHER + ? html`` + : html``} + +
    +
    `; + } + + static styles = css` + :host { + width: 100vw; + } + + .container { + display: flex; + padding: 8px 6px 16px; + height: 86vh; + } + + .row { + flex: 50%; + margin: 0px 6px 0px; + min-width: 300px; + height: 100%; + overflow-y: scroll; + } + `; +} diff --git a/packages/open-scd/src/editors/IED.ts b/packages/open-scd/src/editors/IED.ts new file mode 100644 index 0000000000..296411a0d4 --- /dev/null +++ b/packages/open-scd/src/editors/IED.ts @@ -0,0 +1,271 @@ +import { + css, + html, + LitElement, + property, + PropertyValues, + state, + TemplateResult, +} from 'lit-element'; +import { translate } from 'lit-translate'; +import { nothing } from 'lit-html'; + +import '@material/mwc-list/mwc-check-list-item'; +import '@material/mwc-list/mwc-radio-list-item'; + +import '../oscd-filter-button.js'; +import { SelectedItemsChangedEvent } from '../oscd-filter-button.js'; + +import './ied/ied-container.js'; +import './ied/element-path.js'; + +import { + compareNames, + getDescriptionAttribute, + getNameAttribute, +} from '../foundation.js'; +import { Nsdoc } from '../foundation/nsdoc.js'; +import { getIcon } from '../icons/icons.js'; + +/** An editor [[`plugin`]] for editing the `IED` section. */ +export default class IedPlugin extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property() + doc!: XMLDocument; + + @property({ type: Number }) + editCount = -1; + + /** All the nsdoc files that are being uploaded via the settings. */ + @property() + nsdoc!: Nsdoc; + + @state() + selectedIEDs: string[] = []; + + @state() + selectedLNClasses: string[] = []; + + @state() + private get iedList(): Element[] { + return this.doc + ? Array.from(this.doc.querySelectorAll(':root > IED')).sort((a, b) => + compareNames(a, b) + ) + : []; + } + + @state() + private get lnClassList(): string[][] { + const currentIed = this.selectedIed; + const uniqueLNClassList: string[] = []; + if (currentIed) { + return Array.from(currentIed.querySelectorAll('LN0, LN')) + .filter(element => element.hasAttribute('lnClass')) + .filter(element => { + const lnClass = element.getAttribute('lnClass') ?? ''; + if (uniqueLNClassList.includes(lnClass)) { + return false; + } + uniqueLNClassList.push(lnClass); + return true; + }) + .sort((a, b) => { + const aLnClass = a.getAttribute('lnClass') ?? ''; + const bLnClass = b.getAttribute('lnClass') ?? ''; + + return aLnClass.localeCompare(bLnClass); + }) + .map(element => { + const lnClass = element.getAttribute('lnClass'); + const label = this.nsdoc.getDataDescription(element).label; + return [lnClass, label]; + }) as string[][]; + } + return []; + } + + @state() + private get selectedIed(): Element | undefined { + // When there is no IED selected, or the selected IED has no parent (IED has been removed) + // select the first IED from the List. + if (this.selectedIEDs.length >= 1) { + const iedList = this.iedList; + return iedList.find(element => { + const iedName = getNameAttribute(element); + return this.selectedIEDs[0] === iedName; + }); + } + return undefined; + } + + lNClassListOpenedOnce = false; + + protected updated(_changedProperties: PropertyValues): void { + super.updated(_changedProperties); + + // When the document is updated, we reset the selected IED if it no longer exists + const isDocumentUpdated = + _changedProperties.has('doc') || + _changedProperties.has('editCount') || + _changedProperties.has('nsdoc'); + + if (isDocumentUpdated) { + // if the IED exists, retain selection + const iedExists = this.doc?.querySelector( + `IED[name="${this.selectedIEDs[0]}"]` + ); + + if (iedExists) return; + + this.selectedIEDs = []; + this.selectedLNClasses = []; + this.lNClassListOpenedOnce = false; + + const iedList = this.iedList; + if (iedList.length > 0) { + const iedName = getNameAttribute(iedList[0]); + if (iedName) { + this.selectedIEDs = [iedName]; + } + } + } + } + + private calcSelectedLNClasses(): string[] { + const somethingSelected = this.selectedLNClasses.length > 0; + const lnClasses = this.lnClassList.map( lnClassInfo => lnClassInfo[0] ); + + let selectedLNClasses = lnClasses; + + if(somethingSelected){ + selectedLNClasses = lnClasses.filter( lnClass => this.selectedLNClasses.includes(lnClass)); + } + + return selectedLNClasses; + } + + render(): TemplateResult { + const iedList = this.iedList; + if (iedList.length > 0) { + return html`
    +
    +

    ${translate('filters')}:

    + + + ${iedList.map(ied => { + const name = getNameAttribute(ied); + const descr = getDescriptionAttribute(ied); + const type = ied.getAttribute('type'); + const manufacturer = ied.getAttribute('manufacturer'); + return html` + ${name} ${descr ? html` (${descr})` : html``} + + ${type} ${type && manufacturer ? html`—` : nothing} + ${manufacturer} + + `; + })} + + + + ${getIcon('lNIcon')} + ${this.lnClassList.map(lnClassInfo => { + const value = lnClassInfo[0]; + const label = lnClassInfo[1]; + return html` + ${label} + `; + })} + + + +
    + + +
    `; + } + return html`

    + ${translate('iededitor.missing')} +

    `; + } + + static styles = css` + :host { + width: 100vw; + } + + section { + padding: 8px 12px 16px; + } + + .header { + display: flex; + } + + h1 { + color: var(--mdc-theme-on-surface); + font-family: 'Roboto', sans-serif; + font-weight: 300; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + margin: 0px; + line-height: 48px; + padding-left: 0.3em; + } + + .elementPath { + margin-left: auto; + padding-right: 12px; + } + `; +} diff --git a/packages/open-scd/src/editors/Protocol104.ts b/packages/open-scd/src/editors/Protocol104.ts new file mode 100644 index 0000000000..94b0219fe6 --- /dev/null +++ b/packages/open-scd/src/editors/Protocol104.ts @@ -0,0 +1,105 @@ +import { + css, + html, + LitElement, + property, + query, + TemplateResult, +} from 'lit-element'; +import { translate } from 'lit-translate'; + +import '@material/mwc-fab'; +import '@material/mwc-radio'; +import '@material/mwc-formfield'; + +import { RadioListItem } from '@material/mwc-list/mwc-radio-list-item'; + +import './protocol104/network-container.js'; +import './protocol104/values-container.js'; + +import { + newViewEvent, + View, + VIEW_EVENT_NAME, + ViewEvent, +} from './protocol104/foundation/foundation.js'; + +/** Defining view outside the class, which makes it persistent. */ +let selectedViewProtocol104Plugin: View = View.VALUES; + +export default class Communication104Plugin extends LitElement { + @property() + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + @query('#byValuesRadio') + byValuesRadio!: RadioListItem; + + @query('#byNetworkRadio') + byNetworkRadio!: RadioListItem; + + @query('div#containers') + listDiv!: Element; + + constructor() { + super(); + + this.addEventListener(VIEW_EVENT_NAME, (evt: ViewEvent) => { + selectedViewProtocol104Plugin = evt.detail.view; + this.requestUpdate(); + }); + } + + firstUpdated(): void { + selectedViewProtocol104Plugin == View.VALUES + ? this.byValuesRadio.setAttribute('checked', '') + : this.byNetworkRadio.setAttribute('checked', ''); + } + + render(): TemplateResult { + return html`
    +
    + + + this.listDiv.dispatchEvent(newViewEvent(View.VALUES))} + > + + + + this.listDiv.dispatchEvent(newViewEvent(View.NETWORK))} + > + +
    + ${selectedViewProtocol104Plugin == View.VALUES + ? html`` + : html``} +
    +
    +
    `; + } + + static styles = css` + :host { + width: 100vw; + } + + section { + padding: 8px 12px 16px; + } + `; +} diff --git a/packages/open-scd/src/editors/Publisher.ts b/packages/open-scd/src/editors/Publisher.ts new file mode 100644 index 0000000000..656dbc25af --- /dev/null +++ b/packages/open-scd/src/editors/Publisher.ts @@ -0,0 +1,101 @@ +import { + css, + html, + LitElement, + property, + state, + TemplateResult, +} from 'lit-element'; +import { classMap } from 'lit-html/directives/class-map'; + +import '@material/mwc-formfield'; +import '@material/mwc-radio'; + +import './publisher/report-control-editor.js'; +import './publisher/gse-control-editor.js'; +import './publisher/sampled-value-control-editor.js'; +import './publisher/data-set-editor.js'; + +/** An editor [[`plugin`]] to configure `Report`, `GOOSE`, `SampledValue` control blocks and its `DataSet` */ +export default class PublisherPlugin extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + @state() + private publisherType: 'Report' | 'GOOSE' | 'SampledValue' | 'DataSet' = + 'GOOSE'; + + render(): TemplateResult { + return html`
    + (this.publisherType = 'Report')} + > (this.publisherType = 'GOOSE')} + > (this.publisherType = 'SampledValue')} + > (this.publisherType = 'DataSet')} + > +
    + `; + } + + static styles = css` + .hidden { + display: none; + } + + .publishertypeselector { + margin: 4px 8px 8px; + background-color: var(--mdc-theme-surface); + width: calc(100% - 16px); + justify-content: space-around; + } + `; +} diff --git a/packages/open-scd/src/editors/SMVSubscriberDataBinding.ts b/packages/open-scd/src/editors/SMVSubscriberDataBinding.ts new file mode 100644 index 0000000000..d00efda3e1 --- /dev/null +++ b/packages/open-scd/src/editors/SMVSubscriberDataBinding.ts @@ -0,0 +1,59 @@ +import { css, html, LitElement, property, TemplateResult } from 'lit-element'; + +import { Nsdoc } from '../foundation/nsdoc.js'; + +import './subscription/fcda-binding-list.js'; +import './subscription/later-binding/ext-ref-ln-binding-list.js'; + +/** An editor [[`plugin`]] for Subscribe Data Binding (SMV). */ +export default class SMVSubscribeDataBindingPlugin extends LitElement { + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + @property() + nsdoc!: Nsdoc; + + render(): TemplateResult { + return html`
    +
    + + + + +
    +
    `; + } + + static styles = css` + :host { + width: 100vw; + } + + .container { + display: flex; + padding: 8px 6px 16px; + height: calc(100vh - 136px); + } + + .column { + flex: 50%; + margin: 0px 6px 0px; + min-width: 300px; + height: 100%; + overflow-y: auto; + } + `; +} diff --git a/packages/open-scd/src/editors/SMVSubscriberLaterBinding.ts b/packages/open-scd/src/editors/SMVSubscriberLaterBinding.ts new file mode 100644 index 0000000000..f8d5be3c00 --- /dev/null +++ b/packages/open-scd/src/editors/SMVSubscriberLaterBinding.ts @@ -0,0 +1,52 @@ +import { css, html, LitElement, property, TemplateResult } from 'lit-element'; + +import './subscription/fcda-binding-list.js'; +import './subscription/later-binding/ext-ref-later-binding-list.js'; + +/** An editor [[`plugin`]] for Subscribe Later Binding (SMV). */ +export default class SMVSubscribeLaterBindingPlugin extends LitElement { + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + render(): TemplateResult { + return html`
    +
    + + + + +
    +
    `; + } + + static styles = css` + :host { + width: 100vw; + } + + .container { + display: flex; + padding: 8px 6px 16px; + height: calc(100vh - 136px); + } + + .column { + flex: 50%; + margin: 0px 6px 0px; + min-width: 300px; + height: 100%; + overflow-y: auto; + } + `; +} diff --git a/packages/open-scd/src/editors/SMVSubscriberMessageBinding.ts b/packages/open-scd/src/editors/SMVSubscriberMessageBinding.ts new file mode 100644 index 0000000000..f5ec0856cc --- /dev/null +++ b/packages/open-scd/src/editors/SMVSubscriberMessageBinding.ts @@ -0,0 +1,117 @@ +import { + css, + html, + LitElement, + property, + query, + TemplateResult, +} from 'lit-element'; +import { translate } from 'lit-translate'; + +import { RadioListItem } from '@material/mwc-list/mwc-radio-list-item.js'; + +import './subscription/sampledvalues/subscriber-list.js'; +import './subscription/sampledvalues/smv-list.js'; +import './subscription/ied-list.js'; +import { newViewEvent, View, ViewEvent } from './subscription/foundation.js'; + +/** Defining view outside the class, which makes it persistent. */ +let view: View = View.PUBLISHER; + +/** An editor [[`plugin`]] for subscribing IEDs to Sampled Values. */ +export default class SMVSubscriberMessageBindingPlugin extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property() + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + @query('#smvPublisherView') + smvPublisherView!: RadioListItem; + + @query('#smvSubscriberView') + smvSubscriberView!: RadioListItem; + + @query('div[class="container"]') + listDiv!: Element; + + constructor() { + super(); + this.addEventListener('view', (evt: ViewEvent) => { + view = evt.detail.view; + this.requestUpdate(); + }); + } + + firstUpdated(): void { + view == View.PUBLISHER + ? this.smvPublisherView.setAttribute('checked', '') + : this.smvSubscriberView.setAttribute('checked', ''); + } + + render(): TemplateResult { + return html`
    + + + this.listDiv.dispatchEvent(newViewEvent(View.PUBLISHER))} + > + + + + this.listDiv.dispatchEvent(newViewEvent(View.SUBSCRIBER))} + > + +
    + ${view == View.PUBLISHER + ? html`` + : html``} + +
    +
    `; + } + + static styles = css` + :host { + width: 100vw; + } + + .container { + display: flex; + padding: 8px 6px 16px; + height: 86vh; + } + + .row { + flex: 50%; + margin: 0px 6px 0px; + min-width: 300px; + height: 100%; + overflow-y: scroll; + } + `; +} diff --git a/packages/open-scd/src/editors/SingleLineDiagram.ts b/packages/open-scd/src/editors/SingleLineDiagram.ts new file mode 100644 index 0000000000..84562410a3 --- /dev/null +++ b/packages/open-scd/src/editors/SingleLineDiagram.ts @@ -0,0 +1,664 @@ +import { + css, + html, + LitElement, + property, + PropertyValues, + query, + state, + TemplateResult, +} from 'lit-element'; +import panzoom from 'panzoom'; + +import { + compareNames, + getDescriptionAttribute, + getNameAttribute, + getPathNameAttribute, + identity, + newWizardEvent, + SCLTag, +} from '../foundation.js'; +import { + addLabelToBay, + addLabelToBusBar, + createBayElement, + createBusBarElement, + createConductingEquipmentElement, + createConnectivityNodeElement, + createPowerTransformerElement, + createSubstationElement, + createTerminalElement, + createVoltageLevelElement, + drawBusBarRoute, + drawCNodeConnections, + getAbsolutePosition, + getAbsolutePositionBusBar, + getAbsolutePositionTerminal, + getBusBarLength, + getConnectivityNodesDrawingPosition, + getDirections, +} from './singlelinediagram/sld-drawing.js'; +import { + getCommonParentElement, + getConnectedTerminals, + isBusBar, +} from './singlelinediagram/foundation.js'; +import { isSCLNamespace } from '../schemas.js'; +import { wizards } from './singlelinediagram/wizards/wizard-library.js'; +import { SingleSelectedEvent } from '@material/mwc-list/mwc-list-foundation'; +import { translate } from 'lit-translate'; + +import '@material/mwc-list/mwc-list-item'; +import '@material/mwc-select'; +import '@material/mwc-textfield'; + +/* + * We need a variable outside the plugin to save the selected substation, because the Plugin is created + * more than once during working with the SLD, for instance when opening a Wizard to edit equipment. + */ +let sldEditorSelectedSubstation: Element | undefined; +/* + * We will also add an Event Listener when a new document is opened. We then want to reset the selection + * so setting it to undefined will set the selected Substation again on the first in the list. + */ +function onOpenDocResetSelectedSubstation() { + sldEditorSelectedSubstation = undefined; +} +addEventListener('open-doc', onOpenDocResetSelectedSubstation); + +/** + * Main class plugin for Single Line Diagram editor. + */ +export default class SingleLineDiagramPlugin extends LitElement { + // The full given XML document. + @property({ attribute: false }) + doc!: XMLDocument; + + // Container for giving the panzoom to. + @query('#panzoom') panzoomContainer!: HTMLElement; + // The main canvas to draw everything on. + @query('#svg') svg!: SVGGraphicsElement; + + private get substations(): Element[] { + return this.doc + ? Array.from(this.doc.querySelectorAll(':root > Substation')).sort( + (a, b) => compareNames(a, b) + ) + : []; + } + + @state() + private set selectedSubstation(element: Element | undefined) { + sldEditorSelectedSubstation = element; + } + + private get selectedSubstation(): Element | undefined { + if (sldEditorSelectedSubstation === undefined) { + const substationList = this.substations; + if (substationList.length > 0) { + sldEditorSelectedSubstation = substationList[0]; + } + } + return sldEditorSelectedSubstation; + } + + /** + * Get all the Power Transformers from an element. + */ + private getPowerTransformers(parentElement: Element): Element[] { + return Array.from( + parentElement.querySelectorAll('PowerTransformer') + ).filter(isSCLNamespace); + } + + /** + * Get all the Voltage Levels from the substation. + */ + private getVoltageLevels(substationElement: Element): Element[] { + return Array.from( + substationElement.querySelectorAll('VoltageLevel') + ).filter(isSCLNamespace); + } + + /** + * Get all the BusBars from the voltage level. + */ + private getBusBars(voltageLevelElement: Element): Element[] { + return Array.from(voltageLevelElement.querySelectorAll('Bay')) + .filter(isSCLNamespace) + .filter(bay => isBusBar(bay)); + } + + /** + * Get all the bays from the voltage level. + */ + private getBays(voltageLevelElement: Element): Element[] { + return Array.from(voltageLevelElement.querySelectorAll('Bay')) + .filter(isSCLNamespace) + .filter(bay => !isBusBar(bay)); + } + + /** + * Get all the Conducting Equipment from a Bay. + * @param bayElement - The Bay to search in. + */ + private getConductingEquipments(bayElement: Element): Element[] { + return Array.from( + bayElement.querySelectorAll('ConductingEquipment') + ).filter(isSCLNamespace); + } + + /** + * Get all the Connectivity Nodes from a Bay/Busbar. + * @param bayElement - The Bay/Busbar to search in. + */ + private getConnectivityNode(bayElement: Element): Element[] { + return Array.from(bayElement.querySelectorAll('ConnectivityNode')) + .filter(isSCLNamespace) + .filter(cNode => cNode.getAttribute('name') !== 'grounded'); + } + + /** + * Search for Equipment (ConductionEquipment or PowerTransformer) which has a terminal wth a connectivityNode + * tha is the same as the passed pathName. + * @param parentElement - The Element to search in for Equipment. + * @param pathName - The PathName to search for in the Terminal. + */ + private findEquipment( + parentElement: Element, + pathName: string | undefined + ): Element[] { + return Array.from( + parentElement.querySelectorAll('ConductingEquipment, PowerTransformer') + ) + .filter(isSCLNamespace) + .filter(element => + element.querySelector(`Terminal[connectivityNode="${pathName}"]`) + ); + } + + /** + * Draw all equipment and connections of the selected Substation. + */ + private drawSubstation(substation: Element): void { + const substationGroup = createSubstationElement(substation); + this.svg.appendChild(substationGroup); + + this.drawPowerTransformers(substation, substationGroup); + this.drawVoltageLevels(substation, substationGroup); + } + + /** + * Draw all available `PowerTransformer`s of passed parent element. + * Should only be a element. + * @param parentElement - The parent element to search for PowerTransformers. + * @param parentGroup - The SVG Group to which to add the PowerTransformer. + */ + private drawPowerTransformers( + parentElement: Element, + parentGroup: SVGElement + ): void { + this.getPowerTransformers(parentElement).forEach(powerTransformerElement => + this.drawPowerTransformer(parentGroup, powerTransformerElement) + ); + } + + /** + * Draw an SVG from the passed PowerTransformer Element. + * Should only be a element. + * @param parentGroup - The SVG Group to which to add the PowerTransformer. + * @param powerTransformerElement - The PowerTransformer to draw. + */ + private drawPowerTransformer( + parentGroup: SVGElement, + powerTransformerElement: Element + ): void { + const powerTransformerGroup = createPowerTransformerElement( + powerTransformerElement, + (event: Event) => this.openEditWizard(event, powerTransformerElement) + ); + parentGroup.appendChild(powerTransformerGroup); + } + + /** + * Draw all available Voltage Levels of the passed Substation Element. + * Should only be a element. + * @param substationElement - The substation containing the voltage levels. + * @param substationGroup - The group to which to add the SVGs. + */ + private drawVoltageLevels( + substationElement: Element, + substationGroup: SVGElement + ): void { + // First draw all the devices on the SVG for all voltage levels. + this.getVoltageLevels(substationElement).forEach(voltageLevelElement => { + const voltageLevelGroup = createVoltageLevelElement(voltageLevelElement); + substationGroup.appendChild(voltageLevelGroup); + + this.drawPowerTransformers(voltageLevelElement, voltageLevelGroup); + this.drawBays(voltageLevelElement, voltageLevelGroup); + this.drawBusBars(voltageLevelElement, voltageLevelGroup); + }); + + // After all devices are drawn we can draw the connections between the devices. + // And also add the label on the correct place, we now know where the boundaries are. + this.getVoltageLevels(substationElement).forEach(voltageLevelElement => { + this.getBusBars(voltageLevelElement).forEach(busbarElement => { + this.drawBusBarConnections(substationElement, this.svg, busbarElement); + + addLabelToBusBar(this.svg, busbarElement, (event: Event) => + this.openEditWizard(event, busbarElement) + ); + }); + + this.getBays(voltageLevelElement).forEach(bayElement => { + this.drawBayConnections(substationElement, this.svg, bayElement); + + addLabelToBay(this.svg, bayElement, (event: Event) => + this.openEditWizard(event, bayElement) + ); + }); + }); + } + + /** + * Draw all available Bays of the passed Voltage Level Element. + * Should only be a element. + * @param voltageLevelElement - The Voltage Level containing the bays. + * @param voltageLevelGroup - The group to which to add the SVGs. + * */ + private drawBays( + voltageLevelElement: Element, + voltageLevelGroup: SVGElement + ): void { + this.getBays(voltageLevelElement).forEach(bayElement => { + const bayGroup = createBayElement(bayElement); + voltageLevelGroup.appendChild(bayGroup); + + this.drawPowerTransformers(bayElement, bayGroup); + this.drawConductingEquipments(bayElement, bayGroup); + this.drawConnectivityNodes(bayElement, bayGroup); + }); + } + + /** + * Draw all available Conducting Equipments of the passed Bay Element. + * Should only be a element. + * @param bayElement - The Bay containing the Conducting Equipment. + * @param bayGroup - The group to which to add the SVGs. + */ + private drawConductingEquipments( + bayElement: Element, + bayGroup: SVGElement + ): void { + this.getConductingEquipments(bayElement) + .filter( + conductingEquipmentElement => + Array.from( + conductingEquipmentElement.querySelectorAll('Terminal') + ).filter( + terminal => terminal.getAttribute('cNodeName') !== 'grounded' + ).length !== 0 + ) + .forEach(conductingEquipmentElement => { + const conductingEquipmentGroup = createConductingEquipmentElement( + conductingEquipmentElement, + (event: Event) => + this.openEditWizard(event, conductingEquipmentElement!) + ); + bayGroup.appendChild(conductingEquipmentGroup); + }); + } + + /** + * Draw all available Connectivity Nodes of the passed Bay Element. + * @param bayElement - The Bay containing the Connectivity Nodes. + * @param bayGroup - The group to which to add the SVGs. + * */ + private drawConnectivityNodes( + bayElement: Element, + bayGroup: SVGElement + ): void { + this.getConnectivityNode(bayElement) + .filter(cNode => getConnectedTerminals(cNode).length > 0) + .forEach(cNode => { + const cNodegroup = createConnectivityNodeElement( + cNode, + (event: Event) => this.openEditWizard(event, cNode) + ); + + bayGroup.appendChild(cNodegroup); + }); + } + + /** + * Draw all connections between the different Equipment in the Bay and the Bay has with other Equipment outside + * the bay. + * @param rootElement - The Element containing all the other elements to which the Bay is connected. + * @param rootGroup - The SVG Element that contains all groups from the elements to add path to. + * @param bayElement - The Bay that holds the Connectivity Node to connect with. + */ + private drawBayConnections( + rootElement: Element, + rootGroup: SVGElement, + bayElement: Element + ): void { + this.getConnectivityNode(bayElement).forEach(cNode => { + this.findEquipment(rootElement, getPathNameAttribute(cNode)).forEach( + equipmentElement => { + const commonParentElement = getCommonParentElement( + cNode, + equipmentElement, + bayElement + ); + const sides = getDirections(equipmentElement, cNode); + + const elementsTerminalPosition = getAbsolutePositionTerminal( + equipmentElement, + sides.startDirection + ); + + const cNodePosition = getConnectivityNodesDrawingPosition( + cNode, + sides.endDirection + ); + + rootGroup + .querySelectorAll(`g[id="${identity(commonParentElement)}"]`) + .forEach(eq => + drawCNodeConnections( + cNodePosition, + elementsTerminalPosition, + eq + ) + ); + + const terminalElement = equipmentElement.querySelector( + `Terminal[connectivityNode="${cNode.getAttribute('pathName')}"]` + ); + + const terminal = createTerminalElement( + terminalElement!, + sides.startDirection, + (event: Event) => this.openEditWizard(event, terminalElement!) + ); + + rootGroup + .querySelectorAll(`g[id="${identity(equipmentElement)}"]`) + .forEach(eq => eq.appendChild(terminal)); + } + ); + }); + } + + /** + * Draw all available Busbars of the passed Voltage Level Element. + * @param voltageLevelElement - The Voltage Level containing the Busbars. + * @param voltageLevelGroup - The group to which to add the SVGs. + */ + private drawBusBars( + voltageLevelElement: Element, + voltageLevelGroup: SVGElement + ): void { + this.getBusBars(voltageLevelElement).forEach(busbarElement => { + const busbarGroup = createBusBarElement( + busbarElement, + getBusBarLength(voltageLevelElement) + ); + voltageLevelGroup.appendChild(busbarGroup); + }); + } + + /** + * Draw all the connections a Busbar has with other Equipment. + * @param rootElement - The Element containing all the other elements to which the Busbar is connected. + * @param rootGroup - The SVG Element that contains all groups from the elements to add path to. + * @param busbarElement - The Busbar that holds the Connectivity Node to connect with. + */ + private drawBusBarConnections( + rootElement: Element, + rootGroup: SVGElement, + busbarElement: Element + ): void { + const pathName = getPathNameAttribute(busbarElement.children[0]); + const busbarPosition = getAbsolutePositionBusBar(busbarElement); + + this.findEquipment(rootElement, pathName).forEach(element => { + const parentElement = element.parentElement; + const elementPosition = getAbsolutePosition(element); + + const elementsTerminalSide = + busbarPosition.y < elementPosition.y ? 'top' : 'bottom'; + + const elementsTerminalPosition = getAbsolutePositionTerminal( + element, + elementsTerminalSide + ); + + const busbarTerminalPosition = { + x: elementsTerminalPosition.x, + y: busbarPosition.y, + }; + + const terminalElement = element.querySelector( + `Terminal[connectivityNode="${pathName}"]` + ); + + rootGroup + .querySelectorAll(`g[id="${identity(parentElement)}"]`) + .forEach(eq => + drawBusBarRoute( + busbarTerminalPosition, + elementsTerminalPosition, + eq + ) + ); + + const terminal = createTerminalElement( + terminalElement!, + elementsTerminalSide, + (event: Event) => this.openEditWizard(event, terminalElement!) + ); + + rootGroup + .querySelectorAll(`g[id="${identity(element)}"]`) + .forEach(eq => eq.appendChild(terminal)); + }); + } + + /** + * Remove all the child elements (and descendants) from the SVG Element, to have a clean start. + */ + private clearSVG(): void { + while (this.svg.firstChild) { + this.svg.removeChild(this.svg.lastChild!); + } + } + + /** + * Draw all the elements of the selected Substation. + */ + drawSVGElements(): void { + // First clean the existing drawing, because the selected substation may have changed. + this.clearSVG(); + + // Only draw the diagram if there is a substation selected. + const selectedSubstationElement = this.selectedSubstation; + if (selectedSubstationElement) { + this.drawSubstation(selectedSubstationElement); + + // Set the new size of the SVG. + const bbox = this.svg.getBBox(); + this.svg.setAttribute( + 'viewBox', + bbox.x - + 10 + + ' ' + + (bbox.y - 10) + + ' ' + + (bbox.width + 20) + + ' ' + + (bbox.height + 20) + ); + this.svg.setAttribute('width', bbox.width + 20 + 'px'); + this.svg.setAttribute('height', bbox.height + 20 + 'px'); + + panzoom(this.panzoomContainer, { + zoomSpeed: 0.2, + maxZoom: 1.5, + minZoom: 0.2, + initialZoom: 0.5, + }); + } + } + + /** + * Open an Edit wizard for an element. + * @param element - The element to show the wizard for. + */ + openEditWizard(event: Event, element: Element): void { + const wizard = wizards[element.tagName].edit(element); + if (wizard) { + this.dispatchEvent(newWizardEvent(wizard)); + event.stopPropagation(); + } + } + + protected updated(_changedProperties: PropertyValues): void { + super.updated(_changedProperties); + + // When the document is updated, we also will retrieve the history again, because probably it has changed. + if ( + _changedProperties.has('doc') || + _changedProperties.has('selectedSubstation') + ) { + this.drawSVGElements(); + } + } + + onSelect(event: SingleSelectedEvent): void { + // Set the selected Substation. + this.selectedSubstation = this.substations[event.detail.index]; + this.requestUpdate('selectedSubstation'); + } + + private renderSubstationSelector(): TemplateResult { + const substationList = this.substations; + if (substationList.length > 0) { + if (substationList.length > 1) { + return html` + + ${substationList.map(substation => { + const name = getNameAttribute(substation); + const description = getDescriptionAttribute(substation); + return html` + ${name}${description !== undefined + ? ' (' + description + ')' + : ''} + `; + })} + + `; + } + + const selectedSubstationElement = this.selectedSubstation!; + const name = getNameAttribute(selectedSubstationElement); + const description = getDescriptionAttribute(selectedSubstationElement); + return html` + + + `; + } + return html` +

    + ${translate('substation.missing')} +

    + `; + } + + render(): TemplateResult { + // TODO: Width and Height should be a percentage, not fixed height/width. + return html` ${this.renderSubstationSelector()} + +
    +
    + +
    +
    `; + } + + static styles = css` + h1 { + color: var(--mdc-theme-on-surface); + font-family: 'Roboto', sans-serif; + font-weight: 300; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + margin: 0px; + line-height: 48px; + padding-left: 0.3em; + } + + #substationSelector, + #selectedSubstation { + width: 35vw; + margin: 0.67em 0 0 0.67em; + } + + #noSubstationSelector { + color: var(--base1); + } + + .sldContainer { + overflow: hidden; + } + + g { + pointer-events: bounding-box; + } + + g[type='Bay'] > g[type='BayLabel'] { + visibility: hidden; + } + g[type='Bay']:hover > g[type='BayLabel'] { + visibility: visible; + } + + g[type='Busbar'] > g[type='BusbarLabel'] { + visibility: hidden; + } + g[type='Busbar'] > g[type='BusbarLabel'] > text, + g[type='Busbar']:hover > g[type='BusbarLabel'] { + visibility: visible; + } + + g[type='Bay']:hover, + g[type='Busbar']:hover, + g[type='ConductingEquipment']:hover, + g[type='ConnectivityNode']:hover, + g[type='PowerTransformer']:hover, + g[type='Terminal']:hover { + outline: 2px dashed var(--mdc-theme-primary); + transition: transform 200ms linear, box-shadow 250ms linear; + } + `; +} diff --git a/packages/open-scd/src/editors/Substation.ts b/packages/open-scd/src/editors/Substation.ts new file mode 100644 index 0000000000..297fd562ab --- /dev/null +++ b/packages/open-scd/src/editors/Substation.ts @@ -0,0 +1,54 @@ +import { LitElement, html, TemplateResult, property, css } from 'lit-element'; +import { get } from 'lit-translate'; + +import '@material/mwc-fab'; + +import './substation/zeroline-pane.js'; +import { newWizardEvent } from '../foundation.js'; +import { wizards } from '../wizards/wizard-library.js'; + +/** An editor [[`plugin`]] for editing the `Substation` section. */ +export default class SubstationPlugin extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property() + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + /** Opens a [[`WizardDialog`]] for creating a new `Substation` element. */ + openCreateSubstationWizard(): void { + const wizard = wizards['Substation'].create(this.doc.documentElement); + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + + render(): TemplateResult { + return html` + ${!this.doc?.querySelector( + ':root > Substation, :root > Line, :root > Process' + ) + ? html`

    + this.openCreateSubstationWizard()} + > +

    ` + : html``}`; + } + + static styles = css` + mwc-fab { + position: fixed; + bottom: 32px; + right: 32px; + } + + :host { + width: 100vw; + } + `; +} diff --git a/packages/open-scd/src/editors/Templates.ts b/packages/open-scd/src/editors/Templates.ts new file mode 100644 index 0000000000..d0a2ea7f29 --- /dev/null +++ b/packages/open-scd/src/editors/Templates.ts @@ -0,0 +1,355 @@ +import { LitElement, html, TemplateResult, property, css } from 'lit-element'; +import { translate } from 'lit-translate'; + +import '@material/mwc-fab'; +import '@material/mwc-icon-button'; +import '@material/mwc-list'; +import '@material/mwc-list/mwc-list-item'; + +import '../filtered-list.js'; +import { + createElement, + identity, + newActionEvent, + newWizardEvent, +} from '../foundation.js'; +import { styles } from './templates/foundation.js'; + +import { + createEnumTypeWizard, + eNumTypeEditWizard, +} from './templates/enumtype-wizard.js'; +import { + createDATypeWizard, + editDaTypeWizard, +} from './templates/datype-wizards.js'; +import { + createDOTypeWizard, + dOTypeWizard, +} from './templates/dotype-wizards.js'; +import { + createLNodeTypeWizard, + lNodeTypeWizard, +} from './templates/lnodetype-wizard.js'; + +import { List } from '@material/mwc-list'; +import { ListItem } from '@material/mwc-list/mwc-list-item'; +import { SingleSelectedEvent } from '@material/mwc-list/mwc-list-foundation'; + +const templates = fetch('public/xml/templates.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + +const nsd74 = fetch('public/xml/IEC_61850-7-4_2007B3.nsd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + +const nsd7420 = fetch('public/xml/IEC_61850-7-420_2019A4.nsd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + +/** An editor [[`plugin`]] for editing the `DataTypeTemplates` section. */ +export default class TemplatesPlugin extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + async openCreateLNodeTypeWizard(): Promise { + this.createDataTypeTemplates(); + + this.dispatchEvent( + newWizardEvent( + createLNodeTypeWizard( + this.doc.querySelector(':root > DataTypeTemplates')!, + await templates, + await nsd74, + await nsd7420 + ) + ) + ); + } + + openLNodeTypeWizard(identity: string): void { + const wizard = lNodeTypeWizard(identity, this.doc); + if (wizard) + this.dispatchEvent( + newWizardEvent(() => lNodeTypeWizard(identity, this.doc)!) + ); + } + + async openCreateDOTypeWizard(): Promise { + this.createDataTypeTemplates(); + + this.dispatchEvent( + newWizardEvent( + createDOTypeWizard( + this.doc.querySelector(':root > DataTypeTemplates')!, + await templates + ) + ) + ); + } + + openDOTypeWizard(identity: string): void { + const wizard = dOTypeWizard(identity, this.doc); + if (wizard) + this.dispatchEvent( + newWizardEvent(() => dOTypeWizard(identity, this.doc)!) + ); + } + + openDATypeWizard(identity: string): void { + const wizard = editDaTypeWizard(identity, this.doc); + if (wizard) + this.dispatchEvent( + newWizardEvent(() => editDaTypeWizard(identity, this.doc)!) + ); + } + + async openCreateDATypeWizard(): Promise { + this.createDataTypeTemplates(); + + this.dispatchEvent( + newWizardEvent( + createDATypeWizard( + this.doc.querySelector(':root > DataTypeTemplates')!, + await templates + ) + ) + ); + } + + openEnumTypeWizard(identity: string): void { + const wizard = eNumTypeEditWizard(identity, this.doc); + if (wizard) + this.dispatchEvent( + newWizardEvent(() => eNumTypeEditWizard(identity, this.doc)!) + ); + } + + async openCreateEnumWizard(): Promise { + this.createDataTypeTemplates(); + + this.dispatchEvent( + newWizardEvent( + createEnumTypeWizard( + this.doc.querySelector(':root > DataTypeTemplates')!, + await templates + ) + ) + ); + } + + createDataTypeTemplates(): void { + if (!this.doc.querySelector(':root > DataTypeTemplates')) + this.dispatchEvent( + newActionEvent({ + new: { + parent: this.doc.documentElement, + element: createElement(this.doc, 'DataTypeTemplates', {}), + }, + }) + ); + } + + render(): TemplateResult { + if (!this.doc?.querySelector(':root > DataTypeTemplates')) + return html`

    + ${translate('templates.missing')} + this.createDataTypeTemplates()} + > +

    `; + return html` +
    +
    +

    + ${translate('scl.LNodeType')} + +

    + + this.openLNodeTypeWizard( + ((e.target).selected).value + )} + > + ${Array.from( + this.doc.querySelectorAll( + ':root > DataTypeTemplates > LNodeType' + ) ?? [] + ).map( + lnodetype => + html`${lnodetype.getAttribute('id')}${lnodetype.getAttribute( + 'lnClass' + )}${lnodetype.querySelectorAll('DO').length}` + )} + +
    +
    +

    + ${translate('scl.DOType')} + +

    + + this.openDOTypeWizard( + ((e.target).selected).value + )} + > + ${Array.from( + this.doc.querySelectorAll(':root > DataTypeTemplates > DOType') ?? + [] + ).map( + dotype => + html`${dotype.getAttribute('id')}${dotype.getAttribute( + 'cdc' + )}${dotype.querySelectorAll('SDO, DA').length}` + )} + +
    +
    +

    + ${translate('scl.DAType')} + +

    + + this.openDATypeWizard( + ((e.target).selected).value + )} + > + ${Array.from( + this.doc.querySelectorAll(':root > DataTypeTemplates > DAType') ?? + [] + ).map( + datype => + html`${datype.getAttribute('id')}${datype.querySelectorAll('BDA').length}` + )} + +
    +
    +

    + ${translate('scl.EnumType')} + +

    + + this.openEnumTypeWizard( + ((e.target).selected).value + )} + > + ${Array.from( + this.doc.querySelectorAll( + ':root > DataTypeTemplates > EnumType' + ) ?? [] + ).map( + enumtype => + html`${enumtype.getAttribute('id')}${enumtype.querySelectorAll('EnumVal').length}` + )} + +
    +
    + `; + } + + static styles = css` + ${styles} + + mwc-fab { + position: fixed; + bottom: 32px; + right: 32px; + } + + :host { + width: 100vw; + } + + #containerTemplates { + display: grid; + grid-gap: 12px; + padding: 8px 12px 16px; + box-sizing: border-box; + grid-template-columns: repeat(auto-fit, minmax(316px, auto)); + } + + @media (max-width: 387px) { + #containerTemplates { + grid-template-columns: repeat(auto-fit, minmax(196px, auto)); + } + } + `; +} diff --git a/packages/open-scd/src/editors/cleanup/control-blocks-container.ts b/packages/open-scd/src/editors/cleanup/control-blocks-container.ts new file mode 100644 index 0000000000..82114a5c6e --- /dev/null +++ b/packages/open-scd/src/editors/cleanup/control-blocks-container.ts @@ -0,0 +1,431 @@ +'use strict'; + +import { + customElement, + css, + html, + LitElement, + property, + TemplateResult, + query, + queryAll, +} from 'lit-element'; +import { classMap } from 'lit-html/directives/class-map'; +import { translate } from 'lit-translate'; + +import '@material/mwc-button'; +import '@material/mwc-icon'; +import '@material/mwc-icon-button-toggle'; +import '@material/mwc-list/mwc-check-list-item.js'; +import '@material/mwc-checkbox'; + +import { Button } from '@material/mwc-button'; +import { Checkbox } from '@material/mwc-checkbox'; +import { List, MWCListIndex } from '@material/mwc-list'; +import { ListItem } from '@material/mwc-list/mwc-list-item.js'; + +import '../../filtered-list.js'; + +import { + Delete, + identity, + isPublic, + newSubWizardEvent, + newActionEvent, +} from '../../foundation.js'; +import { styles } from '../templates/foundation.js'; +import { + controlBlockIcons, + getFilterIcon, + iconType, +} from '../../icons/icons.js'; +import { editGseControlWizard, getGSE } from '../../wizards/gsecontrol.js'; +import { editReportControlWizard } from '../../wizards/reportcontrol.js'; +import { + editSampledValueControlWizard, + getSMV, +} from '../../wizards/sampledvaluecontrol.js'; +import { cleanSCLItems, identitySort } from './foundation.js'; + +type controlType = + | 'GSEControl' + | 'LogControl' + | 'SampledValueControl' + | 'ReportControl'; + +const iconMapping = { + GSEControl: 'gooseIcon', + LogControl: 'logIcon', + SampledValueControl: 'smvIcon', + ReportControl: 'reportIcon', +}; + +/** + * Check whether a control block is instantiated in the Communication section of the SCL file. + * @param controlBlock - SCL control block element. + * @returns true or false if a GSE or SMV element exists under the Communication section. + */ +function getCommAddress(controlBlock: Element): Element | null | undefined { + if (controlBlock.tagName === 'GSEControl') { + return getGSE(controlBlock); + } else if (controlBlock.tagName === 'SampledValueControl') { + return getSMV(controlBlock); + } + return null; +} + +/** An editor component for cleaning SCL Control Blocks. */ +@customElement('cleanup-control-blocks') +export class CleanupControlBlocks extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property({ attribute: false }) + doc!: XMLDocument; + + @property({ type: Boolean }) + disableControlClean = false; + + @property({ type: Array }) + unreferencedControls: Element[] = []; + + @property({ attribute: false }) + selectedControlItems: MWCListIndex | [] = []; + + @query('.deleteButton') + cleanButton!: Button; + + @query('.cleanupList') + cleanupList: List | undefined; + + @queryAll('mwc-check-list-item.cleanupListItem') + cleanupListItems: ListItem[] | undefined; + + @query('.cleanupAddressCheckbox') + cleanupAddressCheckbox: Checkbox | undefined; + + @query('.tGSEControlFilter') + cleanupGSEControlFilter!: Button; + + @query('.tSampledValueControlFilter') + cleanupSampledValueControlFilter!: Button; + + @query('.tLogControlFilter') + cleanupLogControlFilter!: Button; + + @query('.tReportControlFilter') + cleanupReportControlFilter!: Button; + + /** + * Toggle the class hidden in the unused controls list for use by filter buttons. + * @param selectorType - class for selection to toggle the hidden class used by the list. + */ + private toggleHiddenClass(selectorType: string) { + this.cleanupList!.querySelectorAll(`.${selectorType}`).forEach(element => { + element.classList.toggle('hiddenontypefilter'); + if (element.hasAttribute('disabled')) element.removeAttribute('disabled'); + else element.setAttribute('disabled', 'true'); + }); + } + + /** + * Initial update after container is loaded. + */ + async firstUpdated(): Promise { + this.cleanupList?.addEventListener('selected', () => { + this.selectedControlItems = this.cleanupList!.index; + }); + this.toggleHiddenClass('tReportControl'); + } + + /** + * Create a button for filtering in the control block cleanup container. + * @param controlType - SCL Control Type e.g. GSEControl. + * @param initialState - boolean representing whether button is on or off. + * @returns html for the icon button. + */ + private renderFilterIconButton( + controlType: controlType, + initialState = true + ): TemplateResult { + return html`${getFilterIcon(iconMapping[controlType], true)} + ${getFilterIcon(iconMapping[controlType], false)} + `; + } + + /** + * Provide list item in the control block cleanup container. + * @param controlBlock - an unused SCL ControlBlock element. + * @returns html for checklist item. + */ + private renderListItem(controlBlock: Element): TemplateResult { + return html`${controlBlock.getAttribute('name')!} + + + + + + + { + e.stopPropagation(); + if (controlBlock.tagName === 'GSEControl') { + e.target?.dispatchEvent( + newSubWizardEvent(editGseControlWizard(controlBlock)) + ); + } else if (controlBlock.tagName === 'ReportControl') { + e.target?.dispatchEvent( + newSubWizardEvent(editReportControlWizard(controlBlock)) + ); + } else if (controlBlock.tagName === 'SampledValueControl') { + e.target?.dispatchEvent( + newSubWizardEvent(editSampledValueControlWizard(controlBlock)) + ); + } else if (controlBlock.tagName === 'LogControl') { + // not implemented yet, disabled above + } + }} + > + + ${controlBlock.tagName} - + ${controlBlock.closest('IED')?.getAttribute('name')} + (${controlBlock.closest('IED')?.getAttribute('manufacturer') ?? + 'No manufacturer defined'}) + - + ${controlBlock.closest('IED')?.getAttribute('type') ?? + 'No Type Defined'} + ${controlBlockIcons[controlBlock.tagName]} + `; + } + + /** + * Provide delete button the control block cleanup container. + * @returns html for the Delete Button of this container. + */ + private renderDeleteButton(): TemplateResult { + const sizeSelectedItems = (>this.selectedControlItems).size; + + return html`>this.selectedControlItems).size === 0 || + (Array.isArray(this.selectedControlItems) && + !this.selectedControlItems.length)} + @click=${(e: MouseEvent) => { + const cleanItems = Array.from( + (>this.selectedControlItems).values() + ).map(index => this.unreferencedControls[index]); + let gseSmvAddressItems: Delete[] = []; + if (this.cleanupAddressCheckbox!.checked === true) { + // TODO: To be truly complete other elements should also be checked, possibly + // including: tServiceSettings, tReportSettings, tGSESettings, tSMVSettings + gseSmvAddressItems = cleanSCLItems( + cleanItems.map(cb => getCommAddress(cb)!).filter(Boolean) + ); + } + const gseSmvLogReportDeleteActions = + cleanSCLItems(cleanItems).concat(gseSmvAddressItems); + gseSmvLogReportDeleteActions.forEach(deleteAction => + e.target?.dispatchEvent(newActionEvent(deleteAction)) + ); + this.cleanupListItems!.forEach((item) => { + item.selected = false; + }); + }} + >`; + } + + /** + * Render a user selectable table of unreferenced datasets if any exist, otherwise indicate this is not an issue. + * @returns html for table and action button. + */ + private renderUnreferencedControls() { + const unreferencedCBs: Element[] = []; + // Control Blocks which can have a DataSet reference + Array.from( + this.doc?.querySelectorAll( + 'GSEControl, ReportControl, SampledValueControl, LogControl' + ) ?? [] + ) + .filter(isPublic) + .forEach(cb => { + const parent = cb.parentElement; + const name = cb.getAttribute('datSet'); + const isReferenced = parent?.querySelector(`DataSet[name="${name}"]`); + if (parent && (!name || !isReferenced)) unreferencedCBs.push(cb); + }); + this.unreferencedControls = identitySort(unreferencedCBs); + return html` +
    +

    + ${translate('cleanup.unreferencedControls.title')} + (${unreferencedCBs.length}) + + + + +

    + ${this.renderFilterIconButton('LogControl')} + ${this.renderFilterIconButton('ReportControl', false)} + ${this.renderFilterIconButton('GSEControl')} + ${this.renderFilterIconButton('SampledValueControl')} + ${Array.from(unreferencedCBs.map(cb => this.renderListItem(cb)))} + +
    +
    + ${this.renderDeleteButton()} + + >this.selectedControlItems).size === 0 || + (Array.isArray(this.selectedControlItems) && + !this.selectedControlItems.length)} + > +
    + `; + } + + render(): TemplateResult { + return html` +
    ${this.renderUnreferencedControls()}
    + `; + } + + static styles = css` + ${styles} + + section { + display: flex; + flex: 1; + flex-direction: column; + justify-content: space-between; + } + + @media (max-width: 1200px) { + footer { + flex-direction: row; + } + + mwc-check-list-item { + overflow: hidden; + text-overflow: ellipsis; + } + } + + .editItem, + .cautionItem { + --mdc-icon-size: 16px; + } + + .editItem { + visibility: hidden; + opacity: 0; + } + + .cleanupListItem:hover .editItem { + visibility: visible; + opacity: 1; + transition: visibility 0s, opacity 0.5s linear; + } + + .cautionItem { + color: var(--yellow); + } + + .cautionItem[disabled], + .editItem[disabled] { + display: none; + } + + .deleteButton { + float: right; + } + + footer { + align-items: center; + align-content: center; + display: flex; + flex-flow: row wrap; + flex-direction: row-reverse; + justify-content: space-between; + margin: 16px; + } + + filtered-list { + min-height: 20vh; + overflow-y: scroll; + } + + .tGSEControlFilter[on], + .tSampledValueControlFilter[on], + .tLogControlFilter[on], + .tReportControlFilter[on] { + color: var(--secondary); + opacity: 1; + } + + /* Make sure to type filter here + .hidden is set on string filter in filtered-list and must always filter*/ + .cleanupListItem.hiddenontypefilter:not(.hidden) { + display: none; + } + + /* filter disabled, Material Design guidelines for opacity */ + .tGSEControlFilter, + .tSampledValueControlFilter, + .tLogControlFilter, + .tReportControlFilter { + opacity: 0.38; + } + `; +} diff --git a/packages/open-scd/src/editors/cleanup/datasets-container.ts b/packages/open-scd/src/editors/cleanup/datasets-container.ts new file mode 100644 index 0000000000..92acdb0ff6 --- /dev/null +++ b/packages/open-scd/src/editors/cleanup/datasets-container.ts @@ -0,0 +1,245 @@ +'use strict'; + +import { + customElement, + css, + html, + LitElement, + property, + TemplateResult, + query, + queryAll, +} from 'lit-element'; +import { translate } from 'lit-translate'; + +import '@material/mwc-button'; +import '@material/mwc-icon'; +import '@material/mwc-icon-button-toggle'; +import '@material/mwc-list/mwc-check-list-item.js'; +import '@material/mwc-checkbox'; + +import { Button } from '@material/mwc-button'; +import { List, MWCListIndex } from '@material/mwc-list'; +import { ListItem } from '@material/mwc-list/mwc-list-item.js'; + +import '../../filtered-list.js'; + +import { editDataSetWizard } from '../../wizards/dataset.js'; +import { styles } from '../templates/foundation.js'; +import { + identity, + isPublic, + newSubWizardEvent, + newActionEvent, +} from '../../foundation.js'; +import { cleanSCLItems, identitySort } from './foundation.js'; + +/** An editor component for cleaning SCL datasets. */ +@customElement('cleanup-datasets') +export class CleanupDatasets extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property({ attribute: false }) + doc!: XMLDocument; + + @property({ type: Boolean }) + disableDataSetClean = false; + + @property({ type: Array }) + unreferencedDataSets: Element[] = []; + + @property({ attribute: false }) + selectedDatasetItems: MWCListIndex | [] = []; + + @query('.deleteButton') + cleanupButton!: Button; + + @query('.dataSetList') + dataSetList: List | undefined; + + @queryAll('mwc-check-list-item.checkListItem') + dataSetItems: ListItem[] | undefined; + + async firstUpdated(): Promise { + this.dataSetList?.addEventListener('selected', () => { + this.selectedDatasetItems = this.dataSetList!.index; + }); + } + + /** + * Provide list item in the DataSet cleanup container. + * @param dataSet - an unused SCL DataSet element. + * @returns html for checklist item. + */ + private renderListItem(dataSet: Element): TemplateResult { + return html` ${dataSet.getAttribute('name')!} + + + { + e.stopPropagation(); + e.target?.dispatchEvent( + newSubWizardEvent(() => editDataSetWizard(dataSet)) + ); + }} + > + + ${dataSet.closest('IED')?.getAttribute('name')} + (${dataSet.closest('IED')?.getAttribute('manufacturer') ?? + 'No manufacturer defined'}) + - + ${dataSet.closest('IED')?.getAttribute('type') ?? + 'No Type Defined'} + `; + } + + /** + * Provide delete button the dataset cleanup container. + * @returns html for the Delete Button of this container. + */ + private renderDeleteButton(): TemplateResult { + const sizeSelectedItems = (>this.selectedDatasetItems).size; + + return html` >this.selectedDatasetItems).size === 0 || + (Array.isArray(this.selectedDatasetItems) && + !this.selectedDatasetItems.length)} + @click=${(e: MouseEvent) => { + const cleanItems = Array.from( + (>this.selectedDatasetItems).values() + ).map(index => this.unreferencedDataSets[index]); + const deleteActions = cleanSCLItems(cleanItems); + deleteActions.forEach(deleteAction => + e.target?.dispatchEvent(newActionEvent(deleteAction)) + ); + this.dataSetItems!.forEach((item) => { + item.selected = false; + }); + }} + >`; + } + + /** + * Render a user selectable table of unreferenced datasets if any exist, otherwise indicate this is not an issue. + * @returns html for table and action button. + */ + private renderUnreferencedDataSets(): TemplateResult { + const unreferencedDataSets: Element[] = []; + Array.from(this.doc?.querySelectorAll('DataSet') ?? []) + .filter(isPublic) + .forEach(dataSet => { + const parent = dataSet.parentElement; + const name = dataSet.getAttribute('name'); + const isReferenced = Array.from( + parent?.querySelectorAll( + 'GSEControl, ReportControl, SampledValueControl, LogControl' + ) ?? [] + ).some(cb => cb.getAttribute('datSet') === name); + + if (parent && (!name || !isReferenced)) + unreferencedDataSets.push(dataSet); + }); + this.unreferencedDataSets = identitySort(unreferencedDataSets); + return html` +
    +

    + ${translate('cleanup.unreferencedDataSets.title')} + (${unreferencedDataSets.length}) + + + + +

    + ${Array.from( + this.unreferencedDataSets.map( + item => html`${this.renderListItem(item)}` + ) + )} + +
    +
    ${this.renderDeleteButton()}
    + `; + } + + render(): TemplateResult { + return html` +
    ${this.renderUnreferencedDataSets()}
    + `; + } + + static styles = css` + ${styles} + + section { + flex: 1; + display: flex; + flex-direction: column; + justify-content: space-between; + } + + @media (max-width: 1200px) { + footer { + flex-direction: row; + } + + mwc-check-list-item { + overflow: hidden; + text-overflow: ellipsis; + } + } + + .editItem { + --mdc-icon-size: 16px; + } + + .editItem { + visibility: hidden; + opacity: 0; + } + + .checkListItem:hover .editItem { + visibility: visible; + opacity: 1; + transition: visibility 0s, opacity 0.5s linear; + } + + .cleanupDeleteButton { + float: right; + } + + footer { + margin: 16px; + display: flex; + flex-flow: row wrap; + flex-direction: row-reverse; + justify-content: space-between; + align-items: center; + align-content: center; + } + + filtered-list { + max-height: 70vh; + min-height: 20vh; + overflow-y: scroll; + } + `; +} diff --git a/packages/open-scd/src/editors/cleanup/datatypes-container.ts b/packages/open-scd/src/editors/cleanup/datatypes-container.ts new file mode 100644 index 0000000000..f441620942 --- /dev/null +++ b/packages/open-scd/src/editors/cleanup/datatypes-container.ts @@ -0,0 +1,592 @@ +'use strict'; + +import { + customElement, + css, + html, + LitElement, + property, + TemplateResult, + query, + queryAll, +} from 'lit-element'; +import { classMap } from 'lit-html/directives/class-map'; +import { get, translate } from 'lit-translate'; + +import '@material/mwc-button'; +import '@material/mwc-icon'; +import '@material/mwc-icon-button-toggle'; +import '@material/mwc-list/mwc-check-list-item.js'; +import '@material/mwc-checkbox'; + +import { Button } from '@material/mwc-button'; +import { Checkbox } from '@material/mwc-checkbox'; +import { List, MWCListIndex } from '@material/mwc-list'; +import { ListItem } from '@material/mwc-list/mwc-list-item.js'; + +import '../../filtered-list.js'; + +import { + identity, + isPublic, + newLogEvent, + newSubWizardEvent, + newActionEvent, +} from '../../foundation.js'; +import { styles } from '../templates/foundation.js'; +import { + dataTypeTemplateIcons, + getFilterIcon, + iconType, +} from '../../icons/icons.js'; + +import { lNodeTypeWizard } from '../templates/lnodetype-wizard.js'; +import { editDaTypeWizard } from '../templates/datype-wizards.js'; +import { dOTypeWizard } from '../templates/dotype-wizards.js'; +import { eNumTypeEditWizard } from '../templates/enumtype-wizard.js'; + +import { cleanSCLItems, identitySort, uniq } from './foundation.js'; + +type templateType = 'EnumType' | 'DAType' | 'DOType' | 'LNodeType'; + +const iconMapping = { + EnumType: 'enumIcon', + DAType: 'dAIcon', + DOType: 'dOIcon', + LNodeType: 'lNIcon', +}; + +const filterClassMapping: Record = { + EnumType: 'enum-type', + DAType: 'da-type', + DOType: 'do-type', + LNodeType: 'lnode-type', +}; + +/** An editor component for cleaning SCL DataType templates. */ +@customElement('cleanup-data-types') +export class CleanupDataTypes extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property({ attribute: false }) + doc!: XMLDocument; + + @property({ type: Boolean }) + disableControlClean = false; + + @property({ type: Array }) + unreferencedDataTypes: Element[] = []; + + @property({ attribute: false }) + selectedDataTypeItems: MWCListIndex | [] = []; + + @query('.delete-button') + cleanButton!: Button; + + @query('.cleanup-list') + cleanupList: List | undefined; + + @queryAll('mwc-check-list-item.cleanup-list-item') + cleanupListItems: ListItem[] | undefined; + + @query('.clean-sub-types-checkbox') + cleanSubTypesCheckbox: Checkbox | undefined; + + @query('.t-da-type-filter') + cleanupDATypeFilter!: Button; + + @query('.t-enum-type-filter') + cleanupEnumTypeFilter!: Button; + + @query('.t-lnode-type-filter') + cleanupLNodeTypeFilter!: Button; + + @query('.t-do-type-filter') + cleanupDOTypeFilter!: Button; + + /** + * Initial update after container is loaded. + */ + async firstUpdated(): Promise { + this.cleanupList?.addEventListener('selected', () => { + this.selectedDataTypeItems = this.cleanupList!.index; + }); + } + + /** + * Toggle the class hidden in the unused data type list for use by filter buttons to ensure selection works correctly. + * @param selectorType - class for selection to toggle the hidden class used by the list. + */ + private toggleHiddenClass(selectorType: string) { + this.cleanupList!.querySelectorAll(`.${selectorType}`).forEach(element => { + element.classList.toggle('hiddenontypefilter'); + if (element.hasAttribute('disabled')) element.removeAttribute('disabled'); + else element.setAttribute('disabled', 'true'); + }); + } + + /** + * Create a button for filtering in the data type cleanup container. + * @param dataType - SCL Data Type e.g. DOType. + * @param initialState - boolean representing whether button is on or off. + * @returns html for the icon button. + */ + private renderFilterIconButton( + dataType: templateType, + initialState = true + ): TemplateResult { + return html` { + this.toggleHiddenClass(`t-${filterClassMapping[dataType]}`); + }} + >${getFilterIcon(iconMapping[dataType], true)} + ${getFilterIcon(iconMapping[dataType], false)} + `; + } + + /** + * Opens an editor for a given data type. + * @param dType - SCL datatype element. + */ + private openDataTypeEditor(dType: Element) { + if (dType.tagName === 'LNodeType') { + this.dispatchEvent( + newSubWizardEvent(lNodeTypeWizard(identity(dType), this.doc)) + ); + } else if (dType.tagName === 'DAType') { + this.dispatchEvent( + newSubWizardEvent(editDaTypeWizard(identity(dType), this.doc)) + ); + } else if (dType.tagName === 'DOType') { + this.dispatchEvent( + newSubWizardEvent(dOTypeWizard(identity(dType), this.doc)) + ); + } else if (dType.tagName === 'EnumType') { + this.dispatchEvent( + newSubWizardEvent(eNumTypeEditWizard(identity(dType), this.doc)) + ); + } + } + + /** + * Return secondary descriptive parameter for a data type. + * @param dType - SCL datatype element. + * @returns string with secondary descriptive parameter for a data type + */ + private getDataTypeSecondaryText(dType: Element): string | null | undefined { + if (dType.tagName === 'LNodeType') { + return dType.getAttribute('lnClass'); + } else if (dType.tagName === 'DAType') { + return dType.getAttribute('desc'); + } else if (dType.tagName === 'DOType') { + return dType.getAttribute('cdc'); + } else if (dType.tagName === 'EnumType') { + return dType.getAttribute('desc'); + } + return 'Unknown'; + } + + /** + * Provide list item in the data type cleanup container. + * @param dType - an unused SCL DataType element (LNodeType, DOType, DAType EnumType). + * @returns html for checklist item. + */ + private renderListItem(dType: Element): TemplateResult { + return html`${dType.getAttribute('id')!} + + + + ${this.getDataTypeSecondaryText(dType)} + ${dataTypeTemplateIcons[dType.tagName]} + `; + } + + /** + * Recurses through all datatype templates and indexes their usage. + * @returns a map of data type templates usage by id. + */ + private indexDataTypeTemplates(dttStart: Element[]) { + const dataTypeFrequencyUsage = new Map(); + + // recursively fetch all usages + const allUsages = this.fetchTree(dttStart); + + // make frequency count of datatype ids + allUsages.forEach(item => { + dataTypeFrequencyUsage.set( + item, + (dataTypeFrequencyUsage.get(item) || 0) + 1 + ); + }); + return dataTypeFrequencyUsage; + } + + /** + * Given a datatype reference return the appropriate datatype object or null. + * @param element - the SCL Element for which a datatype is required. + * @returns either the datatype or null. + */ + private getSubType(element: Element): Element | null { + const dataTypeTemplates = this.doc.querySelector( + ':root > DataTypeTemplates' + ); + const type = element.getAttribute('type'); + if (element.tagName === 'DO' || element.tagName === 'SDO') { + return dataTypeTemplates!.querySelector(`DOType[id="${type}"]`); + } else if ( + (element.tagName === 'DA' || element.tagName === 'BDA') && + element.getAttribute('bType') === 'Struct' + ) { + return dataTypeTemplates!.querySelector(`DAType[id="${type}"]`); + } else if ( + (element.tagName === 'DA' || element.tagName === 'BDA') && + element.getAttribute('bType') === 'Enum' + ) { + return dataTypeTemplates!.querySelector(`EnumType[id="${type}"]`); + } + return null; + } + + /** + * Recurses from an initial element to find all child references (with duplicates). + * @param rootElement - root SCL Element for which all child datatype references are required. + * @returns the id value for all SCL element datatypes traversed. + */ + private fetchTree(rootElements: Element[]): string[] { + const elementStack = [...rootElements]; + const traversedElements: string[] = []; + + // A max stack depth is defined to avoid recursive references. + const MAX_STACK_DEPTH = 300000; + + while (elementStack.length > 0 && elementStack.length <= MAX_STACK_DEPTH) { + const currentElement = elementStack.pop(); + traversedElements.push(currentElement!.getAttribute('id')!); + + const selector = 'DO, SDO, DA, BDA'; + + Array.from(currentElement!.querySelectorAll(selector)) + .filter(isPublic) + .forEach(element => { + const newElement = this.getSubType(element); + if (newElement !== null) { + elementStack.unshift(newElement); + } + }); + + if (elementStack.length >= MAX_STACK_DEPTH) { + this.dispatchEvent( + newLogEvent({ + kind: 'error', + title: get('cleanup.unreferencedDataTypes.title'), + message: get('cleanup.unreferencedDataTypes.stackExceeded', { + maxStackDepth: MAX_STACK_DEPTH.toString(), + }), + }) + ); + } + } + + return traversedElements; + } + + /** + * Get items from selection list and and any subtypes. + * @returns An array of SCL elements representing selected items and subtypes as required. + */ + public getCleanItems(): Element[] { + const cleanItems = Array.from( + (>this.selectedDataTypeItems).values() + ).map(index => this.unreferencedDataTypes[index]); + + if (this.cleanSubTypesCheckbox!.checked === true) { + const dataTypeTemplates = this.doc.querySelector( + ':root > DataTypeTemplates' + )!; + + const startingLNodeTypes = Array.from( + dataTypeTemplates.querySelectorAll('LNodeType') + ); + const dataTypeUsageCounter = + this.indexDataTypeTemplates(startingLNodeTypes); + + /* Create usage counter for children of LNodeTypes that are used. + We remember that _all_ valid template usages within a project + stem from LNodeTypes. */ + cleanItems.forEach(item => { + if (item.tagName === 'LNodeType') { + const childDataTypeTemplateIds = this.fetchTree([item]); + childDataTypeTemplateIds.forEach(id => { + dataTypeUsageCounter?.set(id, dataTypeUsageCounter.get(id)! - 1); + }); + } + }); + + /* Check to see if children of unused DOType, DAType are present + If so then unless they are from a data type which is part of + the main usage counter they can be safely removed. + If they are part of the main usage counter, then this does not + need to be considered as these DOType and DAType elements are + dangling, they're usage is not relevant. */ + cleanItems.forEach(item => { + if (['DOType', 'DAType'].includes(item.tagName)) { + const unusedDataTypeTemplateChildrenIds = uniq( + this.fetchTree([item]) + ); + unusedDataTypeTemplateChildrenIds.forEach(id => { + if (dataTypeUsageCounter.get(id) === undefined) + cleanItems.push(dataTypeTemplates.querySelector(`[id="${id}"]`)!); + }); + } + }); + + /* Now go through our usage index. If usage is zero then we can + remove the data type template safely. */ + dataTypeUsageCounter?.forEach((count, dataTypeId) => { + if (count <= 0) { + cleanItems.push( + dataTypeTemplates.querySelector(`[id="${dataTypeId}"]`)! + ); + } + }); + } + return cleanItems; + } + + /** + * Provide delete button the data type cleanup container. + * @returns html for the Delete Button of this container. + */ + private renderDeleteButton(): TemplateResult { + return html`>this.selectedDataTypeItems).size === 0 || + (Array.isArray(this.selectedDataTypeItems) && + !this.selectedDataTypeItems.length)} + @click=${() => { + const dataTypeItemsDeleteActions = cleanSCLItems(this.getCleanItems()); + dataTypeItemsDeleteActions.forEach(deleteAction => + this.dispatchEvent(newActionEvent(deleteAction)) + ); + this.cleanupListItems!.forEach((item) => { + item.selected = false; + }); + }} + >`; + } + + /** + * Find unused types by scanning the SCL and comparing with the DataTypeTemplates. + * @param usedSelector - CSS selector for SCL type's instantiated name, e.g. LN, LN0. + * @param keyAttributeName - attribute name for SCL types uniqueness guarantee, e.g. lnType. + * @param templateSelector - CSS selector for SCL template element in DataTypeTemplate section. + * @returns an array of unreferenced elements sorted by their identity string. + */ + private getUnusedType( + usedSelector: string, + keyAttributeName: string, + templateSelector: string + ) { + const usedTypes = uniq( + Array.from(this.doc?.querySelectorAll(usedSelector) ?? []) + .filter(isPublic) + .map(uType => uType.getAttribute(keyAttributeName)) + ); + + const unreferencedTypes: Element[] = []; + Array.from( + this.doc?.querySelectorAll(`DataTypeTemplates > ${templateSelector}`) ?? + [] + ) + .filter(isPublic) + .forEach(dType => { + if (!usedTypes.includes(dType.getAttribute('id') ?? 'Unknown')) + unreferencedTypes.push(dType); + }); + return identitySort(unreferencedTypes); + } + + /** + * Find unused types by scanning the SCL and comparing with the DataTypeTemplates. + * @returns an array of unreferenced elements + */ + private getUnusedTypes() { + const unreferencedLNTypes = this.getUnusedType( + 'LN, LN0', + 'lnType', + 'LNodeType' + ); + const unreferencedDOTypes = this.getUnusedType('DO, SDO', 'type', 'DOType'); + const unreferencedDATypes = this.getUnusedType( + 'DA[bType="Struct"], BDA[bType="Struct"]', + 'type', + 'DAType' + ); + const unreferencedEnumTypes = this.getUnusedType( + 'DA[bType="Enum"], BDA[bType="Enum"]', + 'type', + 'EnumType' + ); + return unreferencedLNTypes.concat( + unreferencedDOTypes, + unreferencedDATypes, + unreferencedEnumTypes + ); + } + + /** + * Render a user selectable table of unreferenced DataTypes if any exist. + * @returns html for table and action button. + */ + private renderUnreferencedDataTypes() { + this.unreferencedDataTypes = this.getUnusedTypes(); + + return html` +
    +

    + ${translate('cleanup.unreferencedDataTypes.title')} + (${this.unreferencedDataTypes.length}) + + + + +

    + ${this.renderFilterIconButton('LNodeType')} + ${this.renderFilterIconButton('DOType')} + ${this.renderFilterIconButton('DAType')} + ${this.renderFilterIconButton('EnumType')} + ${Array.from( + this.unreferencedDataTypes.map(type => this.renderListItem(type)) + )} + +
    +
    + ${this.renderDeleteButton()} + + +
    + `; + } + + render(): TemplateResult { + return html` +
    ${this.renderUnreferencedDataTypes()}
    + `; + } + + static styles = css` + ${styles} + + section { + display: flex; + flex: 1; + flex-direction: column; + justify-content: space-between; + } + + @media (max-width: 1200px) { + footer { + flex-direction: row; + } + + mwc-check-list-item { + overflow: hidden; + text-overflow: ellipsis; + } + } + + .edit-item { + --mdc-icon-size: 16px; + visibility: hidden; + opacity: 0; + } + + .cleanup-list-item:hover .edit-item { + visibility: visible; + opacity: 1; + transition: visibility 0s, opacity 0.5s linear; + } + + .edit-item[disabled] { + display: none; + } + + .delete-button { + float: right; + } + + footer { + align-items: center; + align-content: center; + display: flex; + flex-flow: row wrap; + flex-direction: row-reverse; + justify-content: space-between; + margin: 16px; + } + + filtered-list { + min-height: 20vh; + overflow-y: scroll; + } + + /* filter itself changes colour after click */ + .t-da-type-filter[on], + .t-enum-type-filter[on], + .t-lnode-type-filter[on], + .t-do-type-filter[on] { + color: var(--secondary); + opacity: 1; + } + + /* Make sure to type filter here + .hidden is set on string filter in filtered-list and must always filter*/ + .cleanup-list-item.hiddenontypefilter:not(.hidden) { + display: none; + } + + /* filter disabled, Material Design guidelines for opacity */ + .t-da-type-filter, + .t-enum-type-filter, + .t-lnode-type-filter, + .t-do-type-filter { + opacity: 0.38; + } + `; +} diff --git a/packages/open-scd/src/editors/cleanup/foundation.ts b/packages/open-scd/src/editors/cleanup/foundation.ts new file mode 100644 index 0000000000..f870dbd66b --- /dev/null +++ b/packages/open-scd/src/editors/cleanup/foundation.ts @@ -0,0 +1,63 @@ +'use strict'; + +import { identity, Delete } from '../../foundation.js'; + +/** + * Clean SCL items as requested by removing SCL elements specified from the SCL file + * @param cleanItems - SCL elements to be removed from the SCL file + * @returns an actions array to support undo/redo + */ +export function cleanSCLItems(cleanItems: Element[]): Delete[] { + const actions: Delete[] = []; + if (cleanItems) { + cleanItems.forEach(item => { + actions.push({ + old: { + parent: item.parentElement!, + element: item, + reference: item!.nextSibling, + }, + }); + }); + } + return actions; +} + +/** + * Provide frequency count of elements. + * @param arr - An array of elements + * @returns a Map of element strings and frequencies + */ +export function countBy(arr: string[]): Map { + return arr.reduce((acc, e) => acc.set(e, (acc.get(e) || 0) + 1), new Map()); +} + +/** + * Sort a list of Elements by their identity string. + * @param elements - an array of Elements. + * @returns a sorted list of elements. + */ +export function identitySort(elements: Element[]): Element[] { + return elements.sort((a: Element, b: Element) => { + // sorting using the identity ensures sort order includes IED and other useful properties + const aId = identity(a); + const bId = identity(b); + if (aId < bId) { + return -1; + } + if (aId > bId) { + return 1; + } + // names must be equal + return 0; + }); +} + +/** + * Return a de-duplicate set of array elements. + * @param arr - an array of items with duplicates. + * @returns an array of items without duplicates. + */ +export function uniq(arr: unknown[]): unknown[] { + return Array.from(new Set(arr)); +} diff --git a/packages/open-scd/src/editors/communication/connectedap-editor.ts b/packages/open-scd/src/editors/communication/connectedap-editor.ts new file mode 100644 index 0000000000..10cc184ee6 --- /dev/null +++ b/packages/open-scd/src/editors/communication/connectedap-editor.ts @@ -0,0 +1,62 @@ +import { + LitElement, + TemplateResult, + customElement, + html, + property, +} from 'lit-element'; + +import '@material/mwc-fab'; + +import '../../action-icon.js'; +import { newWizardEvent, newActionEvent } from '../../foundation.js'; +import { editConnectedApWizard } from '../../wizards/connectedap.js'; + +/** [[`Communication`]] subeditor for a `ConnectedAP` element. */ +@customElement('connectedap-editor') +export class ConnectedAPEditor extends LitElement { + /** SCL element ConnectedAP */ + @property({ attribute: false }) + element!: Element; + /** ConnectedAP attribute apName */ + @property({ type: String }) + get apName(): string { + return this.element.getAttribute('apName') ?? 'UNDEFINED'; + } + + private openEditWizard(): void { + this.dispatchEvent(newWizardEvent(editConnectedApWizard(this.element))); + } + + remove(): void { + if (this.element) + this.dispatchEvent( + newActionEvent({ + old: { + parent: this.element.parentElement!, + element: this.element, + reference: this.element.nextSibling, + }, + }) + ); + } + + render(): TemplateResult { + return html` + + + `; + } +} diff --git a/packages/open-scd/src/editors/communication/gse-editor.ts b/packages/open-scd/src/editors/communication/gse-editor.ts new file mode 100644 index 0000000000..a7f03f6222 --- /dev/null +++ b/packages/open-scd/src/editors/communication/gse-editor.ts @@ -0,0 +1,67 @@ +import { + LitElement, + TemplateResult, + html, + customElement, + property, + state, +} from 'lit-element'; + +import '@material/mwc-icon'; + +import '../../action-icon.js'; +import { newWizardEvent, newActionEvent } from '../../foundation.js'; +import { sizableGooseIcon } from '../../icons/icons.js'; +import { editGseWizard } from '../../wizards/gse.js'; + +@customElement('gse-editor') +export class GseEditor extends LitElement { + @property({ attribute: false }) + doc!: XMLDocument; + + @property({ attribute: false }) + element!: Element; + + @state() + get label(): string { + return ( + this.element.getAttribute('ldInst') + + '/' + + this.element.getAttribute('cbName') + ); + } + + private openEditWizard(): void { + this.dispatchEvent(newWizardEvent(editGseWizard(this.element))); + } + + remove(): void { + if (this.element) + this.dispatchEvent( + newActionEvent({ + old: { + parent: this.element.parentElement!, + element: this.element, + reference: this.element.nextSibling, + }, + }) + ); + } + + render(): TemplateResult { + return html` + `; + } +} diff --git a/packages/open-scd/src/editors/communication/smv-editor.ts b/packages/open-scd/src/editors/communication/smv-editor.ts new file mode 100644 index 0000000000..6938cfc84a --- /dev/null +++ b/packages/open-scd/src/editors/communication/smv-editor.ts @@ -0,0 +1,67 @@ +import { + LitElement, + TemplateResult, + html, + customElement, + property, + state, +} from 'lit-element'; + +import '@material/mwc-icon'; + +import '../../action-icon.js'; +import { sizableSmvIcon } from '../../icons/icons.js'; +import { newWizardEvent, newActionEvent } from '../../foundation.js'; +import { editSMvWizard } from '../../wizards/smv.js'; + +@customElement('smv-editor') +export class SmvEditor extends LitElement { + @property({ attribute: false }) + doc!: XMLDocument; + + @property({ attribute: false }) + element!: Element; + + @state() + get label(): string { + return ( + this.element.getAttribute('ldInst') + + '/' + + this.element.getAttribute('cbName') + ); + } + + private openEditWizard(): void { + this.dispatchEvent(newWizardEvent(editSMvWizard(this.element))); + } + + remove(): void { + if (this.element) + this.dispatchEvent( + newActionEvent({ + old: { + parent: this.element.parentElement!, + element: this.element, + reference: this.element.nextSibling, + }, + }) + ); + } + + render(): TemplateResult { + return html` + `; + } +} diff --git a/packages/open-scd/src/editors/communication/subnetwork-editor.ts b/packages/open-scd/src/editors/communication/subnetwork-editor.ts new file mode 100644 index 0000000000..398557ec85 --- /dev/null +++ b/packages/open-scd/src/editors/communication/subnetwork-editor.ts @@ -0,0 +1,208 @@ +import { + LitElement, + TemplateResult, + customElement, + html, + property, + css, +} from 'lit-element'; +import { translate } from 'lit-translate'; + +import '@material/mwc-icon-button'; + +import './connectedap-editor.js'; +import './gse-editor.js'; +import './smv-editor.js'; +import { + newWizardEvent, + newActionEvent, + compareNames, +} from '../../foundation.js'; +import { createConnectedApWizard } from '../../wizards/connectedap.js'; +import { wizards } from '../../wizards/wizard-library.js'; + +/** [[`Communication`]] subeditor for a `SubNetwork` element. */ +@customElement('subnetwork-editor') +export class SubNetworkEditor extends LitElement { + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + /** SCL element SubNetwork */ + @property({ attribute: false }) + element!: Element; + /** SubNetwork attribute name */ + @property({ type: String }) + get name(): string { + return this.element.getAttribute('name') ?? 'UNDEFINED'; + } + /** SubNetwork attribute desc */ + @property({ type: String }) + get desc(): string | null { + return this.element.getAttribute('desc') ?? null; + } + /** SubNetwork attribute type */ + @property({ type: String }) + get type(): string | null { + return this.element.getAttribute('type') ?? null; + } + /** SubNetwork child elements BitRate label */ + @property({ type: String }) + get bitrate(): string | null { + const bitRate = this.element.querySelector('BitRate'); + if (bitRate === null) return null; + const bitRateValue = bitRate.textContent ?? ''; + const m = bitRate.getAttribute('multiplier'); + const unit = ` ${m ?? ''}b/s`; + return bitRateValue ? bitRateValue + unit : null; + } + + private openConnectedAPwizard(): void { + this.dispatchEvent(newWizardEvent(createConnectedApWizard(this.element))); + } + + private openEditWizard(): void { + const wizard = wizards['SubNetwork'].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, + }, + }) + ); + } + + private renderSmvEditors(iedName: string): TemplateResult[] { + return Array.from( + this.element + .closest('Communication') + ?.querySelectorAll(`ConnectedAP[iedName="${iedName}"] > SMV`) ?? [] + ).map( + smv => html`` + ); + } + + private renderGseEditors(iedName: string): TemplateResult[] { + return Array.from( + this.element + .closest('Communication') + ?.querySelectorAll(`ConnectedAP[iedName="${iedName}"] > GSE`) ?? [] + ).map( + gse => html`` + ); + } + + private renderConnectedApEditors(iedName: string): TemplateResult[] { + return Array.from( + this.element.parentElement?.querySelectorAll( + `:scope > SubNetwork > ConnectedAP[iedName="${iedName}"]` + ) ?? [] + ).map( + connectedAP => + html`` + ); + } + + private renderIEDs(): TemplateResult[] { + return Array.from(this.element.querySelectorAll(':scope > ConnectedAP')) + .map(connAP => connAP.getAttribute('iedName')!) + .filter((v, i, a) => a.indexOf(v) === i) + .sort(compareNames) + .map( + iedName => html` + ${this.renderConnectedApEditors(iedName)}${this.renderGseEditors( + iedName + )}${this.renderSmvEditors(iedName)} + ` + ); + } + + private subNetworkSpecs(): string { + if (!this.type && !this.bitrate) return ''; + + return `(${[this.type, this.bitrate].filter(text => !!text).join(' — ')})`; + } + + private header(): string { + return `${this.name} ${this.desc === null ? '' : `— ${this.desc}`} + ${this.subNetworkSpecs()}`; + } + + render(): TemplateResult { + return html` + + this.openEditWizard()} + > + + + this.remove()} + > + + + + +
    ${this.renderIEDs()}
    +
    `; + } + + static styles = css` + #iedContainer { + display: grid; + box-sizing: border-box; + gap: 12px; + padding: 8px 12px 16px; + grid-template-columns: repeat(auto-fit, minmax(150px, auto)); + } + + #iedSection:not(:focus):not(:focus-within) .disabled { + display: none; + } + + #iedSection:not(:focus):not(:focus-within) gse-editor { + display: none; + } + + #iedSection:not(:focus):not(:focus-within) smv-editor { + display: none; + } + + #iedSection .disabled { + pointer-events: none; + opacity: 0.5; + } + + abbr { + text-decoration: none; + border-bottom: none; + } + `; +} diff --git a/packages/open-scd/src/editors/ied/access-point-container.ts b/packages/open-scd/src/editors/ied/access-point-container.ts new file mode 100644 index 0000000000..f306fba968 --- /dev/null +++ b/packages/open-scd/src/editors/ied/access-point-container.ts @@ -0,0 +1,123 @@ +import { + css, + customElement, + html, + property, + PropertyValues, + state, + TemplateResult, +} from 'lit-element'; +import { nothing } from 'lit-html'; +import { translate } from 'lit-translate'; + +import { + getDescriptionAttribute, + getNameAttribute, + newWizardEvent, +} from '../../foundation.js'; +import { accessPointIcon } from '../../icons/ied-icons.js'; +import { editServicesWizard } from '../../wizards/services.js'; + +import '../../action-pane.js'; +import './server-container.js'; + +import { Container } from './foundation.js'; + +/** [[`IED`]] plugin subeditor for editing `AccessPoint` element. */ +@customElement('access-point-container') +export class AccessPointContainer extends Container { + @property() + selectedLNClasses: string[] = []; + + protected updated(_changedProperties: PropertyValues): void { + super.updated(_changedProperties); + + // When the LN Classes filter is updated, we also want to trigger rendering for the LN Elements. + if (_changedProperties.has('selectedLNClasses')) { + this.requestUpdate('lnElements'); + } + } + + private renderServicesIcon(): TemplateResult { + const services: Element | null = this.element.querySelector('Services'); + + if (!services) { + return html``; + } + + return html` + this.openSettingsWizard(services)} + > + `; + } + + private openSettingsWizard(services: Element): void { + const wizard = editServicesWizard(services); + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + + @state() + private get lnElements(): Element[] { + return Array.from(this.element.querySelectorAll(':scope > LN')).filter( + element => { + const lnClass = element.getAttribute('lnClass') ?? ''; + return this.selectedLNClasses.includes(lnClass); + } + ); + } + + private header(): TemplateResult { + const name = getNameAttribute(this.element); + const desc = getDescriptionAttribute(this.element); + + return html`${name}${desc ? html` — ${desc}` : nothing}`; + } + + render(): TemplateResult { + const lnElements = this.lnElements; + + return html` + ${accessPointIcon} + ${this.renderServicesIcon()} + ${Array.from(this.element.querySelectorAll(':scope > Server')).map( + server => + html`` + )} +
    + ${lnElements.map( + ln => html`` + )} +
    +
    `; + } + + static styles = css` + #lnContainer { + display: grid; + grid-gap: 12px; + box-sizing: border-box; + grid-template-columns: repeat(auto-fit, minmax(316px, auto)); + } + + @media (max-width: 387px) { + #lnContainer { + grid-template-columns: repeat(auto-fit, minmax(196px, auto)); + } + } + `; +} diff --git a/packages/open-scd/src/editors/ied/da-container.ts b/packages/open-scd/src/editors/ied/da-container.ts new file mode 100644 index 0000000000..ee3d7f4cbf --- /dev/null +++ b/packages/open-scd/src/editors/ied/da-container.ts @@ -0,0 +1,238 @@ +import { + css, + customElement, + html, + property, + query, + TemplateResult, +} from 'lit-element'; +import { nothing } from 'lit-html'; +import { translate } from 'lit-translate'; + +import '@material/mwc-icon-button-toggle'; +import { IconButtonToggle } from '@material/mwc-icon-button-toggle'; + +import '../../action-pane.js'; +import { getNameAttribute, newWizardEvent } from '../../foundation.js'; +import { wizards } from '../../wizards/wizard-library.js'; +import { + DaiFieldTypes, + getCustomField, +} from '../../wizards/foundation/dai-field-type.js'; +import { createDaInfoWizard } from './da-wizard.js'; +import { + Container, + getInstanceDAElement, + getValueElements, +} from './foundation.js'; +import { createDAIWizard } from '../../wizards/dai.js'; +import { + determineUninitializedStructure, + initializeElements, +} from '../../foundation/dai.js'; + +/** [[`IED`]] plugin subeditor for editing `(B)DA` element. */ +@customElement('da-container') +export class DAContainer extends Container { + /** + * The optional DAI of this (B)DA. + */ + @property({ attribute: false }) + instanceElement!: Element; + + @query('#toggleButton') + toggleButton: IconButtonToggle | undefined; + + private header(): TemplateResult { + const name = getNameAttribute(this.element); + const bType = this.element.getAttribute('bType') ?? nothing; + const fc = this.element.getAttribute('fc'); + + if (this.instanceElement) { + return html`${name} — ${bType}${fc ? html` [${fc}]` : ``}`; + } else { + return html`${name} — ${bType}${fc ? html` [${fc}]` : ``}`; + } + } + + /** + * Get the nested (B)DA element(s) if available. + * @returns The nested (B)DA element(s) of this (B)DA container. + */ + private getBDAElements(): Element[] { + const type = this.element!.getAttribute('type') ?? undefined; + const doType = this.element!.closest('SCL')!.querySelector( + `:root > DataTypeTemplates > DAType[id="${type}"]` + ); + if (doType != null) { + return Array.from(doType!.querySelectorAll(':scope > BDA')); + } + return []; + } + + /** + * Use the list of ancestor to retrieve the list from DO to the current (B)DA Element. + * This structure is used to create the initialized structure from (DOI/SDI/DAI). + * + * @returns The list from the DO Element to the current (B)DA Element. + */ + private getTemplateStructure(): Element[] { + // Search for the DO Element, this will be the starting point. + const doElement = this.ancestors.filter( + element => element.tagName == 'DO' + )[0]; + // From the DO Element and below we need all the elements (BDA, SDO, DA) + const dataStructure = this.ancestors.slice( + this.ancestors.indexOf(doElement) + ); + // Add the current DA Element also to the list. + dataStructure.push(this.element); + return dataStructure; + } + + private openCreateWizard(): void { + // Search the LN(0) Element to start creating the initialized structure. + const lnElement = this.ancestors.filter(element => + ['LN0', 'LN'].includes(element.tagName) + )[0]; + const templateStructure = this.getTemplateStructure(); + // First determine where to start creating new elements (DOI/SDI/DAI) + const [parentElement, uninitializedTemplateStructure] = + determineUninitializedStructure(lnElement, templateStructure); + // Next create all missing elements (DOI/SDI/DAI) + const newElement = initializeElements(uninitializedTemplateStructure); + + if (newElement) { + const wizard = createDAIWizard(parentElement, newElement, this.element); + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + } + + private openEditWizard(val: Element): void { + const wizard = wizards['DAI'].edit(this.element, val); + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + + private getValueDisplayString(val: Element): string { + const sGroup = val.getAttribute('sGroup'); + const prefix = sGroup ? `SG${sGroup}: ` : ''; + const value = val.textContent?.trim(); + + return `${prefix}${value}`; + } + + private renderVal(): TemplateResult[] { + const bType = this.element!.getAttribute('bType'); + const element = this.instanceElement ?? this.element; + const hasInstantiatedVal = !!this.instanceElement?.querySelector('Val'); + + return hasInstantiatedVal + ? getValueElements(element).map( + val => html`
    +
    +

    ${this.getValueDisplayString(val)}

    +
    +
    + this.openEditWizard(val)} + > + +
    +
    ` + ) + : [ + html`
    +
    +

    +
    +
    + this.openCreateWizard()} + > + +
    +
    `, + ]; + } + + render(): TemplateResult { + const bType = this.element!.getAttribute('bType'); + + return html` + + + + this.dispatchEvent( + newWizardEvent( + createDaInfoWizard( + this.element, + this.instanceElement, + this.ancestors, + this.nsdoc + ) + ) + )} + > + + ${bType === 'Struct' + ? html` + this.requestUpdate()} + > + + ` + : html`${this.renderVal()}`} + ${this.toggleButton?.on && bType === 'Struct' + ? this.getBDAElements().map( + bdaElement => + html` + ` + ) + : nothing} + + `; + } + + static styles = css` + h4 { + color: var(--mdc-theme-on-surface); + font-family: 'Roboto', sans-serif; + font-weight: 300; + margin: 0px; + padding-left: 0.3em; + word-break: break-word; + white-space: pre-wrap; + } + + mwc-icon-button { + color: var(--mdc-theme-on-surface); + } + `; +} diff --git a/packages/open-scd/src/editors/ied/da-wizard.ts b/packages/open-scd/src/editors/ied/da-wizard.ts new file mode 100644 index 0000000000..fb630be59e --- /dev/null +++ b/packages/open-scd/src/editors/ied/da-wizard.ts @@ -0,0 +1,222 @@ +import { html } from 'lit-element'; +import { TemplateResult } from 'lit-html'; +import { get, translate } from 'lit-translate'; + +import '@material/mwc-textarea'; +import '@material/mwc-textfield'; + +import { + getDescriptionAttribute, + getInstanceAttribute, + getNameAttribute, + Wizard, +} from '../../foundation.js'; +import { Nsdoc } from '../../foundation/nsdoc.js'; +import { + findDOTypeElement, + findElement, + findLogicaNodeElement, + getValueElements, +} from './foundation.js'; + +function getValues(element: Element): string { + const hasValue = getValueElements(element).length !== 0; + + return hasValue + ? `${getValueElements(element) + .map(val => val.textContent ?? '') + .join(', ')}` + : '-'; +} + +function renderFields( + element: Element, + instanceElement: Element | undefined, + ancestors: Element[], + nsdoc: Nsdoc +): TemplateResult[] { + const iedElement = findElement(ancestors, 'IED'); + const accessPointElement = findElement(ancestors, 'AccessPoint'); + const lDeviceElement = findElement(ancestors, 'LDevice'); + const logicalNodeElement = findLogicaNodeElement(ancestors); + const doElement = findElement(ancestors, 'DO'); + const doTypeElement = findDOTypeElement(doElement); + + return [ + html` + + + `, + html` + + + `, + html` + + + `, + html` + + + `, + html` + + + `, + html` + + + `, + html`
    `, + html` + + + `, + html` + + + `, + html`
    `, + html` + + + `, + html` + + + `, + html` + + + `, + html`
    `, + html` + + + `, + html` + + + `, + html` + + + `, + ]; +} + +export function createDaInfoWizard( + element: Element, + instanceElement: Element | undefined, + ancestors: Element[], + nsdoc: Nsdoc +): Wizard { + return [ + { + title: get('iededitor.wizard.daTitle'), + content: [...renderFields(element, instanceElement, ancestors, nsdoc)], + }, + ]; +} diff --git a/packages/open-scd/src/editors/ied/do-container.ts b/packages/open-scd/src/editors/ied/do-container.ts new file mode 100644 index 0000000000..511504cc09 --- /dev/null +++ b/packages/open-scd/src/editors/ied/do-container.ts @@ -0,0 +1,162 @@ +import { + customElement, + html, + property, + query, + TemplateResult, +} from 'lit-element'; +import { nothing } from 'lit-html'; +import { translate } from 'lit-translate'; + +import '@material/mwc-icon-button-toggle'; +import { IconButtonToggle } from '@material/mwc-icon-button-toggle'; + +import '../../action-pane.js'; +import './da-container.js'; + +import { + getDescriptionAttribute, + getNameAttribute, + newWizardEvent, +} from '../../foundation.js'; +import { createDoInfoWizard } from './do-wizard.js'; +import { + Container, + findDOTypeElement, + getInstanceDAElement, +} from './foundation.js'; + +/** [[`IED`]] plugin subeditor for editing `DO` element. */ +@customElement('do-container') +export class DOContainer extends Container { + /** + * The optional DOI of this DO. + */ + @property({ attribute: false }) + instanceElement!: Element; + + @query('#toggleButton') toggleButton: IconButtonToggle | undefined; + + private header(): TemplateResult { + const name = getNameAttribute(this.element); + const desc = getDescriptionAttribute(this.element); + + if (this.instanceElement != null) { + return html`${name}${desc ? html` — ${desc}` : nothing}`; + } else { + return html`${name}${desc ? html` — ${desc}` : nothing}`; + } + } + + /** + * Get the nested SDO element(s). + * @returns The nested SDO element(s) of this DO container. + */ + private getDOElements(): Element[] { + const doType = findDOTypeElement(this.element); + if (doType != null) { + return Array.from(doType.querySelectorAll(':scope > SDO')); + } + return []; + } + + /** + * Get the nested (B)DA element(s). + * @returns The nested (B)DA element(s) of this DO container. + */ + private getDAElements(): Element[] { + const type = this.element.getAttribute('type') ?? undefined; + const doType = this.element + .closest('SCL')! + .querySelector(`:root > DataTypeTemplates > DOType[id="${type}"]`); + if (doType != null) { + return Array.from(doType!.querySelectorAll(':scope > DA')); + } + return []; + } + + /** + * Get the instance element (SDI) of a (S)DO element (if available) + * @param dO - The (S)DO object to search with. + * @returns The optional SDI element. + */ + private getInstanceDOElement(dO: Element): Element | null { + const sdoName = getNameAttribute(dO); + if (this.instanceElement) { + return this.instanceElement.querySelector( + `:scope > SDI[name="${sdoName}"]` + ); + } + return null; + } + + render(): TemplateResult { + const daElements = this.getDAElements(); + const doElements = this.getDOElements(); + + return html` + + + this.dispatchEvent( + newWizardEvent( + createDoInfoWizard( + this.element, + this.instanceElement, + this.ancestors, + this.nsdoc + ) + ) + )} + > + + ${daElements.length > 0 || doElements.length > 0 + ? html` + this.requestUpdate()} + > + ` + : nothing} + ${this.toggleButton?.on + ? daElements.map( + daElement => + html`` + ) + : nothing} + ${this.toggleButton?.on + ? doElements.map( + doElement => + html`` + ) + : nothing} + `; + } +} diff --git a/packages/open-scd/src/editors/ied/do-wizard.ts b/packages/open-scd/src/editors/ied/do-wizard.ts new file mode 100644 index 0000000000..60292a92f5 --- /dev/null +++ b/packages/open-scd/src/editors/ied/do-wizard.ts @@ -0,0 +1,168 @@ +import { html } from 'lit-element'; +import { TemplateResult } from 'lit-html'; +import { get, translate } from 'lit-translate'; + +import '@material/mwc-textarea'; +import '@material/mwc-textfield'; + +import { + getDescriptionAttribute, + getInstanceAttribute, + getNameAttribute, + newWizardEvent, + Wizard, +} from '../../foundation.js'; +import { Nsdoc } from '../../foundation/nsdoc.js'; +import { + findDOTypeElement, + findElement, + findLogicaNodeElement, +} from './foundation.js'; + +function renderFields( + element: Element, + instanceElement: Element | undefined, + ancestors: Element[], + nsdoc: Nsdoc +): TemplateResult[] { + const iedElement = findElement(ancestors, 'IED'); + const accessPointElement = findElement(ancestors, 'AccessPoint'); + const lDeviceElement = findElement(ancestors, 'LDevice'); + const logicalNodeElement = findLogicaNodeElement(ancestors); + const doTypeElement = findDOTypeElement(element); + + return [ + html` + + + `, + html` + + + `, + html` + + + `, + html` + + + `, + html`
    `, + html` + + + `, + html` + + + `, + html` + + + `, + html`
    `, + html` + + + `, + html` + + + `, + html` + + + `, + ]; +} + +export function createDoInfoWizard( + element: Element, + instanceElement: Element | undefined, + ancestors: Element[], + nsdoc: Nsdoc +): Wizard { + return [ + { + title: get('iededitor.wizard.doTitle'), + content: [...renderFields(element, instanceElement, ancestors, nsdoc)], + }, + ]; +} diff --git a/packages/open-scd/src/editors/ied/element-path.ts b/packages/open-scd/src/editors/ied/element-path.ts new file mode 100644 index 0000000000..09c0bec96e --- /dev/null +++ b/packages/open-scd/src/editors/ied/element-path.ts @@ -0,0 +1,47 @@ +import { + css, + customElement, + html, + LitElement, + state, + TemplateResult, +} from 'lit-element'; +import { FullElementPathEvent } from './foundation.js'; + +@customElement('element-path') +export class ElementPath extends LitElement { + + @state() + elementNames: string[] = []; + + constructor() { + super(); + + const parentSection = this.closest('section'); + if (parentSection) { + parentSection.addEventListener('full-element-path', (event: FullElementPathEvent) => { + this.elementNames = event.detail.elementNames; + }); + } + } + + render(): TemplateResult { + return html` +

    ${this.elementNames.join(' / ')}

    + `; + } + + static styles = css` + h3 { + color: var(--mdc-theme-on-surface); + font-family: 'Roboto', sans-serif; + font-weight: 300; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + margin: 0px; + line-height: 48px; + padding-left: 0.3em; + transition: background-color 150ms linear; + }`; +} diff --git a/packages/open-scd/src/editors/ied/foundation.ts b/packages/open-scd/src/editors/ied/foundation.ts new file mode 100644 index 0000000000..b88bff771f --- /dev/null +++ b/packages/open-scd/src/editors/ied/foundation.ts @@ -0,0 +1,150 @@ +import { LitElement, property } from 'lit-element'; + +import { getInstanceAttribute, getNameAttribute } from '../../foundation.js'; +import { Nsdoc } from '../../foundation/nsdoc.js'; + +/** Base class for all containers inside the IED Editor. */ +export class Container extends LitElement { + @property() + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + @property({ attribute: false }) + element!: Element; + + @property() + nsdoc!: Nsdoc; + + @property() + ancestors: Element[] = []; + + constructor() { + super(); + + this.addEventListener('focus', event => { + event.stopPropagation(); + const pathOfAncestorNames = this.ancestors.map( + ancestor => getTitleForElementPath(ancestor)! + ); + pathOfAncestorNames.push(getTitleForElementPath(this.element)!); + + this.dispatchEvent(newFullElementPathEvent(pathOfAncestorNames)); + }); + + this.addEventListener('blur', () => { + this.dispatchEvent( + newFullElementPathEvent( + this.ancestors.map(ancestor => getTitleForElementPath(ancestor)!) + ) + ); + }); + } +} + +/** + * Search for an element with a passed tag-name in the list of ancestors passed. + * @param ancestors - The list of elements to search in for an LN or LN0 element. + * @param tagName - The Tag-name of the element to search for. + * @returns The found element with the tag-name or null if not found. + */ +export function findElement( + ancestors: Element[], + tagName: string +): Element | null { + return ancestors.find(element => element.tagName === tagName) ?? null; +} + +/** + * Search for the LN0 or LN element in the list of ancestors passed. + * @param ancestors - The list of elements to search in for an LN or LN0 element. + * @returns The LN0/LN Element found or null if not found. + */ +export function findLogicaNodeElement(ancestors: Element[]): Element | null { + let element = findElement(ancestors, 'LN0'); + if (!element) { + element = findElement(ancestors, 'LN'); + } + return element; +} + +/** + * With the passed DO Element retrieve the type attribute and search for the DOType in the DataType Templates section. + * @param element - The DO Element. + * @returns The DOType element found in the DataType Templates section or null if it not exists. + */ +export function findDOTypeElement(element: Element | null): Element | null { + if (element && element.hasAttribute('type')) { + const type = element.getAttribute('type'); + return element + .closest('SCL')! + .querySelector(`:root > DataTypeTemplates > DOType[id="${type}"]`); + } + return null; +} + +/** + * Get the instance element (SDI / DAI) of a DA element (if available) + * @param parentInstance - The parent instance if available to search in for other instance elements. + * @param da - The (B)DA object to search with. + * @returns The optional SDI / DAI element. + */ +export function getInstanceDAElement( + parentInstance: Element | null, + da: Element +): Element | null { + if (parentInstance) { + const daName = getNameAttribute(da); + const bType = da.getAttribute('bType'); + if (bType == 'Struct') { + return parentInstance.querySelector(`:scope > SDI[name="${daName}"]`); + } + return parentInstance.querySelector(`:scope > DAI[name="${daName}"]`); + } + return null; +} + +export function getTitleForElementPath(element: Element): string { + switch (element.tagName) { + case 'LN': + case 'LN0': { + return element.getAttribute('lnClass')!; + } + case 'LDevice': { + return (getNameAttribute(element) ?? getInstanceAttribute(element))!; + } + case 'Server': { + return 'Server'; + } + default: { + return element.getAttribute('name')!; + } + } +} + +/** @returns Array of 'Val' elements for a given parent data attribute */ +export function getValueElements(parent: Element): Element[] { + return Array.from(parent.querySelectorAll('Val')); +} + +export interface FullElementPathDetail { + elementNames: string[]; +} +export type FullElementPathEvent = CustomEvent; +export function newFullElementPathEvent( + elementNames: string[], + eventInitDict?: CustomEventInit +): FullElementPathEvent { + return new CustomEvent('full-element-path', { + bubbles: true, + composed: true, + ...eventInitDict, + detail: { elementNames, ...eventInitDict?.detail }, + }); +} + +declare global { + interface ElementEventMap { + ['full-element-path']: FullElementPathEvent; + } +} diff --git a/packages/open-scd/src/editors/ied/ied-container.ts b/packages/open-scd/src/editors/ied/ied-container.ts new file mode 100644 index 0000000000..1131416fa6 --- /dev/null +++ b/packages/open-scd/src/editors/ied/ied-container.ts @@ -0,0 +1,112 @@ +import { + css, + customElement, + html, + property, + TemplateResult, +} from 'lit-element'; +import { nothing } from 'lit-html'; +import { translate } from 'lit-translate'; + +import '../../action-pane.js'; +import './access-point-container.js'; + +import { wizards } from '../../wizards/wizard-library.js'; +import { Container } from './foundation.js'; +import { + getDescriptionAttribute, + getNameAttribute, + newActionEvent, + newWizardEvent, +} from '../../foundation.js'; +import { removeIEDWizard } from '../../wizards/ied.js'; +import { editServicesWizard } from '../../wizards/services.js'; + +/** [[`IED`]] plugin subeditor for editing `IED` element. */ +@customElement('ied-container') +export class IedContainer extends Container { + @property() + selectedLNClasses: string[] = []; + + private openEditWizard(): void { + const wizard = wizards['IED'].edit(this.element); + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + + private renderServicesIcon(): TemplateResult { + const services: Element | null = this.element.querySelector('Services'); + + if (!services) { + return html``; + } + + return html` + this.openSettingsWizard(services)} + > + `; + } + + private openSettingsWizard(services: Element): void { + const wizard = editServicesWizard(services); + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + + private removeIED(): void { + const wizard = removeIEDWizard(this.element); + if (wizard) { + this.dispatchEvent(newWizardEvent(() => wizard)); + } else { + // If no Wizard is needed, just remove the element. + this.dispatchEvent( + newActionEvent({ + old: { parent: this.element.parentElement!, element: this.element }, + }) + ); + } + } + + private header(): TemplateResult { + const name = getNameAttribute(this.element); + const desc = getDescriptionAttribute(this.element); + + return html`${name}${desc ? html` — ${desc}` : nothing}`; + } + + render(): TemplateResult { + return html` + developer_board + + this.removeIED()} + > + + + this.openEditWizard()} + > + + ${this.renderServicesIcon()} + ${Array.from(this.element.querySelectorAll(':scope > AccessPoint')).map( + ap => html`` + )} + `; + } + + static styles = css` + abbr { + text-decoration: none; + border-bottom: none; + } + `; +} diff --git a/packages/open-scd/src/editors/ied/ldevice-container.ts b/packages/open-scd/src/editors/ied/ldevice-container.ts new file mode 100644 index 0000000000..e007564050 --- /dev/null +++ b/packages/open-scd/src/editors/ied/ldevice-container.ts @@ -0,0 +1,117 @@ +import { + css, + customElement, + html, + property, + PropertyValues, + query, + state, + TemplateResult, +} from 'lit-element'; +import { nothing } from 'lit-html'; +import { translate } from 'lit-translate'; + +import { IconButtonToggle } from '@material/mwc-icon-button-toggle'; + +import { + getDescriptionAttribute, + getInstanceAttribute, + getNameAttribute, +} from '../../foundation.js'; +import { logicalDeviceIcon } from '../../icons/ied-icons.js'; + +import '../../action-pane.js'; +import './ln-container.js'; + +import { Container } from './foundation.js'; + +/** [[`IED`]] plugin subeditor for editing `LDevice` element. */ +@customElement('ldevice-container') +export class LDeviceContainer extends Container { + @property() + selectedLNClasses: string[] = []; + + @query('#toggleButton') + toggleButton!: IconButtonToggle | undefined; + + private header(): TemplateResult { + const nameOrInst = + getNameAttribute(this.element) ?? getInstanceAttribute(this.element); + const desc = getDescriptionAttribute(this.element); + + return html`${nameOrInst}${desc ? html` — ${desc}` : nothing}`; + } + + protected firstUpdated(): void { + this.requestUpdate(); + } + + protected updated(_changedProperties: PropertyValues): void { + super.updated(_changedProperties); + + // When the LN Classes filter is updated, we also want to trigger rendering for the LN Elements. + if (_changedProperties.has('selectedLNClasses')) { + this.requestUpdate('lnElements'); + } + } + + @state() + private get lnElements(): Element[] { + return Array.from(this.element.querySelectorAll(':scope > LN,LN0')).filter( + element => { + const lnClass = element.getAttribute('lnClass') ?? ''; + return this.selectedLNClasses.includes(lnClass); + } + ); + } + + render(): TemplateResult { + const lnElements = this.lnElements; + + return html` + ${logicalDeviceIcon} + ${lnElements.length > 0 + ? html` + this.requestUpdate()} + > + ` + : nothing} +
    + ${this.toggleButton?.on + ? lnElements.map( + ln => html` ` + ) + : nothing} +
    +
    `; + } + + static styles = css` + #lnContainer { + display: grid; + grid-gap: 12px; + box-sizing: border-box; + grid-template-columns: repeat(auto-fit, minmax(316px, auto)); + } + + @media (max-width: 387px) { + #lnContainer { + grid-template-columns: repeat(auto-fit, minmax(196px, auto)); + } + } + `; +} diff --git a/packages/open-scd/src/editors/ied/ln-container.ts b/packages/open-scd/src/editors/ied/ln-container.ts new file mode 100644 index 0000000000..6a6b5feb42 --- /dev/null +++ b/packages/open-scd/src/editors/ied/ln-container.ts @@ -0,0 +1,86 @@ +import { customElement, html, query, TemplateResult } from 'lit-element'; +import { nothing } from 'lit-html'; +import { until } from 'lit-html/directives/until'; +import { translate } from 'lit-translate'; + +import { getInstanceAttribute, getNameAttribute } from '../../foundation.js'; +import { IconButtonToggle } from '@material/mwc-icon-button-toggle'; + +import '../../action-pane.js'; +import './do-container.js'; + +import { Container } from './foundation.js'; + +/** [[`IED`]] plugin subeditor for editing `LN` and `LN0` element. */ +@customElement('ln-container') +export class LNContainer extends Container { + @query('#toggleButton') + toggleButton!: IconButtonToggle | undefined; + + private header(): TemplateResult { + const prefix = this.element.getAttribute('prefix'); + const inst = getInstanceAttribute(this.element); + + const data = this.nsdoc.getDataDescription(this.element); + + return html`${prefix != null ? html`${prefix} — ` : nothing} + ${data.label} ${inst ? html` — ${inst}` : nothing}`; + } + + /** + * Get the DO child elements of this LN(0) section. + * @returns The DO child elements, or an empty array if none are found. + */ + private getDOElements(): Element[] { + const lnType = this.element.getAttribute('lnType') ?? undefined; + const lNodeType = this.element + .closest('SCL')! + .querySelector(`:root > DataTypeTemplates > LNodeType[id="${lnType}"]`); + if (lNodeType != null) { + return Array.from(lNodeType.querySelectorAll(':scope > DO')); + } + return []; + } + + /** + * Get the instance element (DOI) of a DO element (if available) + * @param dO - The DO object to use. + * @returns The optional DOI object. + */ + private getInstanceElement(dO: Element): Element | null { + const doName = getNameAttribute(dO); + return this.element.querySelector(`:scope > DOI[name="${doName}"]`); + } + + render(): TemplateResult { + const doElements = this.getDOElements(); + + return html` + ${doElements.length > 0 + ? html` + this.requestUpdate()} + > + ` + : nothing} + ${this.toggleButton?.on + ? doElements.map( + dO => html` ` + ) + : nothing} + `; + } +} diff --git a/packages/open-scd/src/editors/ied/server-container.ts b/packages/open-scd/src/editors/ied/server-container.ts new file mode 100644 index 0000000000..5a53f4dd0d --- /dev/null +++ b/packages/open-scd/src/editors/ied/server-container.ts @@ -0,0 +1,70 @@ +import { + customElement, + html, + property, + PropertyValues, + state, + TemplateResult, +} from 'lit-element'; +import { nothing } from 'lit-html'; + +import '../../action-pane.js'; +import './ldevice-container.js'; +import { serverIcon } from '../../icons/ied-icons.js'; +import { getDescriptionAttribute } from '../../foundation.js'; +import { Container } from './foundation.js'; + +/** [[`IED`]] plugin subeditor for editing `Server` element. */ +@customElement('server-container') +export class ServerContainer extends Container { + @property() + selectedLNClasses: string[] = []; + + private header(): TemplateResult { + const desc = getDescriptionAttribute(this.element); + + return html`Server${desc ? html` — ${desc}` : nothing}`; + } + + protected updated(_changedProperties: PropertyValues): void { + super.updated(_changedProperties); + + // When the LN Classes filter is updated, we also want to trigger rendering for the LN Elements. + if (_changedProperties.has('selectedLNClasses')) { + this.requestUpdate('lDeviceElements'); + } + } + + @state() + private get lDeviceElements(): Element[] { + return Array.from(this.element.querySelectorAll(':scope > LDevice')).filter( + element => { + return ( + Array.from(element.querySelectorAll(':scope > LN,LN0')).filter( + element => { + const lnClass = element.getAttribute('lnClass') ?? ''; + return this.selectedLNClasses.includes(lnClass); + } + ).length > 0 + ); + } + ); + } + + render(): TemplateResult { + return html` + ${serverIcon} + ${this.lDeviceElements.map( + server => + html`` + )} + `; + } +} diff --git a/packages/open-scd/src/editors/protocol104/base-container.ts b/packages/open-scd/src/editors/protocol104/base-container.ts new file mode 100644 index 0000000000..8570e60dce --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/base-container.ts @@ -0,0 +1,8 @@ +import { LitElement, property } from 'lit-element'; + +export class Base104Container extends LitElement { + @property() + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; +} diff --git a/packages/open-scd/src/editors/protocol104/connectedap-editor.ts b/packages/open-scd/src/editors/protocol104/connectedap-editor.ts new file mode 100644 index 0000000000..9e1e03582d --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/connectedap-editor.ts @@ -0,0 +1,61 @@ +import { customElement, html, property, TemplateResult } from 'lit-element'; + +import '@material/mwc-fab'; + +import '../../action-icon.js'; +import { newActionEvent, newWizardEvent } from '../../foundation.js'; +import { editConnectedApWizard } from './wizards/connectedap.js'; +import { Base104Container } from './base-container.js'; + +/** [[`104`]] subeditor for a `ConnectedAP` element. */ +@customElement('connectedap-104-editor') +export class ConnectedAP104Editor extends Base104Container { + /** SCL element ConnectedAP */ + @property({ attribute: false }) + element!: Element; + + private openEditWizard(): void { + this.dispatchEvent( + newWizardEvent(() => + editConnectedApWizard( + this.element, + this.element.querySelectorAll('Address > P[type^="RG"]').length > 0 + ) + ) + ); + } + + remove(): void { + if (this.element) + this.dispatchEvent( + newActionEvent({ + old: { + parent: this.element.parentElement!, + element: this.element, + reference: this.element.nextSibling, + }, + }) + ); + } + + render(): TemplateResult { + return html` + + + `; + } +} diff --git a/packages/open-scd/src/editors/protocol104/doi-container.ts b/packages/open-scd/src/editors/protocol104/doi-container.ts new file mode 100644 index 0000000000..730a348d64 --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/doi-container.ts @@ -0,0 +1,176 @@ +import { + css, + customElement, + html, + property, + query, + TemplateResult, +} from 'lit-element'; +import { translate } from 'lit-translate'; +import { nothing } from 'lit-html'; + +import { IconButtonToggle } from '@material/mwc-icon-button-toggle'; + +import '@material/mwc-icon'; +import '@material/mwc-icon-button'; +import '@material/mwc-icon-button-toggle'; +import '@material/mwc-list'; +import '@material/mwc-list/mwc-list-item'; + +import { newWizardEvent } from '../../foundation.js'; + +import '../../action-pane.js'; + +import { + get104DetailsLine, + getCdcValueFromDOIElement, + getFullPath, +} from './foundation/foundation.js'; +import { editAddressWizard } from './wizards/address.js'; +import { showDOIInfoWizard } from './wizards/doi.js'; +import { PROTOCOL_104_PRIVATE } from './foundation/private.js'; +import { Base104Container } from './base-container.js'; + +/** + * Container showing all the DAI Elements, related to the 104 Protocol, of the passed DOI Element in a list. + * The DAI Element can be edited by pressing the Edit button at the end of the line. + */ +@customElement('doi-104-container') +export class Doi104Container extends Base104Container { + @property() + element!: Element; + + @query('#toggleButton') + toggleButton!: IconButtonToggle | undefined; + + @property() + get daiElements(): Element[] { + return Array.from(this.element.querySelectorAll(`DAI`)) + .filter( + daiElement => + daiElement.querySelector( + `Private[type="${PROTOCOL_104_PRIVATE}"] > Address` + ) !== null + ) + .sort((dai1, dai2) => + getFullPath(dai1, 'DOI').localeCompare(getFullPath(dai2, 'DOI')) + ); + } + + private getAddressElements(daiElement: Element): Element[] { + return Array.from( + daiElement.querySelectorAll( + `Private[type="${PROTOCOL_104_PRIVATE}"] > Address` + ) + ).sort( + (addr1, addr2) => + (addr1.getAttribute('casdu') ?? '').localeCompare( + addr2.getAttribute('casdu') ?? '' + ) && + (addr1.getAttribute('ioa') ?? '').localeCompare( + addr2.getAttribute('ioa') ?? '' + ) + ); + } + + protected firstUpdated(): void { + this.requestUpdate(); + } + + private openEditAddressWizard( + daiElement: Element, + addressElement: Element + ): void { + const doiElement = daiElement.closest('DOI')!; + const iedElement = doiElement.closest('IED')!; + this.dispatchEvent( + newWizardEvent( + editAddressWizard(iedElement, doiElement, daiElement, addressElement) + ) + ); + } + + private openEditTiWizard(): void { + this.dispatchEvent(newWizardEvent(showDOIInfoWizard(this.element))); + } + + @property() + get header(): TemplateResult { + const fullPath = getFullPath(this.element, 'IED'); + const cdc = getCdcValueFromDOIElement(this.element); + + return html`${fullPath}${cdc ? html` (${cdc})` : nothing}`; + } + + private renderAddressList(daiElement: Element): TemplateResult { + const addresses = this.getAddressElements(daiElement); + return html`${addresses.map(addressElement => { + return html` + +   + ${get104DetailsLine(daiElement, addressElement)} + + + this.openEditAddressWizard(daiElement, addressElement)} + > + + + + `; + })}`; + } + + private renderDaiList(): TemplateResult { + const daiElements = this.daiElements; + return html`${daiElements.map(daiElement => { + return html` + + ${getFullPath(daiElement, 'DOI')} + + ${this.renderAddressList(daiElement)} + `; + })}`; + } + + render(): TemplateResult { + return html` + + + this.openEditTiWizard()} + > + + + this.requestUpdate()} + > + + + ${this.toggleButton?.on + ? html` ${this.renderDaiList()} ` + : nothing} + + `; + } + + static styles = css` + abbr { + text-decoration: none; + border-bottom: none; + } + + mwc-list-item { + --mdc-list-item-meta-size: 48px; + } + `; +} diff --git a/packages/open-scd/src/editors/protocol104/foundation/actions.ts b/packages/open-scd/src/editors/protocol104/foundation/actions.ts new file mode 100644 index 0000000000..6fe77ed243 --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/foundation/actions.ts @@ -0,0 +1,71 @@ +import { Create } from '../../../foundation.js'; +import { TiInformation } from './cdc.js'; + +/** + * Create a list of Create Actions using the parameters passed. First search for the DAI Elements + * that can be effected. Next create the action and add it to this list, also start the Edit + * Address Element wizard for all Address Elements created. + * + * @param lnElement - The LN Element. + * @param lnClonedElement - The Cloned LN Element, used to create new structure and determine which Create actions are needed. + * @param doElement - The DO Element. + * @param wizard - The Wizard to dispatch the Open Wizard event on. + * @param ti - The TI Value set on the new Address Elements. + * @param inverted - Indicates if the Engineer want to create inverted Address Elements, if applicable. + * @param tiInformation - Information about how to create the Address Elements for the passed TI. + * @returns A list of Create Action that will be added to the complex action. + */ +export function createActions( + lnElement: Element, + lnClonedElement: Element, + doElement: Element, + wizard: Element, + ti: string, + inverted: boolean, + tiInformation: TiInformation +): Create[] { + return tiInformation.create( + lnElement, + lnClonedElement, + doElement, + wizard, + ti, + tiInformation.daPaths, + // If the TI Allows inverted and the Engineer selected it, true will be passed. + tiInformation.inverted ? inverted : false + ); +} + +/** + * Create a list of Create Actions using the parameters passed. First search for the DAI Elements [name="Check"]. + * Next create the action and add it to this list, also start the Edit Address Element wizard for all Address Elements + * created. + * + * @param lnElement - The LN Element. + * @param lnClonedElement - The Cloned LN Element, used to create new structure and determine which Create actions are needed. + * @param doElement - The DO Element. + * @param wizard - The Wizard to dispatch the Open Wizard event on. + * @param ti - The TI Value set on the new Address Elements. + * @param tiInformation - Information about how to create the Address Elements for the passed TI. + * @returns A list of Create Action that will be added to the complex action. + */ +export function createCheckActions( + lnElement: Element, + lnClonedElement: Element, + doElement: Element, + wizard: Element, + ti: string, + tiInformation: TiInformation +): Create[] { + if (tiInformation.checkDaPaths && tiInformation.checkCreate) { + return tiInformation.checkCreate( + lnElement, + lnClonedElement, + doElement, + wizard, + ti, + tiInformation.checkDaPaths + ); + } + return []; +} diff --git a/packages/open-scd/src/editors/protocol104/foundation/cdc.ts b/packages/open-scd/src/editors/protocol104/foundation/cdc.ts new file mode 100644 index 0000000000..bd39fa572b --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/foundation/cdc.ts @@ -0,0 +1,821 @@ +import { + Create, + getNameAttribute, + newLogEvent, + newWizardEvent, +} from '../../../foundation.js'; + +import { + addPrefixAndNamespaceToDocument, + createPrivateAddress, + createPrivateElement, + getPrivateElement, +} from './private.js'; +import { + findElementInOriginalLNStructure, + getCdcValueFromDOElement, + getEnumOrds, + getTypeAttribute, + isEnumDataAttribute, +} from './foundation.js'; +import { editAddressWizard } from '../wizards/address.js'; +import { + determineUninitializedStructure, + initializeElements, +} from '../../../foundation/dai.js'; +import { get } from 'lit-translate'; + +/** + * List of supported Common Data Classes in the 104 protocol. + */ +export const supportedCdcTypes = [ + 'ACT', + 'APC', + 'ASG', + 'BAC', + 'BCR', + 'BSC', + 'CMV', + 'DPC', + 'DPS', + 'ENG', + 'INC', + 'ING', + 'INS', + 'ISC', + 'MV', + 'SEC', + 'SPC', + 'SPG', + 'SPS', +] as const; +export type SupportedCdcType = typeof supportedCdcTypes[number]; + +export type CreateFunction = ( + lnElement: Element, + lnClonedElement: Element, + doElement: Element, + wizard: Element, + ti: string, + daPaths: DaSelector[], + inverted: boolean +) => Create[]; +export type CreateCheckFunction = ( + lnElement: Element, + lnClonedElement: Element, + doElement: Element, + wizard: Element, + ti: string, + daPaths: DaSelector[] +) => Create[]; + +export interface DaSelector { + path: string[]; +} +export interface TiInformation { + daPaths: DaSelector[]; + create: CreateFunction; + checkDaPaths?: DaSelector[]; + checkCreate?: CreateCheckFunction; + inverted?: boolean; +} + +/** + * Record with configuration information on how to create Address elements for the 104 protocol. + * Per supported Common Data Class (CDC) two record sets can be configured, one for the monitoring part + * and one for the control part. + * Per set the key of the record will be the ti value, meaning the list of keys will be the supported + * ti values allowed for the CDC. + * For each supported ti value there is information on how to find the DAI Element to which to create + * the Address element(s). + */ +export const cdcProcessings: Record< + SupportedCdcType, + { + monitor: Record; + control: Record; + } +> = { + ACT: { + monitor: { + '30': { + daPaths: [ + { path: ['general'] }, + { path: ['phsA'] }, + { path: ['phsB'] }, + { path: ['phsC'] }, + { path: ['neut'] }, + ], + create: createAddressAction, + inverted: true, + }, + '39': { + daPaths: [{ path: ['general'] }], + create: createAddressAction, + }, + }, + control: {}, + }, + APC: { + monitor: { + '36': { + daPaths: [{ path: ['mxVal', 'f'] }], + create: createAddressAction, + }, + }, + control: { + '63': { + daPaths: [{ path: ['Oper', 'ctlVal', 'f'] }], + create: createAddressAction, + checkDaPaths: [{ path: ['Oper', 'Check'] }], + checkCreate: createCheckAddressAction, + }, + }, + }, + ASG: { + monitor: { + '63': { + daPaths: [{ path: ['setMag', 'f'] }], + create: createAddressAction, + }, + }, + control: {}, + }, + BAC: { + monitor: { + '36': { + daPaths: [{ path: ['mxVal', 'f'] }], + create: createAddressAction, + }, + }, + control: { + '60': { + daPaths: [{ path: ['Oper', 'ctlVal'] }], + create: createAddressAction, + checkDaPaths: [{ path: ['Oper', 'Check'] }], + checkCreate: createCheckAddressAction, + }, + }, + }, + BCR: { + monitor: { + '37': { + daPaths: [{ path: ['actVal'] }, { path: ['frVal'] }], + create: createAddressAction, + }, + }, + control: {}, + }, + BSC: { + monitor: { + '32': { + daPaths: [{ path: ['valWTr', 'posVal'] }], + create: createAddressAction, + }, + }, + control: { + '60': { + daPaths: [{ path: ['Oper', 'ctlVal'] }], + create: createAddressAction, + checkDaPaths: [{ path: ['Oper', 'Check'] }], + checkCreate: createCheckAddressAction, + }, + }, + }, + CMV: { + monitor: { + '35': { + daPaths: [{ path: ['mag', 'i'] }, { path: ['ang', 'i'] }], + create: createAddressAction, + }, + '36': { + daPaths: [{ path: ['mag', 'f'] }, { path: ['ang', 'f'] }], + create: createAddressAction, + }, + }, + control: {}, + }, + DPC: { + monitor: { + '31': { + daPaths: [{ path: ['stVal'] }], + create: createAddressAction, + }, + }, + control: { + '59': { + daPaths: [{ path: ['Oper', 'ctlVal'] }], + create: createAddressAction, + checkDaPaths: [{ path: ['Oper', 'Check'] }], + checkCreate: createCheckAddressAction, + }, + }, + }, + DPS: { + monitor: { + '31': { + daPaths: [{ path: ['stVal'] }], + create: createAddressAction, + }, + }, + control: {}, + }, + ENG: { + monitor: { + '58': { + daPaths: [{ path: ['setVal'] }], + create: createAddressWithExpectValueAction, + }, + '62': { + daPaths: [{ path: ['setVal'] }], + create: createAddressAction, + }, + }, + control: {}, + }, + INC: { + monitor: { + '35': { + daPaths: [{ path: ['stVal'] }], + create: createAddressAction, + }, + }, + control: { + '62': { + daPaths: [{ path: ['Oper', 'ctlVal'] }], + create: createAddressAction, + checkDaPaths: [{ path: ['Oper', 'Check'] }], + checkCreate: createCheckAddressAction, + }, + }, + }, + ING: { + monitor: { + '62': { + daPaths: [{ path: ['setVal'] }], + create: createAddressAction, + }, + }, + control: {}, + }, + INS: { + monitor: { + '30': { + daPaths: [{ path: ['stVal'] }], + create: createAddressAction, + inverted: true, + }, + '33': { + daPaths: [{ path: ['stVal'] }], + create: createAddressAction, + }, + '35': { + daPaths: [{ path: ['stVal'] }], + create: createAddressAction, + }, + }, + control: {}, + }, + ISC: { + monitor: { + '32': { + daPaths: [{ path: ['valWTr', 'posVal'] }], + create: createAddressAction, + }, + }, + control: { + '62': { + daPaths: [{ path: ['Oper', 'ctlVal'] }], + create: createAddressAction, + checkDaPaths: [{ path: ['Oper', 'Check'] }], + checkCreate: createCheckAddressAction, + }, + }, + }, + MV: { + monitor: { + '35': { + daPaths: [{ path: ['mag', 'i'] }], + create: createAddressAction, + }, + '36': { + daPaths: [{ path: ['mag', 'f'] }], + create: createAddressAction, + }, + }, + control: {}, + }, + SEC: { + monitor: { + '37': { + daPaths: [{ path: ['cnt'] }], + create: createAddressAction, + }, + }, + control: {}, + }, + SPC: { + monitor: { + '30': { + daPaths: [{ path: ['stVal'] }], + create: createAddressAction, + inverted: true, + }, + }, + control: { + '58': { + daPaths: [{ path: ['Oper', 'ctlVal'] }], + create: createAddressAction, + checkDaPaths: [{ path: ['Oper', 'Check'] }], + checkCreate: createCheckAddressAction, + }, + }, + }, + SPG: { + monitor: { + '58': { + daPaths: [{ path: ['setVal'] }], + create: createAddressAction, + }, + }, + control: {}, + }, + SPS: { + monitor: { + '30': { + daPaths: [{ path: ['stVal'] }], + create: createAddressAction, + inverted: true, + }, + }, + control: {}, + }, +}; + +/** + * Creates a new SCL Private element and add 104 Address element(s) below this. + * Set the attribute value of 'ti' to the passed ti value. + * + * @param lnElement - The LN(0) Element. + * @param lnClonedElement - The Cloned LN Element, used to create new structure and determine which Create actions are needed. + * @param doElement - The DO Element. + * @param wizard - Wizard Element to dispatch events on. + * @param ti - The value to be set on the attribute 'ti'. + * @param daPaths - The Array of DAI Elements to search or create and add the Private Element on. + * @param inverted - Indicates if extra Address Elements should be created with 'inverted=true'. + * @returns An array of Create Action that the wizard action will return. + */ +function createAddressAction( + lnElement: Element, + lnClonedElement: Element, + doElement: Element, + wizard: Element, + ti: string, + daPaths: DaSelector[], + inverted: boolean +): Create[] { + const actions: Create[] = []; + + const [initializeActions, daiElements] = findOrCreateDaiElements( + lnElement, + lnClonedElement, + doElement, + wizard, + daPaths + ); + if (initializeActions.length > 0) { + actions.push(...initializeActions); + } + + if (daiElements.length > 0) { + addPrefixAndNamespaceToDocument(lnElement.ownerDocument); + + daiElements.forEach(daiElement => { + const addressElements = createAddressElements( + daiElement.ownerDocument, + ti, + inverted + ); + actions.push(...createActionsForPrivate(daiElement, addressElements)); + }); + } + + startEditWizards(wizard, lnElement, lnClonedElement, doElement, actions); + return actions; +} + +/** + * Creates a new SCL Private element and add 104 Address element(s) below this. + * Set the attribute value of 'ti' to the passed ti value. + * + * @param lnElement - The LN(0) Element. + * @param lnClonedElement - The Cloned LN Element, used to create new structure and determine which Create actions are needed. + * @param doElement - The DO Element. + * @param wizard - Wizard Element to dispatch events on. + * @param ti - The value to be set on the attribute 'ti'. + * @param daPaths - The Array of DAI Elements to search or create and add the Private Element on. + * @param inverted - Indicates if extra Address Elements should be created with 'inverted=true'. + * @returns An array of Create Action that the wizard action will return. + */ +function createAddressWithExpectValueAction( + lnElement: Element, + lnClonedElement: Element, + doElement: Element, + wizard: Element, + ti: string, + daPaths: DaSelector[], + inverted: boolean +): Create[] { + const actions: Create[] = []; + + const [initializeActions, daiElements] = findOrCreateDaiElements( + lnElement, + lnClonedElement, + doElement, + wizard, + daPaths + ); + if (initializeActions.length > 0) { + actions.push(...initializeActions); + } + if (daiElements.length > 0) { + addPrefixAndNamespaceToDocument(lnElement.ownerDocument); + + const addressElements: Element[] = []; + daiElements.forEach(daiElement => { + if (isEnumDataAttribute(daiElement)) { + getEnumOrds(daiElement).forEach(ord => + addressElements.push( + ...createAddressElements( + daiElement.ownerDocument, + ti, + inverted, + ord + ) + ) + ); + } else { + addressElements.push( + ...createAddressElements(daiElement.ownerDocument, ti, inverted) + ); + } + + actions.push(...createActionsForPrivate(daiElement, addressElements)); + }); + } + + startEditWizards(wizard, lnElement, lnClonedElement, doElement, actions); + return actions; +} + +/** + * Create a new SCL Private element and add 104 Address element(s) below this. + * Set the attribute value of 'ti' to the passed ti value. + * + * @param lnElement - The LN(0) Element. + * @param lnClonedElement - The Cloned LN Element, used to create new structure and determine which Create actions are needed. + * @param doElement - The DO Element. + * @param wizard - Wizard Element to dispatch events on. + * @param ti - The value to be set on the attribute 'ti'. + * @param daPaths - The Array of DAI Elements to search or create and add the Private Element on. + * @returns An array of Create Action that the wizard action will return. + */ +function createCheckAddressAction( + lnElement: Element, + lnClonedElement: Element, + doElement: Element, + wizard: Element, + ti: string, + daPaths: DaSelector[] +): Create[] { + const actions: Create[] = []; + + const [initializeActions, daiElements] = findOrCreateDaiElements( + lnElement, + lnClonedElement, + doElement, + wizard, + daPaths + ); + if (initializeActions.length > 0) { + actions.push(...initializeActions); + } + if (daiElements.length > 0) { + addPrefixAndNamespaceToDocument(lnElement.ownerDocument); + + daiElements.forEach(daiElement => { + const address1Element = createPrivateAddress( + daiElement.ownerDocument, + ti + ); + address1Element.setAttribute('check', 'interlocking'); + + const address2Element = createPrivateAddress( + daiElement.ownerDocument, + ti + ); + address2Element.setAttribute('check', 'synchrocheck'); + + actions.push( + ...createActionsForPrivate(daiElement, [ + address1Element, + address2Element, + ]) + ); + }); + } + + startEditWizards(wizard, lnElement, lnClonedElement, doElement, actions); + return actions; +} + +/** + * Create or update the 104 Private Element, if the Private already exists, the new Address Elements are + * added, otherwise a new Private Element is created to which the Address Elements are added. + * The correct Create Action is returned. + * + * @param daiElement - The DAI Element which will hold the new or existing Private Element + * @param addressElements - The Address Elements to be created with Create Actions. + */ +export function createActionsForPrivate( + daiElement: Element, + addressElements: Element[] +): Create[] { + const actions: Create[] = []; + let privateElement = getPrivateElement(daiElement); + if (privateElement) { + addressElements.forEach(addressElement => { + actions.push({ + new: { parent: privateElement!, element: addressElement }, + }); + }); + } else { + privateElement = createPrivateElement(daiElement.ownerDocument); + privateElement.append(...addressElements); + + actions.push({ new: { parent: daiElement, element: privateElement } }); + } + return actions; +} + +/** + * Creates one or two Address Elements, depending on the value of inverted. + * + * @param document - The Owner Document used to create the new Address Element with. + * @param ti - The value to be set on the attribute 'ti'. + * @param inverted - Indicates if extra Address Elements should be created with 'inverted=true'. + * @param expectedValue - The optional value of the attribute 'expectedValue' if needed. + * @returns Array of one or two Address Elements created. + */ +export function createAddressElements( + document: Document, + ti: string, + inverted: boolean, + expectedValue?: string +): Element[] { + const addressElements: Element[] = []; + const addressElement = createPrivateAddress(document, ti); + if (expectedValue) { + addressElement.setAttribute('expectedValue', expectedValue); + } + addressElements.push(addressElement); + + if (inverted) { + const addressElement = createPrivateAddress(document, ti); + addressElement.setAttribute('inverted', 'true'); + if (expectedValue) { + addressElement.setAttribute('expectedValue', expectedValue); + } + addressElements.push(addressElement); + } + return addressElements; +} + +/** + * Use all Create Action to determine which Address Elements are created and start an Edit Address Wizard + * for every Address Element found. + * + * @param wizard - The current Wizard used to dispatch the new Wizards on. + * @param lnElement - The LN Element used to search for specific parent elements. + * @param lnClonedElement - The cloned LN Element to search for child elements. + * @param doElement - The DO Element for which the Address Elements where created. + * @param actions - The list of all the Create Actions. + */ +function startEditWizards( + wizard: Element, + lnElement: Element, + lnClonedElement: Element, + doElement: Element, + actions: Create[] +): void { + actions.forEach(createAction => { + // Loop over all Actions and collect all Address Elements in an Array. + const newElement = createAction.new.element; + let addressElements: Element[]; + if (newElement.tagName === 'Address') { + addressElements = [newElement]; + } else { + addressElements = Array.from(newElement.querySelectorAll('Address')); + } + const parentElement = createAction.new.parent; + const daiElement = parentElement.closest('DAI'); + if (daiElement) { + const iedElement = lnElement.closest('IED')!; + const doiElement = lnClonedElement.querySelector( + `:scope > DOI[name="${getNameAttribute(doElement)}"]` + )!; + + addressElements.forEach(addressElement => { + wizard.dispatchEvent( + newWizardEvent(() => + editAddressWizard( + iedElement, + doiElement, + daiElement, + addressElement + ) + ) + ); + }); + } + }); +} + +/** + * Use the DA Path configuration of a Common Data Class to search for all DO/BDA/DA Elements to create + * a structure for which DOI/SDI/DAI Elements should be created later. Null will be returned when an invalid + * Template Structure is described by the DA Path. + * + * @param doElement - The DO Element to start searching for DA/BDA Elements. + * @param daPath - The (B)DA Elements to find in the template structure. + * @returns List of Elements starting with the DO Element followed by one or more (B)DA Elements describing the structure. + */ +function createTemplateStructure( + doElement: Element, + daPath: DaSelector +): Element[] | null { + let templateStructure: Element[] | null = [doElement]; + + const doc = doElement.ownerDocument; + const doType = getTypeAttribute(doElement) ?? ''; + let typeElement = doc.querySelector(`DOType[id="${doType}"]`); + + daPath.path.forEach(name => { + // There should be a DOType or DAType set for the current element in the list. + if (!typeElement) { + templateStructure = null; + return; + } + const daElement = typeElement.querySelector( + `:scope > DA[name="${name}"], :scope > BDA[name="${name}"]` + ); + // If there is no DA/BDA Element found the structure is incorrect, so just stop. + if (daElement === null) { + templateStructure = null; + return; + } + templateStructure!.push(daElement); + + const bType = daElement.getAttribute('bType') ?? ''; + if (bType === 'Struct') { + const type = getTypeAttribute(daElement) ?? ''; + typeElement = doc.querySelector(`DAType[id="${type}"]`); + } else { + typeElement = null; + } + }); + return templateStructure; +} + +/** + * Search for existing DAI Elements below the DO Element matching the DA Paths passed or create the DAI Element + * if the DA Path doesn't exist yet. + * + * @param lnElement - The LN(0) Element. + * @param lnClonedElement - The Cloned LN Element, used to create new structure and determine which Create actions are needed. + * @param doElement - The DO Element. + * @param wizard - The current Wizard to dispatch Log Events, if needed. + * @param daPaths - The DA Structures for which the DAI Structure needs to be created below the DO Element. + */ +function findOrCreateDaiElements( + lnElement: Element, + lnClonedElement: Element, + doElement: Element, + wizard: Element, + daPaths: DaSelector[] +): [Create[], Element[]] { + const daiElements: Element[] = []; + const actions: Create[] = []; + + // Start searching and creating for each DA Path passed. + daPaths.forEach(daPath => { + const filter = createDaiFilter(doElement, daPath); + const foundDaiElements = lnClonedElement.querySelectorAll(filter); + if (foundDaiElements.length > 0) { + // Existing DAI Element found, so use that Element. + foundDaiElements.forEach(clonedDaiElement => { + const daiElement = findElementInOriginalLNStructure( + lnElement, + clonedDaiElement + ); + if (daiElement) { + daiElements.push(daiElement); + } else { + daiElements.push(clonedDaiElement); + } + }); + } else { + // DAI Element doesn't exist yet, so create the structure using the DA Path. + const templateStructure = createTemplateStructure(doElement, daPath); + if (templateStructure) { + const [parentClonedElement, uninitializedTemplateStructure] = + determineUninitializedStructure(lnClonedElement, templateStructure); + // Next create all missing elements (DOI/SDI/DOI) + const newElement = initializeElements(uninitializedTemplateStructure); + + // Always add it to the cloned LN Structure. + parentClonedElement.append(newElement); + + // Search if the parent already exists in the current LN Element Structure. + // If so we will add a new Create Action for it. + // If it is already there because one of the parents of the parent is used in a Create Action. + const parentElement = findElementInOriginalLNStructure( + lnElement, + parentClonedElement + ); + if (parentElement) { + actions.push({ new: { parent: parentElement, element: newElement } }); + } + + // Add new DAI Elements to the list to return. + if (newElement.tagName === 'DAI') { + daiElements.push(newElement); + } else { + const daiElement = newElement.querySelector('DAI')!; + daiElements.push(daiElement); + } + } else { + // The DA Path can't be mapped on the Template structure of the current document. + const cdc = getCdcValueFromDOElement(doElement) ?? ''; + const doType = getTypeAttribute(doElement) ?? ''; + wizard.dispatchEvent( + newLogEvent({ + kind: 'error', + title: get('protocol104.wizard.error.addAddressError', { + structure: daPath.path.join(' > '), + cdc, + doType, + }), + }) + ); + } + } + }); + return [actions, daiElements]; +} + +/** + * Use the DO Element and a DA Selector to create a CSS Query to search for a DAI Element + * below the LN Element. + * + * @param doElement - The DO Element for which to search a DOI Element. + * @param daPath - The DA Selector to create the query to find the SDI/DAI Elements. + */ +function createDaiFilter(doElement: Element, daPath: DaSelector): string { + const doName = getNameAttribute(doElement); + let filter = `:scope > DOI[name="${doName}"] > `; + daPath.path.forEach((value, index) => { + if (index < daPath.path.length - 1) { + filter = `${filter} SDI[name="${value}"] > `; + } else { + filter = `${filter} DAI[name="${value}"]`; + } + }); + return filter; +} + +/** + * Indicates if the combination cdc/ti should handle/process the attribute "unitMultiplier" of the Address Element. + * + * @param cdc - The Common Data Class. + * @param ti - The TI Value. + * @returns true, if the combination should handle/process the attribute "unitMultiplier". + */ +export function hasUnitMultiplierField(cdc: string, ti: string): boolean { + return ( + (cdc === 'MV' && ['35', '36'].includes(ti)) || + (cdc === 'INS' && ti === '35') + ); +} + +/** + * Indicates if the combination cdc/ti should handle/process the attributes "scaleMultiplier" and "scaleOffset" of + * the Address Element. + * + * @param cdc - The Common Data Class. + * @param ti - The TI Value. + * @returns true, if the combination should handle/process the attributes "scaleMultiplier" and "scaleOffset". + */ +export function hasScaleFields(cdc: string, ti: string): boolean { + return cdc === 'MV' && ['35', '36'].includes(ti); +} diff --git a/packages/open-scd/src/editors/protocol104/foundation/foundation.ts b/packages/open-scd/src/editors/protocol104/foundation/foundation.ts new file mode 100644 index 0000000000..b64c7a4dac --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/foundation/foundation.ts @@ -0,0 +1,515 @@ +import { html, TemplateResult } from 'lit-element'; +import { ifDefined } from 'lit-html/directives/if-defined.js'; +import { translate } from 'lit-translate'; +import { getInstanceAttribute, getNameAttribute } from '../../../foundation.js'; +import { typeMaxLength } from '../../../wizards/foundation/p-types.js'; +import { typeDescriptiveNameKeys, typePattern } from './p-types.js'; + +/** + * Retrieve the full path as wanted for the IED Container in the 104 Plugin, meaning we go higher in the + * hierarchy until the parent found is the IED, this element is excluded, because the containers are group per + * IED. + * From all parent between the DAI and IED the name or likely attributes are used to define a unique name. + * + * @param element - The DAI Element for which the full path needs to be defined. + * @param topLevelTagName - Name of the Tag to stop at when travelling through the parents (excluding). + * @returns The full path shown to the user for a DAI Element. + */ +export function getFullPath(element: Element, topLevelTagName: string): string { + let currentElement: Element | null = element; + const paths: string[] = []; + + do { + let value: string | undefined; + switch (currentElement.tagName) { + case 'LN': + case 'LN0': { + const prefix = currentElement.getAttribute('prefix'); + const inst = getInstanceAttribute(currentElement); + value = `${prefix ? prefix + '-' : ''}${currentElement.getAttribute( + 'lnClass' + )}${inst ? '-' + inst : ''}`; + break; + } + case 'LDevice': { + value = + getNameAttribute(currentElement) ?? + getInstanceAttribute(currentElement); + break; + } + default: { + // Just add the name to the list + value = getNameAttribute(currentElement); + } + } + if (value) { + paths.unshift(value); + } + currentElement = currentElement.parentElement; + } while (currentElement && currentElement.tagName != topLevelTagName); + + return paths.join(' / '); +} + +/** + * Retrieve the CDC Value that belongs to a DAI Element, meaning, using the DOI/LN Elements to + * search for a DO Element, which is again used to find the DO/DOType Element. The DOType Element + * finally holds the attribute 'cdc'. + * + * @param doiElement - The DOI Element to start the search for the CDC Value. + * @returns The CDC Value from the DOType Element. + */ +export function getCdcValueFromDOIElement(doiElement: Element): string | null { + const lnElement = doiElement.closest('LN0, LN'); + if (lnElement) { + const lnType = lnElement.getAttribute('lnType'); + const doName = doiElement.getAttribute('name'); + + const doElement = doiElement.ownerDocument.querySelector( + `:root > DataTypeTemplates > LNodeType[id="${lnType}"] > DO[name="${doName}"]` + ); + if (doElement) { + return getCdcValueFromDOElement(doElement); + } + } + return null; +} + +export function getCdcValueFromDOElement(doElement: Element): string | null { + const doType = getTypeAttribute(doElement); + const doTypeElement = doElement.ownerDocument.querySelector( + `:root > DataTypeTemplates > DOType[id="${doType}"]` + ); + return doTypeElement ? doTypeElement.getAttribute('cdc') : null; +} + +/** + * All available Address attributes that can be displayed. + */ +const addressAttributes = [ + 'casdu', + 'ioa', + 'ti', + 'expectedValue', + 'unitMultiplier', + 'scaleMultiplier', + 'scaleOffset', + 'inverted', + 'check', +]; + +/** + * Create a string to display all information about a 104 Address element. + * A list of attributes is used to determine what can be displayed if available. + * + * @param daiElement - The DAI Element used if the attribute 'expectedValue' exists to retrieve the Enum Value. + * @param address - The Address element from which to retrieve all attribute values. + * @returns A string to display with all attribute values. + */ +export function get104DetailsLine( + daiElement: Element, + address: Element +): string { + return addressAttributes + .filter(attrName => address.hasAttribute(attrName)) + .map(attrName => { + const value = address.getAttribute(attrName)!; + if (attrName === 'expectedValue') { + const enumValue = getEnumVal(daiElement, value); + return `${attrName}: ${value}${enumValue ? ` (${enumValue})` : ``}`; + } else { + return `${attrName}: ${value}`; + } + }) + .join(', '); +} + +/** + * Extract the 'type' attribute from the given XML element. + * @param element - The element to extract instance from. + * @returns the value, or undefined if there is no instance. + */ +export function getTypeAttribute(element: Element): string | undefined { + const type = element.getAttribute('type'); + return type ? type : undefined; +} + +/** + * Search for a DAI Element below the passed DOI Element. + * + * @param doElement - The DO Element to search on. + * @param name - The name of the DA Element to search for. + * @returns The found DA Element or null, if not found. + */ +export function getDaElement(doElement: Element, name: string): Element | null { + const doType = getTypeAttribute(doElement); + if (doType) { + return doElement.ownerDocument.querySelector( + `:root > DataTypeTemplates > DOType[id="${doType}"] > DA[name="${name}"]` + ); + } + return null; +} + +/** + * Search for the Value of a DAI Element below the passed DOI Element. + * + * @param doElement - The DO Element to search on. + * @param name - The name of the DA Element to search for. + * @returns The value (Val) of the found DA Element or null, if not found. + */ +export function getDaValue(doElement: Element, name: string): string | null { + const daElement = getDaElement(doElement, name); + if (daElement) { + return daElement.querySelector(':scope > Val')?.textContent ?? null; + } + return null; +} + +/** + * Search for a DAI Element below the passed DOI Element. + * + * @param doiElement - The DOI Element to search on. + * @param name - The name of the DAI Element to search for. + * @returns The found DAI Element or null, if not found. + */ +export function getDaiElement( + doiElement: Element, + name: string +): Element | null { + return doiElement.querySelector(`:scope > DAI[name="${name}"]`); +} + +/** + * Search for the Value of a DAI Element below the passed DOI Element. + * + * @param doiElement - The DOI Element to search on. + * @param name - The name of the DAI Element to search for. + * @returns The value (Val) of the found DAI Element or null, if not found. + */ +export function getDaiValue(doiElement: Element, name: string): string | null { + const daiElement = getDaiElement(doiElement, name); + if (daiElement) { + return daiElement.querySelector(':scope > Val')?.textContent ?? null; + } + return null; +} + +export function getDoiElement( + lnElement: Element, + doName: string +): Element | null { + return lnElement.querySelector(`:scope > DOI[name="${doName}"]`); +} + +export function getDoElement( + lnElement: Element, + doName: string +): Element | null { + const lnType = lnElement.getAttribute('lnType'); + if (lnType) { + return lnElement.ownerDocument.querySelector( + `:root > DataTypeTemplates > LNodeType[id="${lnType}"] > DO[name="${doName}"]` + ); + } + return null; +} + +export function getDoElements(lnElement: Element): Element[] { + const lnType = lnElement.getAttribute('lnType'); + if (lnType) { + return Array.from( + lnElement.ownerDocument.querySelectorAll( + `:root > DataTypeTemplates > LNodeType[id="${lnType}"] > DO` + ) + ); + } + return []; +} + +/** + * Search for the DAI Element 'ctlModel', this one indicates if control Addresses need to be created. + * + * @param lnElement - The LN Element. + * @param doElement - The DO Element. + * @returns The value of the CtlModel. + */ +export function getCtlModel( + lnElement: Element, + doElement: Element +): string | null { + const doName = getNameAttribute(doElement); + if (doName) { + const doiElement = getDoiElement(lnElement, doName); + if (doiElement) { + return getDaiValue(doiElement, 'ctlModel'); + } else { + return getDaValue(doElement, 'ctlModel'); + } + } + return null; +} + +/** + * Create a Array of Elements from the DOI Element to the passed daiElement. + * This will contain of course the DOI Element, followed by zero or more SDI Elements + * and finally the DAI Element with which we started. + * + * @param daiElement - The DAI Element to start walking to the LN(0) Element through parents. + */ +function buildInstanceChain(daiElement: Element): Element[] { + const instanceElementChain: Element[] = [daiElement]; + let child = daiElement; + if (child.parentElement) { + // While the parent element exists and the parent that was processed isn't the LN(0) Element continue. + do { + child = child.parentElement; + instanceElementChain.unshift(child); + } while (child.tagName !== 'DOI' && child.parentElement); + } + return instanceElementChain; +} + +/** + * Use the initialed elements (DOI/SDI/DAI) to make the same chain containing the template elements like + * DO/SDO/DA/BDA. This way all needed configuration values can be retrieved from the templates. + * + * @param doc - The document which will be used to search different template elements. + * @param instanceChain - The chain created from the LN(0) to the DAI in the IED. + */ +function buildTemplateChainFromInstanceElements( + doc: Document, + instanceChain: Element[] +): Element[] { + const templateChain: Element[] = []; + let typeElement: Element | null; + instanceChain.forEach(element => { + if (element.tagName === 'DOI') { + // The LN Element will only be used as starting point to find the LNodeType. + const lnElement = element.closest('LN, LN0')!; + const typeId = lnElement.getAttribute('lnType') ?? ''; + typeElement = doc.querySelector( + `:root > DataTypeTemplates > LNodeType[id="${typeId}"]` + ); + + if (typeElement) { + // Next search for the DO Element below the LNodeType Element. + const name = element.getAttribute('name'); + const doElement = typeElement.querySelector( + `:scope > DO[name="${name}"]` + ); + if (doElement) { + templateChain.push(doElement); + + // For the next element search the DOType that is linked to the DO Element. + const typeId = getTypeAttribute(doElement) ?? ''; + typeElement = doc.querySelector( + `:root > DataTypeTemplates > DOType[id="${typeId}"]` + ); + } else { + typeElement = null; + } + } + } else if (['SDI', 'DAI'].includes(element.tagName)) { + if (typeElement) { + // Search for the DA Element below the DOType or DAType from the previous Element + const name = element.getAttribute('name'); + const daElement = typeElement?.querySelector( + `:scope > DA[name="${name}"], :scope > BDA[name="${name}"]` + ); + if (daElement) { + templateChain.push(daElement); + + if (daElement.getAttribute('bType') === 'Struct') { + // Only if the bType is a struct we need to search for the DAType for the next element. + const typeId = getTypeAttribute(element) ?? ''; + typeElement = doc.querySelector( + `:root > DataTypeTemplates > DAType[id="${typeId}"]` + ); + } else { + typeElement = null; + } + } else { + typeElement = null; + } + } + } + }); + return templateChain; +} + +/** + * Retrieve the DA or BDA Element that's linked to the DAI Element passed. + * + * @param daiElement - The DAI Element for which to search the linked DA Element. + */ +export function getDaElementByDaiElement( + daiElement: Element +): Element | undefined { + // First step is to create the list of instance elements + const instanceChain = buildInstanceChain(daiElement); + // Next step is to build the Template Chain from the instance elements + const templateChain = buildTemplateChainFromInstanceElements( + daiElement.ownerDocument, + instanceChain + ); + if (templateChain.length > 0) { + // The needed DA Element is the last Element from the Chain. + const daElement = templateChain.pop(); + if (['DA', 'BDA'].includes(daElement!.tagName)) { + return daElement; + } + } + return undefined; +} + +/** + * Check if the DA Element is of the bType 'Enum'. + * + * @param daElement - The DA Element for which to check. + */ +function isEnumType(daElement: Element | undefined) { + return daElement?.getAttribute('bType') === 'Enum' ?? false; +} + +/** + * Check if the DA Element that's linked to the DAI Element is of the bType 'Enum'. + * + * @param daiElement - The DAI Element for which to check. + */ +export function isEnumDataAttribute(daiElement: Element): boolean { + const daElement = getDaElementByDaiElement(daiElement); + return isEnumType(daElement); +} + +/** + * Retrieve the value of the Enum with passed 'ord' configured with the passed DAI Element. + * + * @param daiElement - The DAI Element that is configured as Enum Type. + * @param ord - The value of the attribute 'ord' to search the value of. + */ +export function getEnumVal(daiElement: Element, ord: string): string | null { + const daElement = getDaElementByDaiElement(daiElement); + if (isEnumType(daElement)) { + const enumType = getTypeAttribute(daElement!); + const enumVal = daiElement.ownerDocument.querySelector( + `:root > DataTypeTemplates > EnumType[id="${enumType}"] > EnumVal[ord="${ord}"]` + ); + if (enumVal) { + return enumVal.textContent; + } + } + return null; +} + +/** + * Retrieve all the 'ord' value the EnumType has configured with his values. + * + * @param daiElement - The DAI Element that is configured as Enum Type. + */ +export function getEnumOrds(daiElement: Element): string[] { + const ords: string[] = []; + const daElement = getDaElementByDaiElement(daiElement); + if (isEnumType(daElement)) { + const enumType = getTypeAttribute(daElement!); + const enumVals = daiElement.ownerDocument.querySelectorAll( + `:root > DataTypeTemplates > EnumType[id="${enumType}"] > EnumVal` + ); + Array.from(enumVals) + .filter(valElement => valElement.getAttribute('ord')) + .map(valElement => ords.push(valElement.getAttribute('ord')!)); + } + return ords; +} + +/** + * Search for the Element passed from the Cloned LN Structure in the original LN Structure. + * If that element exists in the original LN Structure it will be returned. + * If the cloned Element is a new Element 'null' will be returned. + * + * @param lnElement - The original LN Element with the existing Elements. + * @param clonedElement - The Element to search for in the existing structure using its key. + * @returns The original element found or null if it didn't exist before. + */ +export function findElementInOriginalLNStructure( + lnElement: Element, + clonedElement: Element +): Element | null { + if (['LN0', 'LN'].includes(clonedElement.tagName)) { + return lnElement; + } + + // First create a list of elements from the Cloned Element to the Cloned LN Element. + const clonedElements: Element[] = []; + let currentElement: Element | null | undefined = clonedElement; + while (currentElement && !['LN0', 'LN'].includes(currentElement.tagName)) { + clonedElements.unshift(currentElement!); + currentElement = currentElement?.parentElement; + } + + // Walk through the list of Cloned Elements and walk the original LN Structure. + let parentElement: Element | null = lnElement; + while (parentElement != null && clonedElements.length > 0) { + // Get the first Cloned Element from the list and search the element on the original structure + const childElement = clonedElements.shift(); + if (childElement) { + // Below the LN there are only DOI/SDI/DAI Elements we need to search for. + // The parent can be an LN, DOI or SDI Element. + const name = getNameAttribute(childElement); + parentElement = parentElement.querySelector( + `:scope > DOI[name="${name}"], :scope > SDI[name="${name}"], :scope > DAI[name="${name}"]` + ); + } else { + parentElement = null; + } + } + return parentElement; +} + +/** + * Create a wizard-textfield element for the wizards within the Network part of the 104 plugin. + * @param pType - The type of P a Text Field has to be created for. + * @returns - A Text Field created for a specific type for the Create wizard. + */ +export function createNetworkTextField( + pType: string, + maybeValue?: string +): TemplateResult { + return html``; +} + +/** + * Enumeration stating the active view of the 104 plugin. + */ +export enum View { + VALUES, + NETWORK, +} + +export const VIEW_EVENT_NAME = 'view-change-104-plugin'; + +// Objects needed to register and fire the change of a view within the Communication 104 Plugin +export interface ViewDetail { + view: View; +} +export type ViewEvent = CustomEvent; +export function newViewEvent(view: View): ViewEvent { + return new CustomEvent(VIEW_EVENT_NAME, { + bubbles: true, + composed: true, + detail: { view }, + }); +} + +declare global { + interface ElementEventMap { + [VIEW_EVENT_NAME]: ViewEvent; + } +} diff --git a/packages/open-scd/src/editors/protocol104/foundation/p-types.ts b/packages/open-scd/src/editors/protocol104/foundation/p-types.ts new file mode 100644 index 0000000000..6537afd84c --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/foundation/p-types.ts @@ -0,0 +1,57 @@ +export const pTypes104: string[] = [ + 'IP', + 'IP-SUBNET', + 'W-FACTOR', + 'K-FACTOR', + 'TIMEOUT-0', + 'TIMEOUT-1', + 'TIMEOUT-2', + 'TIMEOUT-3', +]; + +export const pTypesRedundancyGroup104: string[] = [ + 'W-FACTOR', + 'K-FACTOR', + 'TIMEOUT-0', + 'TIMEOUT-1', + 'TIMEOUT-2', + 'TIMEOUT-3', +]; + +export const pTypesLogicLink104: string[] = ['IP', 'IP-SUBNET']; + +const typeBase = { + IP: '([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])[.]([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])[.]([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])[.]([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])', + factor: + '[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-3][0-2][0-7][0-6][0-7]', + timeout: '[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]', +}; + +/** Patterns from IEC 61850-80-1 for all `P` elements */ +export const typePattern: Partial> = { + IP: typeBase.IP, + 'IP-SUBNET': typeBase.IP, + 'W-FACTOR': typeBase.factor, + 'K-FACTOR': typeBase.factor, + 'TIMEOUT-0': typeBase.timeout, + 'TIMEOUT-1': typeBase.timeout, + 'TIMEOUT-2': typeBase.timeout, + 'TIMEOUT-3': typeBase.timeout, +}; + +export const stationTypeOptions: string[] = [ + 'controlling-station', + 'controlled-station', +]; + +export const typeDescriptiveNameKeys: Record = { + StationType: 'protocol104.network.connectedAp.wizard.stationTypeHelper', + IP: 'protocol104.network.connectedAp.wizard.ipHelper', + 'IP-SUBNET': 'protocol104.network.connectedAp.wizard.ipSubnetHelper', + 'W-FACTOR': 'protocol104.network.connectedAp.wizard.wFactorHelper', + 'K-FACTOR': 'protocol104.network.connectedAp.wizard.kFactorHelper', + 'TIMEOUT-0': 'protocol104.network.connectedAp.wizard.timeout0Helper', + 'TIMEOUT-1': 'protocol104.network.connectedAp.wizard.timeout1Helper', + 'TIMEOUT-2': 'protocol104.network.connectedAp.wizard.timeout2Helper', + 'TIMEOUT-3': 'protocol104.network.connectedAp.wizard.timeout3Helper', +}; diff --git a/packages/open-scd/src/editors/protocol104/foundation/private.ts b/packages/open-scd/src/editors/protocol104/foundation/private.ts new file mode 100644 index 0000000000..f0d8922f35 --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/foundation/private.ts @@ -0,0 +1,58 @@ +import { SCL_NAMESPACE } from '../../../schemas.js'; + +export const PROTOCOL_104_PRIVATE = 'IEC_60870_5_104'; +export const PROTOCOL_104_NS = + 'http://www.iec.ch/61850-80-1/2007/IEC_60870-5-104'; +export const PROTOCOL_104_PREFIX = 'IEC_60870_5_104'; + +/** + * Will add the namespace of the 104 Protocol to the Root Element of the Document (SCL) as prefix to + * be used with all 104 elements (Address). + * + * @param document - The Owner Document used to registered the namespace. + */ +export function addPrefixAndNamespaceToDocument(document: Document): void { + const rootElement = document.firstElementChild!; + if (!rootElement.hasAttribute('xmlns:' + PROTOCOL_104_PREFIX)) { + rootElement.setAttributeNS( + 'http://www.w3.org/2000/xmlns/', + 'xmlns:' + PROTOCOL_104_PREFIX, + PROTOCOL_104_NS + ); + } +} + +/** + * Get the SCL Private Element with the type set to the 104 Protocol. + * + * @param daiElement - The DAI Element to search for the 104 Private Element. + * @returns The found Private Element or null if not there. + */ +export function getPrivateElement(daiElement: Element): Element | null { + return daiElement.querySelector(`Private[type="${PROTOCOL_104_PRIVATE}"]`); +} + +/** + * Create an SCL Private Element with the type set to the 104 Protocol. + * + * @param document - The Owner Document used to create the new Private Element with. + * @returns The created Private Element, not yet added to the DAI Element. + */ +export function createPrivateElement(document: Document): Element { + const privateElement = document.createElementNS(SCL_NAMESPACE, 'Private'); + privateElement.setAttribute('type', PROTOCOL_104_PRIVATE); + return privateElement; +} + +/** + * Create a 104 Address element which can be added to the Private element. + * The attribute 'ti' will also be set to value passed. + * + * @param document - The Owner Document used to create the new Address Element with. + * @param ti - The value for the attribute 'ti'. + */ +export function createPrivateAddress(document: Document, ti: string): Element { + const addressElement = document.createElementNS(PROTOCOL_104_NS, 'Address'); + addressElement.setAttribute('ti', ti); + return addressElement; +} diff --git a/packages/open-scd/src/editors/protocol104/ied-container.ts b/packages/open-scd/src/editors/protocol104/ied-container.ts new file mode 100644 index 0000000000..b3cc463074 --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/ied-container.ts @@ -0,0 +1,106 @@ +import { + css, + customElement, + html, + property, + query, + TemplateResult, +} from 'lit-element'; +import { translate } from 'lit-translate'; +import { nothing } from 'lit-html'; + +import { IconButtonToggle } from '@material/mwc-icon-button-toggle'; + +import '@material/mwc-icon'; +import '@material/mwc-icon-button-toggle'; + +import { getDescriptionAttribute, getNameAttribute } from '../../foundation.js'; + +import '../../action-pane.js'; + +import { getFullPath } from './foundation/foundation.js'; + +import './doi-container.js'; +import { PROTOCOL_104_PRIVATE } from './foundation/private.js'; +import { Base104Container } from './base-container.js'; + +/** + * Container showing all the DOI Elements, related to the 104 Protocol, of the passed IED Element in a container. + */ +@customElement('ied-104-container') +export class Ied104Container extends Base104Container { + @property() + element!: Element; + + @query('#toggleButton') + toggleButton!: IconButtonToggle | undefined; + + @property() + get doiElements(): Element[] { + return Array.from(this.element.querySelectorAll(`DOI`)) + .filter( + doiElement => + doiElement.querySelector( + `DAI > Private[type="${PROTOCOL_104_PRIVATE}"] > Address` + ) !== null + ) + .sort((doi1, doi2) => + getFullPath(doi1, 'IED').localeCompare(getFullPath(doi2, 'IED')) + ); + } + + protected firstUpdated(): void { + this.requestUpdate(); + } + + @property() + get header(): TemplateResult { + const name = getNameAttribute(this.element); + const desc = getDescriptionAttribute(this.element); + + return html`${name}${desc ? html` — ${desc}` : nothing}`; + } + + private renderDoiList(): TemplateResult { + const dois = this.doiElements; + return html`${dois.map(doiElement => { + return html` + + + `; + })}`; + } + + render(): TemplateResult { + return html` + + developer_board + + this.requestUpdate()} + > + + + ${this.toggleButton?.on ? html`${this.renderDoiList()}` : nothing} + + `; + } + + static styles = css` + abbr { + text-decoration: none; + border-bottom: none; + } + `; +} diff --git a/packages/open-scd/src/editors/protocol104/network-container.ts b/packages/open-scd/src/editors/protocol104/network-container.ts new file mode 100644 index 0000000000..5affdf537e --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/network-container.ts @@ -0,0 +1,74 @@ +import { get } from 'lit-translate'; +import { css, customElement, html, TemplateResult } from 'lit-element'; + +import './subnetwork-container.js'; +import { + compareNames, + createElement, + newActionEvent, + newWizardEvent, +} from '../../foundation.js'; +import { createSubNetworkWizard } from './wizards/subnetwork.js'; +import { Base104Container } from './base-container.js'; +import { getTypeAttribute } from './foundation/foundation.js'; + +@customElement('network-104-container') +export class Network104Container extends Base104Container { + private getSubNetworkElements(): Element[] { + return Array.from( + this.doc.querySelectorAll('Communication > SubNetwork') ?? [] + ) + .filter(network => getTypeAttribute(network) === '104') + .sort((a, b) => compareNames(a, b)); + } + + /** Opens a [[`WizardDialog`]] for creating a new `SubNetwork` element. */ + private openCreateSubNetworkWizard(): void { + const parent = this.doc.querySelector(':root > Communication'); + if (!parent) { + this.dispatchEvent( + newActionEvent({ + new: { + parent: this.doc.documentElement, + element: createElement(this.doc, 'Communication', {}), + }, + }) + ); + } + this.dispatchEvent(newWizardEvent(createSubNetworkWizard(parent!))); + } + + render(): TemplateResult { + return html` this.openCreateSubNetworkWizard()} + > +
    + ${this.getSubNetworkElements().map( + subnetwork => + html`` + )} +
    `; + } + + static styles = css` + :host { + width: 100vw; + } + + mwc-fab { + position: fixed; + bottom: 32px; + right: 32px; + } + + subnetwork-104-container { + margin: 8px 12px 16px; + } + `; +} diff --git a/packages/open-scd/src/editors/protocol104/subnetwork-container.ts b/packages/open-scd/src/editors/protocol104/subnetwork-container.ts new file mode 100644 index 0000000000..32d422d9b1 --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/subnetwork-container.ts @@ -0,0 +1,110 @@ +import { + css, + customElement, + html, + property, + TemplateResult, +} from 'lit-element'; + +import '@material/mwc-icon-button'; + +import './connectedap-editor.js'; +import { compareNames, newWizardEvent } from '../../foundation.js'; +import { translate } from 'lit-translate'; +import { createConnectedApWizard } from './wizards/connectedap.js'; +import { Base104Container } from './base-container.js'; +import { getTypeAttribute } from './foundation/foundation.js'; + +/** [[`104`]] subeditor for a `SubNetwork` element. */ +@customElement('subnetwork-104-container') +export class SubNetwork104Container extends Base104Container { + /** SCL element SubNetwork */ + @property({ attribute: false }) + element!: Element; + + get bitrate(): string | null { + const bitRate = this.element.querySelector('BitRate'); + if (bitRate === null) return null; + const bitRateValue = bitRate.textContent ?? ''; + const m = bitRate.getAttribute('multiplier'); + const unit = m === null ? 'b/s' : ' ' + m + 'b/s'; + return bitRateValue ? bitRateValue + unit : null; + } + + private openConnectedAPwizard(): void { + this.dispatchEvent(newWizardEvent(createConnectedApWizard(this.element))); + } + + private renderIedContainer(): TemplateResult[] { + return Array.from(this.element.querySelectorAll(':scope > ConnectedAP')) + .map(connAP => connAP.getAttribute('iedName')!) + .filter((v, i, a) => a.indexOf(v) === i) + .sort(compareNames) + .map( + iedName => html` + ${Array.from( + this.element.parentElement?.querySelectorAll( + `:scope > SubNetwork > ConnectedAP[iedName="${iedName}"]` + ) ?? [] + ).map( + connectedAP => + html`` + )} + ` + ); + } + + private subNetworkSpecs(): string { + const type = getTypeAttribute(this.element) ?? null; + + if (!type && !this.bitrate) return ''; + + return `(${type}${type && this.bitrate ? ` — ${this.bitrate}` : ``})`; + } + + private header(): string { + const desc = this.element.getAttribute('desc') ?? null; + const name = this.element.getAttribute('name') ?? undefined; + + return ` ${name} ${desc === null ? '' : `— ${desc}`} + ${this.subNetworkSpecs()}`; + } + + render(): TemplateResult { + return html` + + + +
    ${this.renderIedContainer()}
    +
    `; + } + + static styles = css` + #iedContainer { + display: grid; + box-sizing: border-box; + gap: 12px; + padding: 8px 12px 16px; + grid-template-columns: repeat(auto-fit, minmax(150px, auto)); + } + + #iedSection:not(:focus):not(:focus-within) .disabled { + display: none; + } + + #iedSection .disabled { + pointer-events: none; + opacity: 0.5; + } + `; +} diff --git a/packages/open-scd/src/editors/protocol104/values-container.ts b/packages/open-scd/src/editors/protocol104/values-container.ts new file mode 100644 index 0000000000..346deaee16 --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/values-container.ts @@ -0,0 +1,94 @@ +import { + css, + customElement, + html, + property, + TemplateResult, +} from 'lit-element'; +import { get, translate } from 'lit-translate'; + +import { compareNames, newWizardEvent } from '../../foundation.js'; + +import './ied-container.js'; + +import { selectDoWizard } from './wizards/selectDo.js'; +import { PROTOCOL_104_PRIVATE } from './foundation/private.js'; +import { Base104Container } from './base-container.js'; + +/** + * Container that will render an 'ied-104-container' for every IED which contains DAI Elements related to the + * 104 Protocol. + */ +@customElement('values-104-container') +export class Values104Container extends Base104Container { + @property() + get iedElements(): Element[] { + return Array.from(this.doc.querySelectorAll('IED')) + .filter( + ied => + ied.querySelectorAll( + `DAI > Private[type="${PROTOCOL_104_PRIVATE}"] > Address` + ).length > 0 + ) + .sort((a, b) => compareNames(a, b)); + } + + /** Opens a [[`WizardDialog`]] for creating a new `Substation` element. */ + private openCreateAddressWizard(): void { + this.dispatchEvent(newWizardEvent(selectDoWizard(this.doc))); + } + + private renderAddButton(): TemplateResult { + return html`

    + this.openCreateAddressWizard()} + > + +

    `; + } + + render(): TemplateResult { + const ieds = this.iedElements; + if (ieds.length > 0) { + return html` + ${ieds.map(iedElement => { + return html``; + })} + ${this.renderAddButton()} + `; + } + return html`

    + ${translate('protocol104.values.missing')} +

    + ${this.renderAddButton()}`; + } + + static styles = css` + mwc-fab { + position: fixed; + bottom: 32px; + right: 32px; + } + + h1 { + color: var(--mdc-theme-on-surface); + font-family: 'Roboto', sans-serif; + font-weight: 300; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + margin: 0px; + line-height: 48px; + padding-left: 0.3em; + } + `; +} diff --git a/packages/open-scd/src/editors/protocol104/wizards/address.ts b/packages/open-scd/src/editors/protocol104/wizards/address.ts new file mode 100644 index 0000000000..2b058e5eda --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/wizards/address.ts @@ -0,0 +1,245 @@ +import { html, TemplateResult } from 'lit-element'; +import { get, translate } from 'lit-translate'; +import { live } from 'lit-html/directives/live'; + +import '@material/mwc-list/mwc-list-item'; +import '@material/mwc-select'; +import '@material/mwc-textarea'; + +import { + cloneElement, + EditorAction, + getNameAttribute, + getValue, + patterns, + Wizard, + WizardActor, + WizardInputElement, +} from '../../../foundation.js'; + +import '../../../wizard-textfield.js'; +import '../../../wizard-select.js'; + +import { + getCdcValueFromDOIElement, + getEnumVal, + getFullPath, +} from '../foundation/foundation.js'; +import { hasScaleFields, hasUnitMultiplierField } from '../foundation/cdc.js'; + +const allowedMultipliers = [ + 'm', + 'k', + 'M', + 'mu', + 'y', + 'z', + 'a', + 'f', + 'p', + 'n', + 'c', + 'd', + 'da', + 'h', + 'G', + 'T', + 'P', + 'E', + 'Z', + 'Y', +]; + +export function updateAddressValue( + doiElement: Element, + daiElement: Element, + addressElement: Element +): WizardActor { + return (inputs: WizardInputElement[]): EditorAction[] => { + const cdc = getCdcValueFromDOIElement(doiElement) ?? ''; + const ti = addressElement.getAttribute('ti') ?? ''; + + const casdu = getValue(inputs.find(i => i.label === 'casdu')!)!; + const ioa = getValue(inputs.find(i => i.label === 'ioa')!); + const unitMultiplier = hasUnitMultiplierField(cdc, ti) + ? getValue(inputs.find(i => i.label === 'unitMultiplier')!) + : null; + const scaleMultiplier = hasScaleFields(cdc, ti) + ? getValue(inputs.find(i => i.label === 'scaleMultiplier')!) + : null; + const scaleOffset = hasScaleFields(cdc, ti) + ? getValue(inputs.find(i => i.label === 'scaleOffset')!) + : null; + + if ( + casdu === addressElement.getAttribute('casdu') && + ioa === addressElement.getAttribute('ioa') && + unitMultiplier === addressElement.getAttribute('unitMultiplier') && + scaleMultiplier === addressElement.getAttribute('scaleMultiplier') && + scaleOffset === addressElement.getAttribute('scaleOffset') + ) { + return []; + } + + const newElement = cloneElement(addressElement, { + casdu, + ioa, + unitMultiplier, + scaleMultiplier, + scaleOffset, + }); + + return [ + { old: { element: addressElement! }, new: { element: newElement } }, + ]; + }; +} + +export function editAddressWizard( + iedElement: Element, + doiElement: Element, + daiElement: Element, + addressElement: Element +): Wizard { + function renderAddressWizard(): TemplateResult[] { + const cdc = getCdcValueFromDOIElement(doiElement) ?? ''; + const ti = addressElement.getAttribute('ti') ?? ''; + + // Add the basic fields to the list. + const fields: TemplateResult[] = [ + html` + `, + html` + `, + html` + `, + html` + `, + html` + `, + html` + `, + html` + `, + ]; + + if (hasUnitMultiplierField(cdc, ti)) { + fields.push(html` + ${allowedMultipliers.map( + multiplier => + html` + ${multiplier} + ` + )} + `); + } + + if (hasScaleFields(cdc, ti)) { + fields.push(html` + `); + + fields.push(html` + `); + } + + const expectedValue = addressElement.getAttribute('expectedValue'); + if (expectedValue) { + fields.push(html` + `); + fields.push(html` + `); + } + + if (addressElement.hasAttribute('inverted')) { + fields.push(html` + `); + } + + if (addressElement.hasAttribute('check')) { + fields.push(html` + `); + } + + return fields; + } + + return [ + { + title: get('protocol104.wizard.title.addressEdit'), + element: addressElement, + primary: { + icon: 'edit', + label: get('save'), + action: updateAddressValue(doiElement, daiElement, addressElement), + }, + content: renderAddressWizard(), + }, + ]; +} diff --git a/packages/open-scd/src/editors/protocol104/wizards/connectedap.ts b/packages/open-scd/src/editors/protocol104/wizards/connectedap.ts new file mode 100644 index 0000000000..15ad9c2fe6 --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/wizards/connectedap.ts @@ -0,0 +1,403 @@ +import { html, TemplateResult } from 'lit-element'; +import { get, translate } from 'lit-translate'; +import { ifDefined } from 'lit-html/directives/if-defined'; + +import '@material/mwc-checkbox'; +import '@material/mwc-switch'; +import '@material/mwc-formfield'; +import '@material/mwc-list/mwc-list-item'; +import '@material/mwc-list/mwc-check-list-item'; +import '@material/mwc-icon'; + +import { Checkbox } from '@material/mwc-checkbox'; +import { List } from '@material/mwc-list'; +import { ListItemBase } from '@material/mwc-list/mwc-list-item-base'; +import { SingleSelectedEvent } from '@material/mwc-list/mwc-list-foundation'; + +import '../../../wizard-textfield.js'; +import '../../../filtered-list.js'; + +import { + pTypes104, + stationTypeOptions, + typeDescriptiveNameKeys, + typePattern, +} from '../foundation/p-types.js'; +import { + cloneElement, + compareNames, + ComplexAction, + createElement, + EditorAction, + getValue, + identity, + isPublic, + newSubWizardEvent, + newWizardEvent, + Wizard, + WizardActor, + WizardInputElement, + WizardMenuActor, +} from '../../../foundation.js'; +import { getTypeAttribute } from '../foundation/foundation.js'; +import { + createRedundancyGroupWizard, + editRedundancyGroupWizard, +} from './redundancygroup.js'; + +interface AccessPointDescription { + element: Element; + connected?: boolean; +} + +/** Sorts connected `AccessPoint`s to the bottom. */ +function compareAccessPointConnection( + a: AccessPointDescription, + b: AccessPointDescription +): number { + if (a.connected !== b.connected) return b.connected ? -1 : 1; + return 0; +} + +function createConnectedApAction(parent: Element): WizardActor { + return ( + _: WizardInputElement[], + __: Element, + list?: List | null + ): EditorAction[] => { + if (!list) return []; + + const identities = (list.selected).map(item => item.value); + + const actions = identities.map(identity => { + const [iedName, apName] = identity.split('>'); + + return { + new: { + parent, + element: createElement(parent.ownerDocument, 'ConnectedAP', { + iedName, + apName, + }), + }, + }; + }); + + return actions; + }; +} + +function existConnectedAp(accesspoint: Element): boolean { + const iedName = accesspoint.closest('IED')?.getAttribute('name'); + const apName = accesspoint.getAttribute('name'); + + const connAp = accesspoint.ownerDocument.querySelector( + `ConnectedAP[iedName="${iedName}"][apName="${apName}"]` + ); + + return (connAp && isPublic(connAp)) ?? false; +} + +/** @returns single page [[`Wizard`]] for creating SCL element ConnectedAP. */ +export function createConnectedApWizard(element: Element): Wizard { + const doc = element.ownerDocument; + + const accessPoints = Array.from(doc.querySelectorAll(':root > IED')) + .sort(compareNames) + .flatMap(ied => + Array.from(ied.querySelectorAll(':root > IED > AccessPoint')) + ) + .map(accesspoint => { + return { + element: accesspoint, + connected: existConnectedAp(accesspoint), + }; + }) + .sort(compareAccessPointConnection); + + return [ + { + title: get('wizard.title.add', { tagName: 'ConnectedAP' }), + primary: { + icon: 'save', + label: get('save'), + action: createConnectedApAction(element), + }, + content: [ + html` ${accessPoints.map(accesspoint => { + const id = identity(accesspoint.element); + + return html`${id}`; + })} + `, + ], + }, + ]; +} + +function isEqualAddress(oldAddress: Element, newAddress: Element): boolean { + return Array.from(oldAddress.querySelectorAll('Address > P')).every(pType => + newAddress + .querySelector(`Address > P[type="${getTypeAttribute(pType)}"]`) + ?.isEqualNode(pType) + ); +} + +function createAddressElement( + inputs: WizardInputElement[], + parent: Element, + typeRestriction: boolean +): Element { + const element = createElement(parent.ownerDocument, 'Address', {}); + + inputs + .filter(input => getValue(input) !== null) + .forEach(validInput => { + const type = validInput.label; + const child = createElement(parent.ownerDocument, 'P', { type }); + + if (typeRestriction) + child.setAttributeNS( + 'http://www.w3.org/2001/XMLSchema-instance', + 'xsi:type', + 'tP_' + type + ); + + child.textContent = getValue(validInput); + element.appendChild(child); + }); + + return element; +} + +/** @returns single page [[`Wizard`]] to edit SCL element ConnectedAP for the 104 plugin. */ +export function editConnectedApWizard( + parent: Element, + redundancy?: boolean +): Wizard { + const redundancyGroupNumbers = getRedundancyGroupNumbers(parent); + return [ + { + title: get('protocol104.network.connectedAp.wizard.title.edit'), + element: parent, + menuActions: redundancy + ? [ + { + icon: 'playlist_add', + label: get( + 'protocol104.network.connectedAp.wizard.addRedundancyGroup' + ), + action: openRedundancyGroupWizard(parent, redundancyGroupNumbers), + }, + ] + : undefined, + primary: { + icon: 'save', + label: get('save'), + action: editConnectedApAction(parent, redundancy), + }, + content: [ + html` + { + event.target!.dispatchEvent(newWizardEvent()); + event.target!.dispatchEvent( + newSubWizardEvent(() => + editConnectedApWizard(parent, !redundancy) + ) + ); + }} + > + + + ${createTypeRestrictionCheckbox(parent)} + P[type="StationType"]` + )?.innerHTML ?? null} + required + fixedMenuPosition + helper="${translate(typeDescriptiveNameKeys['StationType'])}" + > + ${stationTypeOptions.map( + option => + html`${option}` + )} + + ${redundancy + ? html`

    + ${get( + 'protocol104.network.connectedAp.wizard.redundancyGroupTitle' + )} +

    + { + e.target!.dispatchEvent( + newSubWizardEvent(() => + editRedundancyGroupWizard( + parent, + redundancyGroupNumbers[e.detail.index] + ) + ) + ); + }} + > + ${redundancyGroupNumbers.length != 0 + ? redundancyGroupNumbers.map( + number => + html`Redundancy Group ${number}` + ) + : html`

    + ${get( + 'protocol104.network.connectedAp.wizard.noRedundancyGroupsAvailable' + )} +

    `} +
    ` + : html`${pTypes104.map( + pType => html`${createEditTextField(parent, pType)}` + )}`} `, + ], + }, + ]; +} + +function editConnectedApAction( + parent: Element, + redundancy?: boolean +): WizardActor { + return (inputs: WizardInputElement[], wizard: Element): EditorAction[] => { + const typeRestriction: boolean = + (wizard.shadowRoot?.querySelector('#typeRestriction')) + ?.checked ?? false; + + const newAddress = createAddressElement(inputs, parent, typeRestriction); + const oldAddress = parent.querySelector('Address'); + + const complexAction: ComplexAction = { + actions: [], + title: get('connectedap.action.addaddress', { + iedName: parent.getAttribute('iedName') ?? '', + apName: parent.getAttribute('apName') ?? '', + }), + }; + // When we have a redundanct ConnectedAP, we are only interested in the StationType value. + // All redundancy group actions are done in those wizards itself. + if (redundancy) { + const stationTypeValue = getValue( + inputs.find(i => i.label === 'StationType')! + )!; + const originalElement = oldAddress?.querySelector( + 'P[type="StationType"]' + ); + + const elementClone = cloneElement(originalElement!, {}); + elementClone!.textContent = stationTypeValue; + + complexAction.actions.push({ + old: { + element: originalElement!, + }, + new: { + element: elementClone, + }, + }); + } else if (oldAddress !== null && !isEqualAddress(oldAddress, newAddress)) { + //address & child elements P are changed: cannot use replace editor action + complexAction.actions.push({ + old: { + parent, + element: oldAddress, + }, + }); + complexAction.actions.push({ + new: { + parent, + element: newAddress, + }, + }); + } else if (oldAddress === null) + complexAction.actions.push({ + new: { + parent: parent, + element: newAddress, + }, + }); + + return complexAction.actions.length ? [complexAction] : []; + }; +} + +function openRedundancyGroupWizard( + element: Element, + rGNumbers: number[] +): WizardMenuActor { + return (wizard: Element): void => { + wizard.dispatchEvent( + newSubWizardEvent(createRedundancyGroupWizard(element, rGNumbers)) + ); + }; +} + +/** + * Get all the current used Redundancy Group numbers. + * @param parent - The parent element of all the P elements. + * @returns An array with all the Redundancy Group numbers. + */ +function getRedundancyGroupNumbers(parent: Element): number[] { + const groupNumbers: number[] = []; + + parent.querySelectorAll(`Address > P[type^="RG"]`).forEach(p => { + const redundancyGroupPart = getTypeAttribute(p)?.split('-')[0]; + const number = Number(redundancyGroupPart?.substring(2)); + + if (!groupNumbers.includes(number)) groupNumbers.push(number); + }); + + return groupNumbers.sort(); +} + +/** + * Create a wizard-textfield element for the Edit wizard. + * @param parent - The parent element of the P to create. + * @param pType - The type of P a Text Field has to be created for. + * @returns - A Text Field created for a specific type for the Edit wizard. + */ +function createEditTextField(parent: Element, pType: string): TemplateResult { + return html` P[type="${pType}"]`) + ?.innerHTML ?? null} + >`; +} + +function createTypeRestrictionCheckbox(element: Element): TemplateResult { + return html` + `; +} + +function hasTypeRestriction(element: Element): boolean { + return Array.from(element.querySelectorAll('Address > P')) + .filter(p => isPublic(p)) + .some(pType => pType.getAttribute('xsi:type')); +} diff --git a/packages/open-scd/src/editors/protocol104/wizards/createAddresses.ts b/packages/open-scd/src/editors/protocol104/wizards/createAddresses.ts new file mode 100644 index 0000000000..86aa813090 --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/wizards/createAddresses.ts @@ -0,0 +1,354 @@ +import { get, translate } from 'lit-translate'; +import { html, TemplateResult } from 'lit-element'; + +import { Switch } from '@material/mwc-switch'; + +import '@material/mwc-formfield'; +import '@material/mwc-list/mwc-list-item'; +import '@material/mwc-switch'; + +import '../../../wizard-textfield.js'; +import '../../../WizardDivider.js'; + +import { + ComplexAction, + EditorAction, + getNameAttribute, + getValue, + newWizardEvent, + Wizard, + WizardActor, + WizardInputElement, +} from '../../../foundation.js'; + +import { + getCdcValueFromDOElement, + getCtlModel, + getFullPath, +} from '../foundation/foundation.js'; +import { + cdcProcessings, + SupportedCdcType, + TiInformation, +} from '../foundation/cdc.js'; +import { createActions, createCheckActions } from '../foundation/actions.js'; + +function getSwitchValue(wizard: Element, name: string): boolean { + const switchElement = wizard.shadowRoot?.querySelector( + `mwc-switch[id="${name}"` + ); + return switchElement?.checked ?? false; +} + +export function createAddressesAction( + lnElement: Element, + doElement: Element, + hasControlTis: boolean +): WizardActor { + return (inputs: WizardInputElement[], wizard: Element): EditorAction[] => { + // Close previous wizard (SelectDO) to prevent it from showing after saving. + wizard.dispatchEvent(newWizardEvent()); + + const cdc = getCdcValueFromDOElement(doElement) ?? ''; + const cdcProcessing = cdcProcessings[cdc]; + const complexAction: ComplexAction = { + actions: [], + title: get('protocol104.values.addedAddress', { + name: getNameAttribute(doElement) ?? 'Unknown', + lnName: getFullPath(lnElement, 'IED'), + }), + }; + + // Create a Deep Clone of the LN Element, to keep track on which structure is initialized. + const lnClonedElement = lnElement.cloneNode(true); + + // Create all Monitor Addresses + const selectedMonitorTi = + getValue(inputs.find(i => i.label === 'monitorTi')!) ?? ''; + const monitorInverted = getSwitchValue(wizard, 'monitorInverted'); + const tiInformation = cdcProcessing.monitor[selectedMonitorTi]; + if (tiInformation) { + complexAction.actions.push( + ...createActions( + lnElement, + lnClonedElement, + doElement, + wizard, + selectedMonitorTi, + monitorInverted, + tiInformation + ) + ); + } + + const monitorCheck = getSwitchValue(wizard, 'monitorCheck'); + if (monitorCheck) { + complexAction.actions.push( + ...createCheckActions( + lnElement, + lnClonedElement, + doElement, + wizard, + selectedMonitorTi, + tiInformation + ) + ); + } + + // Create all Control Addresses + if (hasControlTis) { + const ctlModel = getCtlModel(lnElement, doElement); + if (ctlModel !== null && ctlModel !== 'status-only') { + const selectedControlTi = + getValue(inputs.find(i => i.label === 'controlTi')!) ?? ''; + const controlInverted = getSwitchValue(wizard, 'controlInverted'); + + const tiInformation = cdcProcessing.control[selectedControlTi]; + if (tiInformation) { + complexAction.actions.push( + ...createActions( + lnElement, + lnClonedElement, + doElement, + wizard, + selectedControlTi, + controlInverted, + tiInformation + ) + ); + } + + const controlCheck = getSwitchValue(wizard, 'controlCheck'); + if (controlCheck) { + complexAction.actions.push( + ...createCheckActions( + lnElement, + lnClonedElement, + doElement, + wizard, + selectedControlTi, + tiInformation + ) + ); + } + } + } + + if (complexAction.actions.length > 0) { + return [complexAction]; + } + // There are no Address elements created for any DAI, close window. + wizard.dispatchEvent(newWizardEvent()); + return []; + }; +} + +export function disableCheckSwitch( + tiInfo: Record +): boolean { + let disableSwitch = true; + Object.values(tiInfo).forEach(tiInformation => { + if (tiInformation.checkDaPaths && tiInformation.checkCreate) { + disableSwitch = false; + } + }); + return disableSwitch; +} + +export function disableInvertedSwitch( + tiInfo: Record +): boolean { + let disableSwitch = true; + Object.values(tiInfo).forEach(tiInformation => { + if (tiInformation.inverted === true) { + disableSwitch = false; + } + }); + return disableSwitch; +} + +export function createAddressesWizard( + lnElement: Element, + doElement: Element +): Wizard { + const cdc = getCdcValueFromDOElement(doElement) ?? ''; + const cdcProcessing = cdcProcessings[cdc]; + + const monitorTis = Object.keys(cdcProcessing.monitor); + const controlTis = Object.keys(cdcProcessing.control); + + function renderCreateAddressesWizard(): TemplateResult[] { + const doName = getNameAttribute(doElement) ?? ''; + const iedElement = lnElement.closest('IED'); + const fullPath = getFullPath(lnElement, 'IED'); + + // Add the basic fields to the list. + const fields = [ + html` + `, + html` + `, + html` + `, + html` + `, + ]; + + if (monitorTis.length > 0) { + fields.push(html``); + if (monitorTis.length > 1) { + fields.push( + html` + ${monitorTis.map( + monitorTi => + html` + ${monitorTi} + ` + )} + ` + ); + } else { + fields.push( + html` + ` + ); + } + fields.push( + html` + + + ` + ); + fields.push( + html` + + + ` + ); + } + + if (controlTis.length > 0) { + fields.push(html` `); + + const ctlModel = getCtlModel(lnElement, doElement); + if (ctlModel !== null) { + fields.push(html` + `); + } + + if (ctlModel !== null && ctlModel !== 'status-only') { + if (controlTis.length > 1) { + fields.push( + html` + ${controlTis.map( + controlTi => + html` + ${controlTi} + ` + )} + ` + ); + } else { + fields.push( + html` + ` + ); + } + fields.push( + html` + + + ` + ); + fields.push( + html` + + + ` + ); + } + } + return fields; + } + + return [ + { + title: get('wizard.title.add', { tagName: 'Address' }), + primary: { + icon: 'add', + label: get('add'), + action: createAddressesAction( + lnElement, + doElement, + controlTis.length > 0 + ), + }, + content: renderCreateAddressesWizard(), + }, + ]; +} diff --git a/packages/open-scd/src/editors/protocol104/wizards/doi.ts b/packages/open-scd/src/editors/protocol104/wizards/doi.ts new file mode 100644 index 0000000000..fafca3d117 --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/wizards/doi.ts @@ -0,0 +1,172 @@ +import { html, TemplateResult } from 'lit-element'; +import { get } from 'lit-translate'; + +import '@material/mwc-textarea'; + +import { + ComplexAction, + getNameAttribute, + newActionEvent, + newWizardEvent, + Wizard, + WizardMenuActor, +} from '../../../foundation.js'; + +import '../../../wizard-textfield.js'; + +import { + getCdcValueFromDOIElement, + getCtlModel, + getDoElement, + getFullPath, +} from '../foundation/foundation.js'; +import { cdcProcessings, SupportedCdcType } from '../foundation/cdc.js'; +import { PROTOCOL_104_PRIVATE } from '../foundation/private.js'; + +function renderTiOverview(foundTis: string[], label: string): TemplateResult { + if (foundTis.length > 0) { + return html` + `; + } + return html``; +} + +export function renderDOIWizard(doiElement: Element): TemplateResult[] { + const iedElement = doiElement.closest('IED'); + const fullpath = getFullPath(doiElement, 'IED'); + const cdc = getCdcValueFromDOIElement(doiElement); + + // Add the basic fields to the list. + const fields: TemplateResult[] = [ + html` + `, + html` + `, + html` + `, + ]; + + const lnElement = doiElement.closest('LN0, LN'); + const doName = getNameAttribute(doiElement); + if (lnElement && doName) { + const doElement = getDoElement(lnElement, doName); + if (doElement) { + const ctlModel = getCtlModel(lnElement, doElement); + if (ctlModel !== null) { + fields.push(html` + `); + } + } + } + + let monitorTis: string[] = []; + let controlTis: string[] = []; + const cdcProcessing = cdcProcessings[cdc]; + fields.push(html` + `); + if (cdcProcessing) { + monitorTis = Object.keys(cdcProcessing.monitor); + controlTis = Object.keys(cdcProcessing.control); + } + + let foundTis = Array.from( + doiElement.querySelectorAll( + `DAI > Private[type="${PROTOCOL_104_PRIVATE}"] > Address` + ) + ) + .filter(element => element.getAttribute('ti') !== '') + .map(element => element.getAttribute('ti')!); + // Remove duplicates from the array. + foundTis = [...new Set(foundTis)]; + + const foundMonitorTis = foundTis.filter(ti => monitorTis.includes(ti)); + const foundControlTis = foundTis.filter(ti => controlTis.includes(ti)); + const otherTis = foundTis + .filter(ti => !foundMonitorTis.includes(ti)) + .filter(ti => !foundControlTis.includes(ti)); + + fields.push(renderTiOverview(monitorTis, 'Available Monitor TIs')); + fields.push(renderTiOverview(foundMonitorTis, 'Found Monitor TIs')); + fields.push(renderTiOverview(controlTis, 'Available Control TIs')); + fields.push(renderTiOverview(foundControlTis, 'Found Control TIs')); + fields.push(renderTiOverview(otherTis, 'Other TIs')); + return fields; +} + +export function remove104Private(doiElement: Element): WizardMenuActor { + return (wizard: Element): void => { + // The 104 Private Element only contains Address Elements, so we can remove all the 104 Private Elements + // to remove all the Address Elements also. + const privateElements = doiElement.querySelectorAll( + `DAI > Private[type="${PROTOCOL_104_PRIVATE}"] > Address` + ); + if (privateElements.length > 0) { + const complexAction: ComplexAction = { + actions: [], + title: get('protocol104.values.removedAddresses', { + name: getFullPath(doiElement, 'SCL'), + nrOfAddresses: privateElements.length, + }), + }; + privateElements.forEach(privateElement => { + complexAction.actions.push({ + old: { + parent: privateElement.parentElement!, + element: privateElement, + }, + }); + }); + + wizard.dispatchEvent(newActionEvent(complexAction)); + wizard.dispatchEvent(newWizardEvent()); + } + }; +} + +export function showDOIInfoWizard(doiElement: Element): Wizard { + return [ + { + title: get('protocol104.wizard.title.doiInfo'), + menuActions: [ + { + label: get('protocol104.values.removeAddresses'), + icon: 'delete', + action: remove104Private(doiElement), + }, + ], + content: renderDOIWizard(doiElement), + }, + ]; +} diff --git a/packages/open-scd/src/editors/protocol104/wizards/logiclink.ts b/packages/open-scd/src/editors/protocol104/wizards/logiclink.ts new file mode 100644 index 0000000000..b563e83576 --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/wizards/logiclink.ts @@ -0,0 +1,194 @@ +import { html } from 'lit-element'; +import { get } from 'lit-translate'; + +import '../../../wizard-textfield.js'; +import { + pTypesLogicLink104 +} from '../foundation/p-types.js'; +import { + cloneElement, + ComplexAction, + createElement, + EditorAction, + getValue, + newActionEvent, + newWizardEvent, + SimpleAction, + Wizard, + WizardActor, + WizardInputElement, + WizardMenuActor +} from '../../../foundation.js'; +import { createNetworkTextField } from '../foundation/foundation.js'; + +export function editLogicLinkWizard(parent: Element, rGNumber: number, lLNumber: number): Wizard { + return [ + { + title: get('protocol104.network.logicLink.wizard.title.edit'), + menuActions: [ + { + icon: 'delete', + label: get('remove'), + action: remove(parent, rGNumber, lLNumber), + }, + ], + primary: { + icon: 'save', + label: get('save'), + action: editLogicLinkAction(parent, rGNumber, lLNumber), + }, + content: [ + html` + ${pTypesLogicLink104.map( + pType => html`${createNetworkTextField(pType, parent.querySelector( + `Address > P[type$="RG${rGNumber}-LL${lLNumber}-${pType}"]` + )?.innerHTML)}` + )}` + ], + }, + ]; +} + +export function createLogicLinkWizard(parent: Element, rGNumber: number, occupiedLLNumbers: number[]): Wizard { + // Calculate the first available number for the Logic Link group. + let lLNumber = 1; + while (occupiedLLNumbers.find(n => n == lLNumber)) { + lLNumber++; + } + + return [ + { + title: get('protocol104.network.logicLink.wizard.title.add'), + primary: { + icon: '', + label: get('save'), + action: addLogicLinkAction(parent, rGNumber, lLNumber), + }, + content: [ + html` + ${pTypesLogicLink104.map( + pType => html`${createNetworkTextField(pType)}` + )}` + ], + }, + ]; +} + +/** + * Remove all P elements belonging to a single Logic Link group. + * @param parent - The parent element of the P elements to remove. + * @param rGNumber - The Redundancy Group number of all the P elements to remove. + * @param lLNumber - The Logic Link Group number of all the P elements to remove. + * @returns - Removing all P elements belonging to a Logic Link group. + */ +function remove(parent: Element, rGNumber: number, lLNumber: number): WizardMenuActor { + return (wizard: Element): void => { + const addressElement = parent.querySelector('Address'); + + const complexAction: ComplexAction = { + actions: [], + title: get('protocol104.network.logicLink.wizard.removedLogicLink', { + subNetworkName: parent.parentElement!.getAttribute('name')!, + apName: parent.getAttribute('apName')!, + iedName: parent.getAttribute('iedName')! + }), + }; + + addressElement!.querySelectorAll(`P[type^="RG${rGNumber}-LL${lLNumber}-"]`).forEach(p => { + complexAction.actions.push({ + old: { + parent: addressElement!, + element: p! + } + }); + }); + + wizard.dispatchEvent(newActionEvent(complexAction)); + wizard.dispatchEvent(newWizardEvent()); + }; +} + +function editLogicLinkAction(parent: Element, rGNumber: number, lLNumber: number): WizardActor { + return (inputs: WizardInputElement[]): EditorAction[] => { + const actions: SimpleAction[] = []; + + pTypesLogicLink104.forEach(type => { + const inputValue = getValue(inputs.find(i => i.label === type)!)!; + const elementOriginal = parent.querySelector(`Address > P[type="RG${rGNumber}-LL${lLNumber}-${type}"]`); + + if (elementOriginal == null) { + const element = createElement(parent.ownerDocument, 'P', { + type: `RG${rGNumber}-LL${lLNumber}-${type}` + }); + element.textContent = getValue(inputs.find(i => i.label === type)!)!; + + actions.push({ + new: { + parent: parent.querySelector('Address')!, + element: element, + } + }); + } else if (inputValue !== elementOriginal?.textContent) { + const elementClone = cloneElement(elementOriginal!, {}); + elementClone.textContent = inputValue; + + actions.push({ + old: { + element: elementOriginal! + }, + new: { + element: elementClone + } + }); + } + }); + + return actions.length != 0 + ? [{ + actions, + title: get('protocol104.network.logicLink.wizard.editedLogicLink', { + subNetworkName: parent.parentElement!.getAttribute('name')!, + apName: parent.getAttribute('apName')!, + iedName: parent.getAttribute('iedName')! + }), + }] + : []; + }; +} + +function addLogicLinkAction(parent: Element, rGNumber: number, lLNumber: number): WizardActor { + return (inputs: WizardInputElement[]): EditorAction[] => { + const complexAction: ComplexAction = { + actions: [], + title: get('protocol104.network.logicLink.wizard.addedLogicLink', { + subNetworkName: parent.parentElement!.getAttribute('name')!, + apName: parent.getAttribute('apName')!, + iedName: parent.getAttribute('iedName')! + }), + }; + + pTypesLogicLink104.forEach(type => { + const element = createElement(parent.ownerDocument, 'P', { + type: `RG${rGNumber}-LL${lLNumber}-${type}` + }); + element.textContent = getValue(inputs.find(i => i.label === type)!)!; + + complexAction.actions.push({ + new: { + parent: parent.querySelector('Address')!, + element: element, + } + }); + }); + + return [complexAction]; + }; +} diff --git a/packages/open-scd/src/editors/protocol104/wizards/redundancygroup.ts b/packages/open-scd/src/editors/protocol104/wizards/redundancygroup.ts new file mode 100644 index 0000000000..a6ab563b6a --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/wizards/redundancygroup.ts @@ -0,0 +1,295 @@ +import { html } from 'lit-element'; +import { get } from 'lit-translate'; + +import '../../../wizard-textfield.js'; +import { pTypesRedundancyGroup104 } from '../foundation/p-types.js'; +import { + cloneElement, + ComplexAction, + createElement, + EditorAction, + getValue, + newActionEvent, + newSubWizardEvent, + newWizardEvent, + SimpleAction, + Wizard, + WizardActor, + WizardInputElement, + WizardMenuActor, +} from '../../../foundation.js'; +import { SingleSelectedEvent } from '@material/mwc-list/mwc-list-foundation'; +import { createLogicLinkWizard, editLogicLinkWizard } from './logiclink.js'; +import { + createNetworkTextField, + getTypeAttribute, +} from '../foundation/foundation.js'; + +export function editRedundancyGroupWizard( + parent: Element, + rGNumber: number +): Wizard { + const usedLLNumbers = getLogicLinkNumbers(parent, rGNumber); + return [ + { + title: get('protocol104.network.redundancyGroup.wizard.title.edit'), + menuActions: [ + { + icon: 'playlist_add', + label: get('protocol104.network.redundancyGroup.wizard.addLogicLink'), + action: (wizard: Element): void => { + wizard.dispatchEvent( + newSubWizardEvent( + createLogicLinkWizard(parent, rGNumber, usedLLNumbers) + ) + ); + }, + }, + { + icon: 'delete', + label: get('remove'), + action: remove(parent, rGNumber), + }, + ], + primary: { + icon: 'save', + label: get('save'), + action: editRedundancyGroupAction(parent, rGNumber), + }, + content: [ + html` + ${pTypesRedundancyGroup104.map( + pType => + html`${createNetworkTextField( + pType, + parent.querySelector( + `Address > P[type$="RG${rGNumber}-${pType}"]` + )?.innerHTML + )}` + )} +

    + ${get( + 'protocol104.network.redundancyGroup.wizard.logicLinkGroupTitle' + )} +

    + { + e.target!.dispatchEvent( + newSubWizardEvent(() => + editLogicLinkWizard( + parent, + rGNumber, + usedLLNumbers[e.detail.index] + ) + ) + ); + }} + > + ${usedLLNumbers.length != 0 + ? usedLLNumbers.map( + number => + html`Logic Link ${number}` + ) + : html`

    + ${get( + 'protocol104.network.redundancyGroup.wizard.noLogicLinksAvailable' + )} +

    `} +
    `, + ], + }, + ]; +} + +export function createRedundancyGroupWizard( + parent: Element, + occupiedRGNumbers: number[] +): Wizard { + // Calculate the first available number for the Logic Link group. + let rGNumber = 1; + while (occupiedRGNumbers.find(n => n == rGNumber)) { + rGNumber++; + } + + return [ + { + title: get('protocol104.network.redundancyGroup.wizard.title.add'), + primary: { + icon: '', + label: get('save'), + action: addRedundancyGroupAction(parent, rGNumber), + }, + content: [ + html` + ${pTypesRedundancyGroup104.map( + pType => html`${createNetworkTextField(pType)}` + )}`, + ], + }, + ]; +} + +/** + * Remove all P elements belonging to a single Redundancy Group. + * @param parent - The parent element of the P elements to remove. + * @param rGNumber - The Redundancy Group number of all the P elements to remove. + * @returns - Removing all P elements belonging to a Redundancy Group. + */ +function remove(parent: Element, rGNumber: number): WizardMenuActor { + return (wizard: Element): void => { + const addressElement = parent.querySelector('Address'); + + const complexAction: ComplexAction = { + actions: [], + title: get( + 'protocol104.network.redundancyGroup.wizard.removedRedundancyGroup', + { + rGNumber, + subNetworkName: parent.parentElement!.getAttribute('name')!, + apName: parent.getAttribute('apName')!, + iedName: parent.getAttribute('iedName')!, + } + ), + }; + + addressElement!.querySelectorAll(`P[type^="RG${rGNumber}-"]`).forEach(p => { + complexAction.actions.push({ + old: { + parent: addressElement!, + element: p!, + }, + }); + }); + + wizard.dispatchEvent(newActionEvent(complexAction)); + wizard.dispatchEvent(newWizardEvent()); + }; +} + +function editRedundancyGroupAction( + parent: Element, + rGNumber: number +): WizardActor { + return (inputs: WizardInputElement[]): EditorAction[] => { + const actions: SimpleAction[] = []; + + pTypesRedundancyGroup104.forEach(type => { + const inputValue = getValue(inputs.find(i => i.label === type)!)!; + const elementOriginal = parent.querySelector( + `Address > P[type="RG${rGNumber}-${type}"]` + ); + + if (elementOriginal == null) { + const pElement = createElement(parent.ownerDocument, 'P', { + type: `RG${rGNumber}-${type}`, + }); + pElement.textContent = inputValue; + + actions.push({ + new: { + parent: parent.querySelector('Address')!, + element: pElement, + }, + }); + } else if (inputValue !== elementOriginal?.textContent) { + const elementClone = cloneElement(elementOriginal!, {}); + elementClone.textContent = inputValue; + + actions.push({ + old: { + element: elementOriginal!, + }, + new: { + element: elementClone, + }, + }); + } + }); + + return actions.length != 0 + ? [ + { + actions, + title: get( + 'protocol104.network.redundancyGroup.wizard.editedRedundancyGroup', + { + rGNumber, + subNetworkName: parent.parentElement!.getAttribute('name')!, + apName: parent.getAttribute('apName')!, + iedName: parent.getAttribute('iedName')!, + } + ), + }, + ] + : []; + }; +} + +function addRedundancyGroupAction( + parent: Element, + rGNumber: number +): WizardActor { + return (inputs: WizardInputElement[]): EditorAction[] => { + const complexAction: ComplexAction = { + actions: [], + title: get( + 'protocol104.network.redundancyGroup.wizard.addedLRedundancyGroup', + { + rGNumber, + subNetworkName: parent.parentElement!.getAttribute('name')!, + apName: parent.getAttribute('apName')!, + iedName: parent.getAttribute('iedName')!, + } + ), + }; + + pTypesRedundancyGroup104.forEach(type => { + const pElement = createElement(parent.ownerDocument, 'P', { + type: `RG${rGNumber}-${type}`, + }); + pElement.textContent = getValue(inputs.find(i => i.label === type)!)!; + + complexAction.actions.push({ + new: { + parent: parent.querySelector('Address')!, + element: pElement, + }, + }); + }); + + return [complexAction]; + }; +} + +/** + * Get all the current used Logic Link numbers. + * @param parent - The parent element of all the P elements. + * @param rGNumber - The Redundancy Group number to use for searching Logic Link groups. + * @returns An array with all the Logic Link group numbers. + */ +function getLogicLinkNumbers(parent: Element, rGNumber: number): number[] { + const usedNumbers: number[] = []; + + parent + .querySelectorAll(`Address > P[type^="RG${rGNumber}-LL"]`) + .forEach(p => { + const logicLinkPart = getTypeAttribute(p)?.split('-')[1]; + const number = Number(logicLinkPart?.substring(2)); + + if (!usedNumbers.includes(number)) usedNumbers.push(number); + }); + + return usedNumbers.sort(); +} diff --git a/packages/open-scd/src/editors/protocol104/wizards/selectDo.ts b/packages/open-scd/src/editors/protocol104/wizards/selectDo.ts new file mode 100644 index 0000000000..37d861dca0 --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/wizards/selectDo.ts @@ -0,0 +1,192 @@ +import { html, TemplateResult } from 'lit-element'; +import { get } from 'lit-translate'; + +import '../../../finder-list.js'; + +import { + getDisplayString, + getReader, +} from '../../../wizards/foundation/finder.js'; +import { FinderList, Path } from '../../../finder-list.js'; +import { + compareNames, + getNameAttribute, + identity, + newSubWizardEvent, + find, + Wizard, + WizardActor, + WizardInputElement, +} from '../../../foundation.js'; +import { createAddressesWizard } from './createAddresses.js'; +import { SupportedCdcType, supportedCdcTypes } from '../foundation/cdc.js'; +import { PROTOCOL_104_PRIVATE } from '../foundation/private.js'; +import { + getCdcValueFromDOElement, + getDoElements, +} from '../foundation/foundation.js'; + +/** + * Check if the passed DO Element is supported by the 104 protocol and isn't initiated. + * + * @param lnElement - The LN Element used to search for Address Element below DOI, if available. + * @param doElement - The DO Element to check. + */ +function filterAvailableDOElements( + lnElement: Element, + doElement: Element +): boolean { + // First check if this DO Element is supported by the 104 Protocol. + const cdc = getCdcValueFromDOElement(doElement) ?? ''; + if (!supportedCdcTypes.includes(cdc)) { + return false; + } + + // Use the parent (LN) to find the DOI that's linked to the DO Element + // And check if there is DOI if it doesn't already contain Address Elements for the 104 Protocol. + const doName = getNameAttribute(doElement); + return ( + lnElement.querySelectorAll( + `:scope > DOI[name="${doName}"] DAI > Private[type="${PROTOCOL_104_PRIVATE}"] > Address` + ).length <= 0 + ); +} + +/** + * Check if there are DO Elements that aren't initiated and are supported by the 104 protocol. If this is the + * case the Element can be shown in the Finder. + * + * @param child - The child to check if it should still be displayed in the finder list. + */ +function filterAvailableElements(child: Element): boolean { + // For other elements create a list of LN Elements for processing the DO Element from the LN Elements. + let lnElements: Element[]; + if (['LN0', 'LN'].includes(child.tagName)) { + lnElements = [child]; + } else { + // For the other Elements we will just retrieve all the DOI Elements. + lnElements = Array.from(child.querySelectorAll('LN0, LN')); + } + + // If after filtering there are still LN/DO Element(s) to be displayed, this element will be included. + return ( + lnElements.filter( + lnElement => + // Check if there are available DO Elements that aren't initiated and supported by 104 protocol + getDoElements(lnElement).filter(doElement => + filterAvailableDOElements(lnElement, doElement) + ).length > 0 + ).length > 0 + ); +} + +/** + * Retrieve the Data Children needed for the filter-list to display, the elements shown are + * 'IED' -> 'AccessPoint' -> 'LDevice' -> 'LN(0)' -> 'DO'. + * + * @param parent - The previous element selected, starting with SCL Element. + */ +export function getDataChildren(parent: Element): Element[] { + let children; + if (['LN0', 'LN'].includes(parent.tagName)) { + // For LN Element we will not search for the children, but the DO Element linked to LN from the Template Section. + const lnType = parent.getAttribute('lnType') ?? ''; + children = Array.from( + parent.ownerDocument.querySelectorAll( + `:root > DataTypeTemplates > LNodeType[id="${lnType}"] > DO` + ) + ) + .filter(child => filterAvailableDOElements(parent, child)) + .sort((a, b) => compareNames(`${identity(a)}`, `${identity(b)}`)); + } else if (parent.tagName === 'AccessPoint') { + // From the Access Point we will skip directly to the LDevice Element and skip the Server element. + // Or retrieve the LN Elements directly below the AccessPoint. + children = Array.from(parent.querySelectorAll('LDevice, :scope > LN')) + .filter(child => filterAvailableElements(child)) + .sort((a, b) => compareNames(`${identity(a)}`, `${identity(b)}`)); + } else { + // The other element, just retrieve the children and if the tagName is one we need return that child. + children = Array.from(parent.children) + .filter(child => + ['IED', 'AccessPoint', 'LN0', 'LN'].includes(child.tagName) + ) + .filter(child => filterAvailableElements(child)) + .sort((a, b) => compareNames(`${identity(a)}`, `${identity(b)}`)); + } + + return children; +} + +/** + * Action executed when 'next' is pressed. It will start the 'create address'-wizard when a DO Element + * is selected, otherwise nothing happens. + * + * @param doc - The XML Document loaded to search element in. + */ +function openPrepareAddressWizard(doc: XMLDocument): WizardActor { + return (_: WizardInputElement[], wizard: Element) => { + const finder = wizard.shadowRoot?.querySelector('finder-list'); + const path = finder?.path ?? []; + + if (path.length === 0) return []; + + const doElement = checkAndGetLastElementFromPath(doc, path, ['DO']); + const lnElement = checkAndGetLastElementFromPath(doc, path, ['LN0', 'LN']); + + if (lnElement && doElement) { + wizard.dispatchEvent( + newSubWizardEvent(createAddressesWizard(lnElement, doElement)) + ); + } + return []; + }; +} + +/** + * Simple function to retrieve the next element from the path selected. + * Also check if that element is the expected element. + * + * @param doc - The XML Document to be used for querying. + * @param path - The array of selected element to pop the last element name from. + * @param expectedTag - The tagname expected to be found when popping the lats element. + */ +function checkAndGetLastElementFromPath( + doc: XMLDocument, + path: Path, + expectedTag: string[] +): Element | null { + const [tagName, id] = path.pop()!.split(': '); + if (!expectedTag.includes(tagName)) return null; + + return find(doc, tagName, id); +} + +/** + * Start a Finder List to select a DO that can be initiated to be used for the 104 protocol. + * + * @param doc - The XML Document loaded. + * @returns The Wizard to be displayed in a dialog. + */ +export function selectDoWizard(doc: Document): Wizard { + function renderTemplate(doc: XMLDocument): TemplateResult { + return html` path[path.length - 1]} + > + `; + } + + return [ + { + title: get('wizard.title.select', { tagName: 'DO(I)' }), + primary: { + icon: '', + label: get('next'), + action: openPrepareAddressWizard(doc), + }, + content: [renderTemplate(doc)], + }, + ]; +} diff --git a/packages/open-scd/src/editors/protocol104/wizards/subnetwork.ts b/packages/open-scd/src/editors/protocol104/wizards/subnetwork.ts new file mode 100644 index 0000000000..f0a0a38a6d --- /dev/null +++ b/packages/open-scd/src/editors/protocol104/wizards/subnetwork.ts @@ -0,0 +1,112 @@ +import { html, TemplateResult } from 'lit-element'; +import { get, translate } from 'lit-translate'; +import { createElement, EditorAction, getMultiplier, getValue, patterns, Wizard, WizardActor, WizardInputElement } from '../../../foundation.js'; + +import '../../../wizard-textfield.js'; + +/** Initial attribute values suggested for `SubNetwork` creation for the 104 plugin */ +const initial = { + type: '104', + bitrate: '100', + multiplier: 'M', +}; + +interface ContentOptions { + name: string | null; + desc: string | null; + type: string | null; + BitRate: string | null; + multiplier: string | null; +} + +function contentSubNetwork(options: ContentOptions): TemplateResult[] { + return [ + html``, + html``, + html``, + html``, + ]; +} + +export function createSubNetworkAction(parent: Element): WizardActor { + return (inputs: WizardInputElement[]): EditorAction[] => { + const name = getValue(inputs.find(i => i.label === 'name')!); + const desc = getValue(inputs.find(i => i.label === 'desc')!); + const type = getValue(inputs.find(i => i.label === 'type')!); + const BitRate = getValue(inputs.find(i => i.label === 'BitRate')!); + const multiplier = getMultiplier(inputs.find(i => i.label === 'BitRate')!); + + const element = createElement(parent.ownerDocument, 'SubNetwork', { + name, + desc, + type, + }); + + if (BitRate !== null) { + const bitRateElement = createElement(parent.ownerDocument, 'BitRate', { + unit: 'b/s', + multiplier, + }); + bitRateElement.textContent = BitRate; + element.appendChild(bitRateElement); + } + + const action = { + new: { + parent, + element, + }, + }; + + return [action]; + }; +} + +export function createSubNetworkWizard(parent: Element): Wizard { + return [ + { + title: get('wizard.title.add', { tagName: 'SubNetwork' }), + primary: { + icon: 'add', + label: get('add'), + action: createSubNetworkAction(parent), + }, + content: contentSubNetwork({ + name: '', + desc: '', + type: initial.type, + BitRate: initial.bitrate, + multiplier: initial.multiplier, + }), + }, + ]; +} diff --git a/packages/open-scd/src/editors/publisher/data-set-editor.ts b/packages/open-scd/src/editors/publisher/data-set-editor.ts new file mode 100644 index 0000000000..27ffa2c706 --- /dev/null +++ b/packages/open-scd/src/editors/publisher/data-set-editor.ts @@ -0,0 +1,135 @@ +import { + css, + customElement, + html, + LitElement, + property, + query, + state, + TemplateResult, +} from 'lit-element'; +import { translate } from 'lit-translate'; + +import '@material/mwc-button'; +import '@material/mwc-list/mwc-list-item'; +import { Button } from '@material/mwc-button'; +import { ListItem } from '@material/mwc-list/mwc-list-item'; + +import './data-set-element-editor.js'; +import '../../filtered-list.js'; +import { FilteredList } from '../../filtered-list.js'; + +import { compareNames, identity, find } from '../../foundation.js'; +import { styles, updateElementReference } from './foundation.js'; + +@customElement('data-set-editor') +export class DataSetEditor extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property({ attribute: false }) + doc!: XMLDocument; + + @state() + selectedDataSet?: Element; + + @query('.selectionlist') selectionList!: FilteredList; + @query('mwc-button') selectDataSetButton!: Button; + + /** Resets selected GOOSE, if not existing in new doc */ + update(props: Map): void { + if (props.has('doc') && this.selectedDataSet) { + const newDataSet = updateElementReference(this.doc, this.selectedDataSet); + + this.selectedDataSet = newDataSet ?? undefined; + + if (!newDataSet && this.selectionList && this.selectionList.selected) + (this.selectionList.selected as ListItem).selected = false; + } + + super.update(props); + } + + private selectDataSet(evt: Event): void { + const id = ((evt.target as FilteredList).selected as ListItem).value; + const dataSet = find(this.doc, 'DataSet', id); + + if (dataSet) { + this.selectedDataSet = dataSet; + (evt.target as FilteredList).classList.add('hidden'); + this.selectDataSetButton.classList.remove('hidden'); + } + } + + private renderElementEditorContainer(): TemplateResult { + if (this.selectedDataSet) + return html`
    + +
    `; + + return html``; + } + + private renderSelectionList(): TemplateResult { + return html`${Array.from(this.doc.querySelectorAll('IED')) + .sort(compareNames) + .flatMap(ied => { + const ieditem = html` + ${ied.getAttribute('name')} + developer_board + +
  • `; + + const dataSets = Array.from(ied.querySelectorAll('DataSet')).map( + dataSet => + html`${dataSet.getAttribute('name')}${identity(dataSet)} + ` + ); + + return [ieditem, ...dataSets]; + })}
    `; + } + + private renderToggleButton(): TemplateResult { + return html` { + this.selectionList.classList.remove('hidden'); + this.selectDataSetButton.classList.add('hidden'); + }} + >`; + } + + render(): TemplateResult { + return html`${this.renderToggleButton()} +
    + ${this.renderSelectionList()}${this.renderElementEditorContainer()} +
    `; + } + + static styles = css` + ${styles} + + data-set-element-editor { + flex: auto; + } + `; +} diff --git a/packages/open-scd/src/editors/publisher/data-set-element-editor.ts b/packages/open-scd/src/editors/publisher/data-set-element-editor.ts new file mode 100644 index 0000000000..4a42da3e6c --- /dev/null +++ b/packages/open-scd/src/editors/publisher/data-set-element-editor.ts @@ -0,0 +1,131 @@ +import { + css, + customElement, + html, + LitElement, + property, + state, + TemplateResult, +} from 'lit-element'; +import { translate } from 'lit-translate'; + +import '@material/mwc-list/mwc-list-item'; + +import '../../wizard-textfield.js'; +import '../../filtered-list.js'; + +import { identity } from '../../foundation.js'; + +@customElement('data-set-element-editor') +export class DataSetElementEditor extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property({ attribute: false }) + doc!: XMLDocument; + /** The element being edited as provided to plugins by [[`OpenSCD`]]. */ + @property({ attribute: false }) + element!: Element | null; + + @state() + private get name(): string | null { + return this.element ? this.element.getAttribute('name') : 'UNDEFINED'; + } + @state() + private get desc(): string | null { + return this.element ? this.element.getAttribute('desc') : 'UNDEFINED'; + } + + private renderContent(): TemplateResult { + return html` + + + + ${Array.from(this.element!.querySelectorAll('FCDA')).map(fcda => { + const [ldInst, prefix, lnClass, lnInst, doName, daName, fc] = [ + 'ldInst', + 'prefix', + 'lnClass', + 'lnInst', + 'doName', + 'daName', + 'fc', + ].map(attributeName => fcda.getAttribute(attributeName) ?? ''); + + return html`${doName}${daName + ? '.' + daName + ' ' + '[' + fc + ']' + : ' ' + '[' + fc + ']'}${ldInst + '/' + prefix + lnClass + lnInst} + `; + })}`; + } + + render(): TemplateResult { + if (this.element) + return html`
    +

    +
    DataSet
    +
    ${identity(this.element)}
    +

    + ${this.renderContent()} +
    `; + + return html`
    +

    +
    DataSet
    +
    ${translate('publisher.nodataset')}
    +

    +
    `; + } + + static styles = css` + .content { + display: flex; + flex-direction: column; + background-color: var(--mdc-theme-surface); + } + + .content > * { + display: block; + margin: 4px 8px 16px; + } + + h2 { + color: var(--mdc-theme-on-surface); + font-family: 'Roboto', sans-serif; + font-weight: 300; + + margin: 0px; + padding-left: 0.3em; + transition: background-color 150ms linear; + } + + .headersubtitle { + font-size: 16px; + font-weight: 200; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + *[iconTrailing='search'] { + --mdc-shape-small: 28px; + } + `; +} diff --git a/packages/open-scd/src/editors/publisher/foundation.ts b/packages/open-scd/src/editors/publisher/foundation.ts new file mode 100644 index 0000000000..be524f0be5 --- /dev/null +++ b/packages/open-scd/src/editors/publisher/foundation.ts @@ -0,0 +1,90 @@ +import { css } from 'lit-element'; + +import { identity, find } from '../../foundation.js'; + +export function updateElementReference( + newDoc: XMLDocument, + oldElement: Element +): Element | null { + if (!oldElement || !oldElement.closest('SCL')) return null; + + const id = identity(oldElement); + const newElement = find(newDoc, oldElement.tagName, id); + + return newElement; +} + +export const styles = css` + .content { + display: flex; + height: calc(100vh - 184px); + } + + .selectionlist { + flex: 35%; + margin: 4px 4px 4px 8px; + background-color: var(--mdc-theme-surface); + overflow-y: scroll; + } + + .elementeditorcontainer { + flex: 65%; + margin: 4px 8px 4px 4px; + background-color: var(--mdc-theme-surface); + overflow-y: scroll; + display: flex; + } + + .listitem.header { + font-weight: 500; + } + + mwc-list-item.hidden[noninteractive] + li[divider] { + display: none; + } + + mwc-button { + display: none; + } + + @media (max-width: 950px) { + .elementeditorcontainer { + display: block; + } + } + + @media (max-width: 599px) { + .content { + height: 100%; + } + + .selectionlist { + position: absolute; + width: calc(100% - 32px); + height: auto; + top: 110px; + left: 8px; + background-color: var(--mdc-theme-surface); + z-index: 1; + 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); + } + + .elementeditorcontainer { + display: block; + } + + data-set-element-editor { + width: calc(100% - 16px); + } + + .selectionlist.hidden { + display: none; + } + + mwc-button { + display: flex; + margin: 4px 8px 8px; + } + } +`; diff --git a/packages/open-scd/src/editors/publisher/gse-control-editor.ts b/packages/open-scd/src/editors/publisher/gse-control-editor.ts new file mode 100644 index 0000000000..39cdd388a0 --- /dev/null +++ b/packages/open-scd/src/editors/publisher/gse-control-editor.ts @@ -0,0 +1,184 @@ +import { + css, + customElement, + html, + LitElement, + property, + state, + query, + TemplateResult, +} from 'lit-element'; +import { translate } from 'lit-translate'; + +import '@material/mwc-button'; +import '@material/mwc-list/mwc-list-item'; +import { Button } from '@material/mwc-button'; +import { ListItem } from '@material/mwc-list/mwc-list-item'; + +import './data-set-element-editor.js'; +import './gse-control-element-editor.js'; +import '../../filtered-list.js'; +import { FilteredList } from '../../filtered-list.js'; + +import { gooseIcon } from '../../icons/icons.js'; +import { compareNames, identity, find } from '../../foundation.js'; +import { styles, updateElementReference } from './foundation.js'; + +@customElement('gse-control-editor') +export class GseControlEditor extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + @state() + selectedGseControl?: Element; + @state() + selectedDataSet?: Element | null; + + @query('.selectionlist') selectionList!: FilteredList; + @query('mwc-button') selectGSEControlButton!: Button; + + /** Resets selected GOOSE and its DataSet, if not existing in new doc */ + update(props: Map): void { + if (props.has('doc') && this.selectedGseControl) { + const newGseControl = updateElementReference( + this.doc, + this.selectedGseControl + ); + + this.selectedGseControl = newGseControl ?? undefined; + this.selectedDataSet = this.selectedGseControl + ? updateElementReference(this.doc, this.selectedDataSet!) + : undefined; + + if (!newGseControl && this.selectionList && this.selectionList.selected) + (this.selectionList.selected as ListItem).selected = false; + } + + super.update(props); + } + + private selectGSEControl(evt: Event): void { + const id = ((evt.target as FilteredList).selected as ListItem).value; + const gseControl = find(this.doc, 'GSEControl', id); + if (!gseControl) return; + + this.selectedGseControl = gseControl; + + if (gseControl) { + this.selectedDataSet = gseControl.parentElement?.querySelector( + `DataSet[name="${gseControl.getAttribute('datSet')}"]` + ); + (evt.target as FilteredList).classList.add('hidden'); + this.selectGSEControlButton.classList.remove('hidden'); + } + } + + private renderElementEditorContainer(): TemplateResult { + if (this.selectedGseControl !== undefined) + return html`
    + + +
    `; + + return html``; + } + + renderSelectionList(): TemplateResult { + return html`${Array.from(this.doc.querySelectorAll('IED')) + .sort(compareNames) + .flatMap(ied => { + const ieditem = html` + ${ied.getAttribute('name')} + developer_board + +
  • `; + + const gseControls = Array.from( + ied.querySelectorAll('GSEControl') + ).map( + reportCb => + html`${reportCb.getAttribute('name')}${identity(reportCb)} + ${gooseIcon} + ` + ); + + return [ieditem, ...gseControls]; + })}
    `; + } + + private renderToggleButton(): TemplateResult { + return html` { + this.selectionList.classList.remove('hidden'); + this.selectGSEControlButton.classList.add('hidden'); + }} + >`; + } + + render(): TemplateResult { + return html`${this.renderToggleButton()} +
    + ${this.renderSelectionList()}${this.renderElementEditorContainer()} +
    `; + } + + static styles = css` + ${styles} + + .elementeditorcontainer { + flex: 65%; + margin: 4px 8px 4px 4px; + background-color: var(--mdc-theme-surface); + overflow-y: scroll; + display: grid; + grid-gap: 12px; + padding: 8px 12px 16px; + grid-template-columns: repeat(3, 1fr); + } + + data-set-element-editor { + grid-column: 1 / 2; + } + + gse-control-element-editor { + grid-column: 2 / 4; + } + + @media (max-width: 950px) { + .elementeditorcontainer { + display: block; + } + } + `; +} diff --git a/packages/open-scd/src/editors/publisher/gse-control-element-editor.ts b/packages/open-scd/src/editors/publisher/gse-control-element-editor.ts new file mode 100644 index 0000000000..ef9a4b4ca8 --- /dev/null +++ b/packages/open-scd/src/editors/publisher/gse-control-element-editor.ts @@ -0,0 +1,234 @@ +import { + css, + customElement, + html, + LitElement, + property, + TemplateResult, +} from 'lit-element'; +import { translate } from 'lit-translate'; + +import '@material/mwc-formfield'; +import '@material/mwc-checkbox'; + +import '../../wizard-checkbox.js'; +import '../../wizard-select.js'; +import '../../wizard-textfield.js'; + +import { identity } from '../../foundation.js'; +import { maxLength, patterns } from '../../wizards/foundation/limits.js'; +import { typeNullable, typePattern } from '../../wizards/foundation/p-types.js'; +import { ifDefined } from 'lit-html/directives/if-defined.js'; + +@customElement('gse-control-element-editor') +export class GseControlElementEditor extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property({ attribute: false }) + doc!: XMLDocument; + /** The element being edited as provided to plugins by [[`OpenSCD`]]. */ + @property({ attribute: false }) + element!: Element; + @property({ attribute: false }) + get gSE(): Element | null | undefined { + const cbName = this.element.getAttribute('name'); + const iedName = this.element.closest('IED')?.getAttribute('name'); + const apName = this.element.closest('AccessPoint')?.getAttribute('name'); + const ldInst = this.element.closest('LDevice')?.getAttribute('inst'); + + return this.element.ownerDocument.querySelector( + `:root > Communication > SubNetwork > ` + + `ConnectedAP[iedName="${iedName}"][apName="${apName}"] > ` + + `GSE[ldInst="${ldInst}"][cbName="${cbName}"]` + ); + } + + private renderGseContent(): TemplateResult { + const gSE = this.gSE; + if (!gSE) + return html`
    +

    +
    Communication Settings (GSE)
    +
    No connection to SubNetwork
    +

    +
    `; + + const minTime = gSE.querySelector('MinTime')?.innerHTML.trim() ?? null; + const maxTime = gSE.querySelector('MaxTime')?.innerHTML.trim() ?? null; + + const hasInstType = Array.from(gSE.querySelectorAll('Address > P')).some( + pType => pType.getAttribute('xsi:type') + ); + + const attributes: Record = {}; + + ['MAC-Address', 'APPID', 'VLAN-ID', 'VLAN-PRIORITY'].forEach(key => { + if (!attributes[key]) + attributes[key] = + gSE.querySelector(`Address > P[type="${key}"]`)?.innerHTML.trim() ?? + null; + }); + + return html`
    +

    Communication Settings (GSE)

    + ${Object.entries(attributes).map( + ([key, value]) => + html`` + )} +
    `; + } + + private renderGseControlContent(): TemplateResult { + const [name, desc, type, appID, fixedOffs, securityEnabled] = [ + 'name', + 'desc', + 'type', + 'appID', + 'fixedOffs', + 'securityEnabled', + ].map(attr => this.element?.getAttribute(attr)); + + return html`
    + + + ${['GOOSE', 'GSSE'].map( + type => html`${type}` + )} + + + ${['None', 'Signature', 'SignatureAndEncryption'].map( + type => html`${type}` + )} +
    `; + } + + render(): TemplateResult { + return html`

    +
    +
    GSEControl
    +
    ${identity(this.element)}
    +
    +

    +
    + ${this.renderGseControlContent()}${this.renderGseContent()} +
    `; + } + + static styles = css` + .parentcontent { + display: grid; + grid-gap: 12px; + box-sizing: border-box; + grid-template-columns: repeat(auto-fit, minmax(316px, auto)); + } + + .content { + border-left: thick solid var(--mdc-theme-on-primary); + } + + .content > * { + display: block; + margin: 4px 8px 16px; + } + + h2, + h3 { + color: var(--mdc-theme-on-surface); + font-family: 'Roboto', sans-serif; + font-weight: 300; + margin: 4px 8px 16px; + padding-left: 0.3em; + } + + .headersubtitle { + font-size: 16px; + font-weight: 200; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + *[iconTrailing='search'] { + --mdc-shape-small: 28px; + } + + @media (max-width: 950px) { + .content { + border-left: 0px solid var(--mdc-theme-on-primary); + } + } + `; +} diff --git a/packages/open-scd/src/editors/publisher/report-control-editor.ts b/packages/open-scd/src/editors/publisher/report-control-editor.ts new file mode 100644 index 0000000000..2768c83e02 --- /dev/null +++ b/packages/open-scd/src/editors/publisher/report-control-editor.ts @@ -0,0 +1,189 @@ +import { + css, + customElement, + html, + LitElement, + property, + query, + state, + TemplateResult, +} from 'lit-element'; +import { translate } from 'lit-translate'; + +import '@material/mwc-button'; +import '@material/mwc-list/mwc-list-item'; +import { Button } from '@material/mwc-button'; +import { ListItem } from '@material/mwc-list/mwc-list-item'; + +import './data-set-element-editor.js'; +import './report-control-element-editor.js'; +import '../../filtered-list.js'; +import { FilteredList } from '../../filtered-list.js'; + +import { compareNames, identity, find } from '../../foundation.js'; +import { reportIcon } from '../../icons/icons.js'; +import { styles, updateElementReference } from './foundation.js'; + +@customElement('report-control-editor') +export class ReportControlEditor extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + @state() + selectedReportControl?: Element; + @state() + selectedDataSet?: Element | null; + + @query('.selectionlist') selectionList!: FilteredList; + @query('mwc-button') selectReportControlButton!: Button; + + /** Resets selected Report and its DataSet, if not existing in new doc */ + update(props: Map): void { + if (props.has('doc') && this.selectedReportControl) { + const newReportControl = updateElementReference( + this.doc, + this.selectedReportControl + ); + + this.selectedReportControl = newReportControl ?? undefined; + this.selectedDataSet = this.selectedReportControl + ? updateElementReference(this.doc, this.selectedDataSet!) + : undefined; + + if ( + !newReportControl && + this.selectionList && + this.selectionList.selected + ) + (this.selectionList.selected as ListItem).selected = false; + } + + super.update(props); + } + + private selectReportControl(evt: Event): void { + const id = ((evt.target as FilteredList).selected as ListItem).value; + const reportControl = find(this.doc, 'ReportControl', id); + if (!reportControl) return; + + this.selectedReportControl = reportControl; + + if (this.selectedReportControl) { + this.selectedDataSet = + this.selectedReportControl.parentElement?.querySelector( + `DataSet[name="${this.selectedReportControl.getAttribute('datSet')}"]` + ); + (evt.target as FilteredList).classList.add('hidden'); + this.selectReportControlButton.classList.remove('hidden'); + } + } + + private renderElementEditorContainer(): TemplateResult { + if (this.selectedReportControl !== undefined) + return html`
    + + +
    `; + + return html``; + } + + private renderSelectionList(): TemplateResult { + return html`${Array.from(this.doc.querySelectorAll('IED')) + .sort(compareNames) + .flatMap(ied => { + const ieditem = html` + ${ied.getAttribute('name')} + developer_board + +
  • `; + + const reports = Array.from(ied.querySelectorAll('ReportControl')).map( + reportCb => + html`${reportCb.getAttribute('name')}${identity(reportCb)} + ${reportIcon} + ` + ); + + return [ieditem, ...reports]; + })}
    `; + } + + private renderToggleButton(): TemplateResult { + return html` { + this.selectionList.classList.remove('hidden'); + this.selectReportControlButton.classList.add('hidden'); + }} + >`; + } + + render(): TemplateResult { + return html`${this.renderToggleButton()} +
    + ${this.renderSelectionList()}${this.renderElementEditorContainer()} +
    `; + } + + static styles = css` + ${styles} + + .elementeditorcontainer { + flex: 65%; + margin: 4px 8px 4px 4px; + background-color: var(--mdc-theme-surface); + overflow-y: scroll; + display: grid; + grid-gap: 12px; + padding: 8px 12px 16px; + grid-template-columns: repeat(3, 1fr); + } + + data-set-element-editor { + grid-column: 1 / 2; + } + + report-control-element-editor { + grid-column: 2 / 4; + } + + @media (max-width: 950px) { + .elementeditorcontainer { + display: block; + } + } + `; +} diff --git a/packages/open-scd/src/editors/publisher/report-control-element-editor.ts b/packages/open-scd/src/editors/publisher/report-control-element-editor.ts new file mode 100644 index 0000000000..777bb7a85c --- /dev/null +++ b/packages/open-scd/src/editors/publisher/report-control-element-editor.ts @@ -0,0 +1,250 @@ +import { + css, + customElement, + html, + LitElement, + property, + TemplateResult, +} from 'lit-element'; +import { translate } from 'lit-translate'; + +import '../../wizard-textfield.js'; +import '../../wizard-checkbox.js'; + +import { identity } from '../../foundation.js'; +import { maxLength, patterns } from '../../wizards/foundation/limits.js'; + +@customElement('report-control-element-editor') +export class ReportControlElementEditor extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property({ attribute: false }) + doc!: XMLDocument; + /** The element being edited as provided to plugins by [[`OpenSCD`]]. */ + @property({ attribute: false }) + element!: Element; + + private renderOptFieldsContent(): TemplateResult { + const [ + seqNum, + timeStamp, + dataSet, + reasonCode, + dataRef, + entryID, + configRef, + bufOvfl, + ] = [ + 'seqNum', + 'timeStamp', + 'dataSet', + 'reasonCode', + 'dataRef', + 'entryID', + 'configRef', + 'bufOvfl', + ].map( + attr => + this.element.querySelector('OptFields')?.getAttribute(attr) ?? null + ); + + return html`

    Optional Fields

    + ${Object.entries({ + seqNum, + timeStamp, + dataSet, + reasonCode, + dataRef, + entryID, + configRef, + bufOvfl, + }).map( + ([key, value]) => + html`` + )}`; + } + + private renderTrgOpsContent(): TemplateResult { + const [dchg, qchg, dupd, period, gi] = [ + 'dchg', + 'qchg', + 'dupd', + 'period', + 'gi', + ].map( + attr => this.element.querySelector('TrgOps')?.getAttribute(attr) ?? null + ); + + return html`

    Trigger Options

    + ${Object.entries({ dchg, qchg, dupd, period, gi }).map( + ([key, value]) => + html`` + )}`; + } + + private renderChildElements(): TemplateResult { + return html`
    + ${this.renderTrgOpsContent()}${this.renderOptFieldsContent()} +
    `; + } + + private renderReportControlContent(): TemplateResult { + const [name, desc, buffered, rptID, indexed, bufTime, intgPd] = [ + 'name', + 'desc', + 'buffered', + 'rptID', + 'indexed', + 'bufTime', + 'intgPd', + ].map(attr => this.element?.getAttribute(attr)); + const max = + this.element.querySelector('RptEnabled')?.getAttribute('max') ?? null; + + return html`
    + +
    `; + } + + render(): TemplateResult { + if (this.element) + return html`

    +
    +
    ReportControl
    +
    ${identity(this.element)}
    +
    +

    +
    + ${this.renderReportControlContent()}${this.renderChildElements()} +
    `; + + return html`
    +

    ${translate('publisher.nodataset')}

    +
    `; + } + + static styles = css` + .parentcontent { + display: grid; + grid-gap: 12px; + box-sizing: border-box; + grid-template-columns: repeat(auto-fit, minmax(316px, auto)); + } + + .content { + border-left: thick solid var(--mdc-theme-on-primary); + } + + .content > * { + display: block; + margin: 4px 8px 16px; + } + + h2, + h3 { + color: var(--mdc-theme-on-surface); + font-family: 'Roboto', sans-serif; + font-weight: 300; + margin: 4px 8px 16px; + padding-left: 0.3em; + } + + .headersubtitle { + font-size: 16px; + font-weight: 200; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + *[iconTrailing='search'] { + --mdc-shape-small: 28px; + } + + @media (max-width: 950px) { + .content { + border-left: 0px solid var(--mdc-theme-on-primary); + } + } + `; +} diff --git a/packages/open-scd/src/editors/publisher/sampled-value-control-editor.ts b/packages/open-scd/src/editors/publisher/sampled-value-control-editor.ts new file mode 100644 index 0000000000..c0f5f0f84d --- /dev/null +++ b/packages/open-scd/src/editors/publisher/sampled-value-control-editor.ts @@ -0,0 +1,189 @@ +import { + css, + customElement, + html, + LitElement, + property, + query, + state, + TemplateResult, +} from 'lit-element'; +import { translate } from 'lit-translate'; + +import '@material/mwc-button'; +import '@material/mwc-list/mwc-list-item'; +import { Button } from '@material/mwc-button'; +import { ListItem } from '@material/mwc-list/mwc-list-item'; + +import './data-set-element-editor.js'; +import '../../filtered-list.js'; +import './sampled-value-control-element-editor.js'; +import { FilteredList } from '../../filtered-list.js'; + +import { compareNames, identity, find } from '../../foundation.js'; +import { smvIcon } from '../../icons/icons.js'; +import { styles, updateElementReference } from './foundation.js'; + +@customElement('sampled-value-control-editor') +export class SampledValueControlEditor extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + @state() + selectedSampledValueControl?: Element; + @state() + selectedDataSet?: Element | null; + + @query('.selectionlist') selectionList!: FilteredList; + @query('mwc-button') selectSampledValueControlButton!: Button; + + /** Resets selected SMV and its DataSet, if not existing in new doc */ + update(props: Map): void { + if (props.has('doc') && this.selectedSampledValueControl) { + const newSampledValueControl = updateElementReference( + this.doc, + this.selectedSampledValueControl + ); + + this.selectedSampledValueControl = newSampledValueControl ?? undefined; + this.selectedDataSet = this.selectedSampledValueControl + ? updateElementReference(this.doc, this.selectedDataSet!) + : undefined; + + if ( + !newSampledValueControl && + this.selectionList && + this.selectionList.selected + ) + (this.selectionList.selected as ListItem).selected = false; + } + + super.update(props); + } + + private selectSMVControl(evt: Event): void { + const id = ((evt.target as FilteredList).selected as ListItem).value; + const smvControl = find(this.doc, 'SampledValueControl', id); + if (!smvControl) return; + + this.selectedSampledValueControl = smvControl; + + if (smvControl) { + this.selectedDataSet = + smvControl.parentElement?.querySelector( + `DataSet[name="${smvControl.getAttribute('datSet')}"]` + ) ?? null; + (evt.target as FilteredList).classList.add('hidden'); + this.selectSampledValueControlButton.classList.remove('hidden'); + } + } + + private renderElementEditorContainer(): TemplateResult { + if (this.selectedSampledValueControl !== undefined) + return html`
    + + +
    `; + + return html``; + } + + private renderSelectionList(): TemplateResult { + return html`${Array.from(this.doc.querySelectorAll('IED')) + .sort(compareNames) + .flatMap(ied => { + const ieditem = html` + ${ied.getAttribute('name')} + developer_board + +
  • `; + + const sampledValueControls = Array.from( + ied.querySelectorAll('SampledValueControl') + ).map( + reportCb => + html`${reportCb.getAttribute('name')}${identity(reportCb)} + ${smvIcon} + ` + ); + + return [ieditem, ...sampledValueControls]; + })}
    `; + } + + private renderToggleButton(): TemplateResult { + return html` { + this.selectionList.classList.remove('hidden'); + this.selectSampledValueControlButton.classList.add('hidden'); + }} + >`; + } + + render(): TemplateResult { + return html`${this.renderToggleButton()} +
    + ${this.renderSelectionList()}${this.renderElementEditorContainer()} +
    `; + } + + static styles = css` + ${styles} + + .elementeditorcontainer { + flex: 65%; + margin: 4px 8px 4px 4px; + background-color: var(--mdc-theme-surface); + overflow-y: scroll; + display: grid; + grid-gap: 12px; + padding: 8px 12px 16px; + grid-template-columns: repeat(3, 1fr); + } + + data-set-element-editor { + grid-column: 1 / 2; + } + + sampled-value-control-element-editor { + grid-column: 2 / 4; + } + + @media (max-width: 950px) { + .elementeditorcontainer { + display: block; + } + } + `; +} diff --git a/packages/open-scd/src/editors/publisher/sampled-value-control-element-editor.ts b/packages/open-scd/src/editors/publisher/sampled-value-control-element-editor.ts new file mode 100644 index 0000000000..78dda1ea90 --- /dev/null +++ b/packages/open-scd/src/editors/publisher/sampled-value-control-element-editor.ts @@ -0,0 +1,282 @@ +import { + css, + customElement, + html, + LitElement, + property, + TemplateResult, +} from 'lit-element'; +import { translate } from 'lit-translate'; + +import '@material/mwc-formfield'; +import '@material/mwc-checkbox'; + +import '../../wizard-checkbox.js'; +import '../../wizard-select.js'; +import '../../wizard-textfield.js'; + +import { identity } from '../../foundation.js'; +import { maxLength, patterns } from '../../wizards/foundation/limits.js'; +import { typeNullable, typePattern } from '../../wizards/foundation/p-types.js'; +import { ifDefined } from 'lit-html/directives/if-defined.js'; + +@customElement('sampled-value-control-element-editor') +export class SampledValueControlElementEditor extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property({ attribute: false }) + doc!: XMLDocument; + /** The element being edited as provided to plugins by [[`OpenSCD`]]. */ + @property({ attribute: false }) + element!: Element; + @property({ attribute: false }) + get sMV(): Element | null { + const cbName = this.element.getAttribute('name'); + const iedName = this.element.closest('IED')?.getAttribute('name'); + const apName = this.element.closest('AccessPoint')?.getAttribute('name'); + const ldInst = this.element.closest('LDevice')?.getAttribute('inst'); + + return this.element.ownerDocument.querySelector( + `:root > Communication > SubNetwork > ` + + `ConnectedAP[iedName="${iedName}"][apName="${apName}"] > ` + + `SMV[ldInst="${ldInst}"][cbName="${cbName}"]` + ); + } + + private renderSmvContent(): TemplateResult { + const sMV = this.sMV; + if (!sMV) + return html`

    +
    ${translate('publisher.smv.commsetting')}
    +
    + ${translate('publisher.smv.noconnectionap')} +
    +

    `; + + const hasInstType = Array.from(sMV.querySelectorAll('Address > P')).some( + pType => pType.getAttribute('xsi:type') + ); + + const attributes: Record = {}; + + ['MAC-Address', 'APPID', 'VLAN-ID', 'VLAN-PRIORITY'].forEach(key => { + if (!attributes[key]) + attributes[key] = + sMV + .querySelector(`Address > P[type="${key}"]`) + ?.textContent?.trim() ?? null; + }); + + return html`

    ${translate('publisher.smv.commsetting')}

    + ${Object.entries(attributes).map( + ([key, value]) => + html`` + )}`; + } + + private renderSmvOptsContent(): TemplateResult { + const [refreshTime, sampleRate, dataSet, security, synchSourceId] = [ + 'refreshTime', + 'sampleRate', + 'dataSet', + 'security', + 'synchSourceId', + ].map( + attr => this.element.querySelector('SmvOpts')?.getAttribute(attr) ?? null + ); + + return html`

    ${translate('publisher.smv.smvopts')}

    + ${Object.entries({ + refreshTime, + sampleRate, + dataSet, + security, + synchSourceId, + }).map( + ([key, value]) => + html`` + )}`; + } + + private renderOtherElements(): TemplateResult { + return html`
    + ${this.renderSmvOptsContent()}${this.renderSmvContent()} +
    `; + } + + private renderSmvControlContent(): TemplateResult { + const [ + name, + desc, + multicast, + smvID, + smpMod, + smpRate, + nofASDU, + securityEnabled, + ] = [ + 'name', + 'desc', + 'multicast', + 'smvID', + 'smpMod', + 'smpRate', + 'nofASDU', + 'securityEnabled', + ].map(attr => this.element?.getAttribute(attr)); + + return html`
    + + + ${multicast === 'true' + ? html`` + : html``} + + ${['SmpPerPeriod', 'SmpPerSec', 'SecPerSmp'].map( + option => + html`${option}` + )} + + + ${['None', 'Signature', 'SignatureAndEncryption'].map( + type => html`${type}` + )} +
    `; + } + + render(): TemplateResult { + return html`

    +
    +
    SampledValueControl
    +
    ${identity(this.element)}
    +
    +

    +
    + ${this.renderSmvControlContent()}${this.renderOtherElements()} +
    `; + } + + static styles = css` + .parentcontent { + display: grid; + grid-gap: 12px; + box-sizing: border-box; + grid-template-columns: repeat(auto-fit, minmax(316px, auto)); + } + + .content { + border-left: thick solid var(--mdc-theme-on-primary); + } + + .content > * { + display: block; + margin: 4px 8px 16px; + } + + h2, + h3 { + color: var(--mdc-theme-on-surface); + font-family: 'Roboto', sans-serif; + font-weight: 300; + margin: 4px 8px 16px; + padding-left: 0.3em; + } + + .headersubtitle { + font-size: 16px; + font-weight: 200; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + *[iconTrailing='search'] { + --mdc-shape-small: 28px; + } + + @media (max-width: 950px) { + .content { + border-left: 0px solid var(--mdc-theme-on-primary); + } + } + `; +} diff --git a/packages/open-scd/src/editors/singlelinediagram/foundation.ts b/packages/open-scd/src/editors/singlelinediagram/foundation.ts new file mode 100644 index 0000000000..4a1cd543b8 --- /dev/null +++ b/packages/open-scd/src/editors/singlelinediagram/foundation.ts @@ -0,0 +1,152 @@ +import { getNameAttribute, getPathNameAttribute } from "../../foundation.js"; + +/** + * A point is a position containing a x and a y within a SCL file. + */ +export interface Point { + x: number; + y: number; +} + +export const SCL_COORDINATES_NAMESPACE = 'http://www.iec.ch/61850/2003/SCLcoordinates'; + +/** Scope factor: the ConnectivityNode allocation algorithm works better with a scale factor which is bigger than 1. */ +const COORDINATES_SCALE_FACTOR = 2; + +/** + * Get the coordinates of a XML element (x and y coordinates). + * @param element - The element to extract coordinates from. + * @returns A point containing the coordinates. + */ +export function getRelativeCoordinates(element: Element): Point { + const x = element.getAttributeNS( + SCL_COORDINATES_NAMESPACE, + 'x' + ); + const y = element.getAttributeNS( + SCL_COORDINATES_NAMESPACE, + 'y' + ); + + return { + x: x ? parseInt(x) * COORDINATES_SCALE_FACTOR : 0, + y: y ? parseInt(y) * COORDINATES_SCALE_FACTOR : 0, + }; +} + +/** + * Get the absolute (its own and all parents') coordinates of a SCL element (x and y coordinates) + * @param element - The element to extract coordinates from. + * @returns A point containing the coordinates. + */ +export function getAbsoluteCoordinates(element: Element): Point { + if (!element.parentElement || element.parentElement?.tagName === 'SCL') + return getRelativeCoordinates(element); + + const absParent = getAbsoluteCoordinates(element.parentElement); + const relElement = getRelativeCoordinates(element); + return { + x: absParent.x! + relElement.x!, + y: absParent.y! + relElement.y!, + }; +} + +/** + * Checking of an element is a BusBar or not. + * @param element - The element to check. + * @returns Is the element a BusBar or not. + */ +export function isBusBar(element: Element): boolean { + return ( + element.children.length === 1 && + element.children[0].tagName === 'ConnectivityNode' + ); +} + +/** + * Get all the connected terminals to a given element. + * @param element - The element to check. + * @returns All connected terminals. + */ +export function getConnectedTerminals(element: Element): Element[] { + const substationElement = element?.closest('Substation'); + if (!substationElement) return []; + + const path = getPathNameAttribute(element) ?? ''; + const [substationName, voltageLevelName, bayName] = path.split('/'); + + return Array.from(substationElement.getElementsByTagName('Terminal')).filter( + terminal => + terminal.getAttribute('connectivityNode') === path && + terminal.getAttribute('cNodeName') === getNameAttribute(element) && + (!terminal.hasAttribute('substationName') || terminal.getAttribute('substationName') === substationName) && + (!terminal.hasAttribute('voltageLevelName') || terminal.getAttribute('voltageLevelName') === voltageLevelName) && + (!terminal.hasAttribute('bayName') || terminal.getAttribute('bayName') === bayName) + ); +} + +/** + * Calculate the SCL x and y coordinate of a Connectivity Node. + * The algorithm is as follow: + * - Get all elements that are connected to this Connectivity Node. + * - Extract the SCL x and y coordinates of these Connectivity Nodes and add them up. + * - Divide the final x and y numbers by the number of connected elements. This way, you get an so-called average. + * @param cNodeElement - The Connectivity Node to calculate the X and Y Coordinates for. + * @returns The calculated SCL x and y coordinates for this Connectivity Node. + */ +export function calculateConnectivityNodeCoordinates( + cNodeElement: Element +): Point { + // If element is not a Connectivity Node, return default {x: 0, y: 0} + if (cNodeElement.tagName != 'ConnectivityNode') return { x: 0, y: 0 }; + + const substationElement = cNodeElement.closest('Substation'); + const pathName = getPathNameAttribute(cNodeElement); + + let nrOfConnections = 0; + let nrOfXConnections = 0; + let totalX = 0; + let totalY = 0; + + Array.from( + substationElement!.querySelectorAll('ConductingEquipment, PowerTransformer') + ) + .filter( + equipment => + equipment.querySelector(`Terminal[connectivityNode="${pathName}"]`) != + null + ) + .forEach(equipment => { + nrOfConnections++; + + const { x, y } = getAbsoluteCoordinates(equipment); + + // Only if the Element is in the same bay, we will use that X-value to calculate the location + // of the Connectivity Node. This will cause the Connectivity Node to stay with the boundaries + // of the Bay and not causing al kind of overlays between bays. + if (equipment.parentElement === cNodeElement.parentElement) { + nrOfXConnections++; + totalX += x!; + } + totalY += y!; + }); + + if (nrOfConnections === 0) return { x: 0, y: 0 }; + if (nrOfConnections === 1) return { x: totalX + 1, y: totalY + 1 }; + + return { + x: Math.round(totalX / nrOfXConnections), + y: Math.round(totalY / nrOfConnections), + }; +} + +export function getCommonParentElement(leftElement: Element, rightElement: Element, defaultParent: Element | null): Element | null { + let leftParentElement = leftElement.parentElement + while (leftParentElement) { + if (leftParentElement.contains(rightElement)) { + return leftParentElement; + } + leftParentElement = leftParentElement.parentElement; + } + return defaultParent; +} diff --git a/packages/open-scd/src/editors/singlelinediagram/ortho-connector.ts b/packages/open-scd/src/editors/singlelinediagram/ortho-connector.ts new file mode 100644 index 0000000000..9c3f197072 --- /dev/null +++ b/packages/open-scd/src/editors/singlelinediagram/ortho-connector.ts @@ -0,0 +1,311 @@ +interface Point { + x: number; + y: number; +} + +interface Adjacent { + point: Point; + edgeWeight: number; +} + +interface GraphNode { + point: Point; + adjacent: Adjacent[]; + dist: number; + path: Point[]; +} + +function distance(a: Point, b: Point): number { + return Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2)); +} + +function isChangedDirection(a: GraphNode, b: GraphNode): boolean { + if (a.path.length === 0) return false; + + const commingX2 = a.point.x; + const commingX1 = a.path[a.path.length - 1].x; + const commingHorizontal = commingX2 - commingX1 ? false : true; + + const goingHorizontal = a.point.x - b.point.x ? false : true; + + return commingHorizontal !== goingHorizontal; +} + +function filterUnchangedDirection(path: Point[]): Point[] { + return path.filter((p, i, v) => { + if (i === 0 || i === v.length - 1) return true; + + const commingDirection = + v[i].x - v[i - 1].x !== 0 ? 'horizontal' : 'vertical'; + const goingDirection = + v[i + 1].x - v[i].x !== 0 ? 'horizontal' : 'vertical'; + + return commingDirection === goingDirection ? false : true; + }); +} + +function calculateMinimumDistance( + adjacent: GraphNode, + edgeWeigh: number, + parentNode: GraphNode +) { + const sourceDistance = parentNode.dist; + + const changingDirection = isChangedDirection(parentNode, adjacent); + const extraWeigh = changingDirection ? Math.pow(edgeWeigh + 1, 2) : 0; + + if (sourceDistance + edgeWeigh + extraWeigh < adjacent.dist) { + adjacent.dist = sourceDistance + edgeWeigh + extraWeigh; + const shortestPath: Point[] = [...parentNode.path]; + shortestPath.push(parentNode.point); + adjacent.path = shortestPath; + } +} + +function getLowestDistanceGraphNode( + unsettledNodes: Set +): GraphNode | null { + let lowestDistance = Number.MAX_SAFE_INTEGER; + let lowestDistanceNode: GraphNode | null = null; + + for (const node of unsettledNodes) + if (node.dist < lowestDistance) { + lowestDistance = node.dist; + lowestDistanceNode = node; + } + + return lowestDistanceNode; +} + +function dijkstra(graph: GraphNode[], start: GraphNode): Point[] { + start.dist = 0; + + const settledNodes: Set = new Set(); + const unsettledNodes: Set = new Set(); + + unsettledNodes.add(start); + + while (unsettledNodes.size != 0) { + const currentNode = getLowestDistanceGraphNode(unsettledNodes)!; + unsettledNodes.delete(currentNode); + + for (const adjacent of currentNode.adjacent) { + const adjacentNode = graph.find( + node => + node.point.x === adjacent.point.x && node.point.y === adjacent.point.y + ); + const edgeWeight = adjacent.edgeWeight; + if (adjacentNode && !settledNodes.has(adjacentNode)) { + calculateMinimumDistance(adjacentNode, edgeWeight, currentNode); + unsettledNodes.add(adjacentNode); + } + } + settledNodes.add(currentNode); + } + + return []; +} + +function findClosestGraphNode( + graph: GraphNode[], + point: Point +): GraphNode | undefined { + const distFromGraphNodes = graph.map( + node => Math.abs(point.x - node.point.x) + Math.abs(point.y - node.point.y) + ); + + const minDistance = Math.min(...distFromGraphNodes); + const index = distFromGraphNodes.indexOf(minDistance); + + return graph[index]; +} + +function addStartNode(graph: GraphNode[], start: Point): GraphNode | undefined { + const closestToStart = findClosestGraphNode(graph, start)?.point; + if (!closestToStart) return undefined; + + const startNode = { + point: start, + adjacent: [ + { point: closestToStart, edgeWeight: distance(start, closestToStart) }, + ], + dist: Number.MAX_SAFE_INTEGER, + path: [], + }; + graph.push(startNode); + + return startNode; +} + +function getPath(graph: GraphNode[], start: Point, end: Point): Point[] { + const startNode = addStartNode(graph, start); + const closestToEnd = findClosestGraphNode(graph, end); + + if (!startNode || !closestToEnd) return []; + + dijkstra(graph, startNode); + const shortestPath = closestToEnd.path.concat(closestToEnd.point); + + return filterUnchangedDirection(shortestPath).concat([end]); +} + +function findGraphNode( + graph: GraphNode[], + x: number, + y: number +): GraphNode | undefined { + return graph.find(node => node.point.x === x && node.point.y === y); +} + +function findAdjacent( + graph: GraphNode[], + currentNode: GraphNode, + gridSize: number, + type: string +): Adjacent | null { + let dX1: number; + let dY1: number; + + if (type === 'prevX') { + dX1 = currentNode.point.x - gridSize; + dY1 = currentNode.point.y; + } else if (type === 'prevY') { + dX1 = currentNode.point.x; + dY1 = currentNode.point.y - gridSize; + } else if (type === 'nextX') { + dX1 = currentNode.point.x + gridSize; + dY1 = currentNode.point.y; + } else { + dX1 = currentNode.point.x; + dY1 = currentNode.point.y + gridSize; + } + + if (findGraphNode(graph, dX1!, dY1!)) { + return { + point: findGraphNode(graph, dX1!, dY1!)!.point, + edgeWeight: gridSize, + }; + } + + return null; +} + +function createGraph(allocation: number[][], gridSize: number): GraphNode[] { + const graph: GraphNode[] = []; + for (let row = 0; row < allocation.length; row++) + for (let col = 0; col < allocation[row].length; col++) + if (allocation[row][col] === 0) + graph.push({ + point: { + x: col * gridSize + gridSize / 2, + y: row * gridSize + gridSize / 2, + }, + adjacent: [], + dist: Number.MAX_SAFE_INTEGER, + path: [], + }); + + for (const node of graph) { + const adjacents = ( + ['prevX', 'prevY', 'nextX', 'nextY'] + .map(type => findAdjacent(graph, node, gridSize, type)) + .filter(adjacent => adjacent) + ); + node.adjacent = adjacents; + } + + return graph; +} + +function emptyAllocation( + start: Point, + end: Point, + gridSize: number +): (0 | 1)[][] { + const maxX = start.x > end.x ? start.x : end.x; + const maxY = start.y > end.y ? start.y : end.y; + + const emptyGrid: (0 | 1)[][] = []; + for (let i = 0; i <= Math.ceil(maxY / gridSize) + 1; i++) { + emptyGrid[i] = []; + for (let j = 0; j <= Math.ceil(maxX / gridSize) + 1; j++) { + emptyGrid[i][j] = 0; + } + } + + emptyGrid[Math.floor(start.y / gridSize)][Math.floor(start.x / gridSize)] = 1; + emptyGrid[Math.floor(end.y / gridSize)][Math.floor(end.x / gridSize)] = 1; + + return emptyGrid; +} + +//FIXME: This is a dirty trick to improve performance of the algorithm +function trimStartEnd(start: Point, end: Point, gridSize: number): Point[] { + //FIXME: Dirty hack to speed up the algorithm + const minCoordX = Math.min( + Math.floor(start.x / gridSize), + Math.floor(end.x / gridSize) + ); + const minCoordY = Math.min( + Math.floor(start.y / gridSize), + Math.floor(end.y / gridSize) + ); + + const dCoordX = minCoordX > 1 ? minCoordX - 1 : 0; + const dCoordY = minCoordY > 1 ? minCoordY - 1 : 0; + + const deltaX = dCoordX * gridSize; + const deltaY = dCoordY * gridSize; + + return [ + { x: start.x - deltaX, y: start.y - deltaY }, + { x: end.x - deltaX, y: end.y - deltaY }, + ]; +} + +function fullPath( + path: Point[], + start: Point, + end: Point, + trimmedStart: Point, + trimmedEnd: Point +): Point[] { + if (start === trimmedStart && end === trimmedEnd) return path; + + const deltaX = start.x - trimmedStart.x; + const deltaY = start.y - trimmedStart.y; + + return path.map(point => { + return { x: point.x + deltaX, y: point.y + deltaY }; + }); +} + +/** Finds the shortest orthogonal path between start and end based on grid and dijkstra path finding algorithm + * @param start - the position in px of the start point + * @param end - the position in px of the end point + * @param gridSize - grid size of the grid to rout in the orthogonal path + * @param gridAllocation - optional [][] matrix to define allocated grid cells + * @returns - Array of positions in px building the orthogonal path + */ +export function getOrthogonalPath( + start: Point, + end: Point, + gridSize: number, + gridAllocation?: (0 | 1)[][] +): Point[] { + if (start.x === end.x && start.y === end.y) return []; + + let trimmedStart = start; + let trimmedEnd = end; + + if (!gridAllocation) { + [trimmedStart, trimmedEnd] = trimStartEnd(start, end, gridSize); + gridAllocation = emptyAllocation(trimmedStart, trimmedEnd, gridSize); + } + + const graph: GraphNode[] = createGraph(gridAllocation!, gridSize); + + const shortesPath = getPath(graph, trimmedStart, trimmedEnd); + + return fullPath(shortesPath, start, end, trimmedStart, trimmedEnd); +} diff --git a/packages/open-scd/src/editors/singlelinediagram/sld-drawing.ts b/packages/open-scd/src/editors/singlelinediagram/sld-drawing.ts new file mode 100644 index 0000000000..ea97eb654b --- /dev/null +++ b/packages/open-scd/src/editors/singlelinediagram/sld-drawing.ts @@ -0,0 +1,655 @@ +import { getDescriptionAttribute, getNameAttribute, identity } from '../../foundation.js'; +import { getIcon } from '../substation/foundation.js'; +import { + connectivityNodeIcon, + editIcon, + powerTransformerTwoWindingIcon, +} from '../../icons/icons.js'; + +import { + getRelativeCoordinates, + Point, + getAbsoluteCoordinates, + calculateConnectivityNodeCoordinates, +} from './foundation.js'; +import { getOrthogonalPath } from './ortho-connector.js'; + +/** Default 'grid size' of our SVG */ +export const SVG_GRID_SIZE = 64; + +/** Size of SLC element ConductingEquipment or PowerTransformer */ +export const EQUIPMENT_SIZE = 50; + +/** The size of SLC element ConnectivityNode */ +export const CNODE_SIZE = 25; + +/** Offset of a terminal next to its parent element */ +const TERMINAL_OFFSET = 6; + +type Direction = 'top' | 'right' | 'bottom' | 'left'; +/** Start and end direction of the route */ + +export interface PointDirections { + startDirection: Direction; + endDirection: Direction; +} + +/** + * Get the full position of an element (multiplied with an offset for the SVG). + * It's just a matter of adding all the position up of the element including it's parent(s). + * @param element - The SCL element to get the position for. + * @returns A point containing the full x/y position. + */ +export function getAbsolutePosition(element: Element): Point { + const absoluteCoordinates = getAbsoluteCoordinates(element); + return { + x: + absoluteCoordinates.x! * SVG_GRID_SIZE + + (SVG_GRID_SIZE - EQUIPMENT_SIZE) / 2, + y: + absoluteCoordinates.y! * SVG_GRID_SIZE + + (SVG_GRID_SIZE - EQUIPMENT_SIZE) / 2, + }; +} + +/** + * Get the full position of an bus bar (multiplied with an offset for the SVG). + * @param busbar - The SCL element Bay to get the position for. + * @returns A point containing the full x/y position in px. + */ +export function getAbsolutePositionBusBar(busbar: Element): Point { + const absoluteCoordinates = getAbsoluteCoordinates(busbar); + return { + x: absoluteCoordinates.x! * SVG_GRID_SIZE, + y: absoluteCoordinates.y! * SVG_GRID_SIZE, + }; +} + +/** + * Get the full position of an ConnectivityNode SCL element (multiplied with an offset for the SVG). + * @param connectivityNode - The SCL element ConnectivityNode to get the position for. + * @returns A point containing the full x/y position in px. + */ +export function getAbsolutePositionConnectivityNode(connectivityNode: Element): Point { + const absoluteCoordinates = calculateConnectivityNodeCoordinates(connectivityNode); + return { + x: + absoluteCoordinates.x! * SVG_GRID_SIZE + (SVG_GRID_SIZE - CNODE_SIZE) / 2, + y: + absoluteCoordinates.y! * SVG_GRID_SIZE + (SVG_GRID_SIZE - CNODE_SIZE) / 2, + }; +} + +/** + * Calculate the absolute offset of a terminal next to an element. + * @param parentElementPosition - The position of the parent element of the terminal. + * @param elementOffset - The offset of the parent element. + * @param terminalSide - The side of the parent element where the terminal should be placed. + * @param customTerminalOffset - An optional parameter containing the offset of the terminal next to the parent element. + * This may vary, for example for Connectivity Nodes. + * + * @returns The absolute position of the terminal. + */ +function absoluteOffsetTerminal( + parentElementPosition: Point, + elementOffset: number, + terminalSide: Direction, + customTerminalOffset?: number +): Point { + + const terminalOffset = customTerminalOffset ?? TERMINAL_OFFSET; + + switch (terminalSide) { + case 'top': { + const x = parentElementPosition.x; + const y = parentElementPosition.y; + return { + x: x! + elementOffset / 2, + y: y! - terminalOffset, + }; + } + case 'bottom': { + const x = parentElementPosition.x; + const y = parentElementPosition.y; + return { + x: x! + elementOffset / 2, + y: y! + (elementOffset + terminalOffset), + }; + } + case 'left': { + const x = parentElementPosition.x; + const y = parentElementPosition.y; + return { + x: x! - terminalOffset, + y: y! + elementOffset / 2, + }; + } + case 'right': { + const x = parentElementPosition.x; + const y = parentElementPosition.y; + return { + x: x! + (elementOffset + terminalOffset), + y: y! + elementOffset / 2, + }; + } + default: { + return parentElementPosition; + } + } +} + +/** + * Get the absolute position in py for a equipments Terminal (based on the TERMINAL_OFFSET). + * @param equipment - The SCL elements ConductingEquipment or PowerTransformer. + * @param direction - On which side does the terminal needs to be placed relative to the given point. + */ +export function getAbsolutePositionTerminal( + equipment: Element, + direction: Direction +): Point { + const parentElementPosition = getAbsolutePosition(equipment); + + return absoluteOffsetTerminal(parentElementPosition, EQUIPMENT_SIZE, direction); +} + +/** + * Get the absolute position in px for a SLC element ConnectivityNode drawing start/end (based on the TERMINAL_OFFSET). + * @param cNode - The SCL element ConnectivityNode + * @param direction - The direction of the connector from/to the ConnectivityNode + */ +export function getConnectivityNodesDrawingPosition( + cNode: Element, + direction: Direction +): Point { + const parentElementPosition = getAbsolutePositionConnectivityNode(cNode); + + // Using a custom terminal offset for Connectivity Nodes, so the routes are nicely connected to the Connectivity Nodes. + const customTerminalOffset = -(CNODE_SIZE/3) + return absoluteOffsetTerminal(parentElementPosition, CNODE_SIZE, direction, customTerminalOffset); +} + +/** + * Create a element based on a single XML element. + * @param element - The element. + * @returns The element. + */ +function createGroupElement(element: Element): SVGGraphicsElement { + const finalElement = document.createElementNS( + 'http://www.w3.org/2000/svg', + 'g' + ); + finalElement.setAttribute( + 'id', + typeof identity(element) === 'string' + ? identity(element) + : 'unidentifiable' + ); + finalElement.setAttribute('type', element.tagName); + + const description = getDescriptionAttribute(element); + if (description) finalElement.setAttribute('desc', description); + + // Setting the X and Y coordinates of this element. + // It's not actually used, it's more informative. + const coordinates = getRelativeCoordinates(element); + finalElement.setAttribute('sxy:x', `${coordinates.x}`); + finalElement.setAttribute('sxy:y', `${coordinates.y}`); + + return finalElement; +} + +/** + * Create a Substation element. + * @param substation - The Substation from the SCL document to use. + * @returns A Substation element. + */ +export function createSubstationElement(substation: Element): SVGElement { + return createGroupElement(substation); +} + +/** + * Create a Voltage Level element. + * @param voltageLevel - The Voltage Level from the SCL document to use. + * @returns A Voltage Level element. + */ +export function createVoltageLevelElement(voltageLevel: Element): SVGElement { + return createGroupElement(voltageLevel); +} + +/** + * Create a Bay element. + * @param bayElement - The Bay from the SCL document to use. + * @returns A Bay element. + */ +export function createBayElement(bayElement: Element): SVGGraphicsElement { + return createGroupElement(bayElement); +} + +/** + * Add a Text Element to the top of the Bay + * + * @param rootGroup - The Root group containing all groups. + * @param bayElement - The Bay from the SCL document to use. + * @param clickAction - The action to execute when the Name of the Bay is being clicked. + */ +export function addLabelToBay(rootGroup: SVGElement, + bayElement: Element, + clickAction?: (event: Event) => void +): void { + rootGroup + .querySelectorAll(`g[id="${identity(bayElement)}"]`) + .forEach(bayGroup => { + const labelGroup = document.createElementNS('http://www.w3.org/2000/svg', 'g'); + labelGroup.setAttribute('type', 'BayLabel'); + if (clickAction) labelGroup.addEventListener('click', clickAction); + bayGroup.prepend(labelGroup); + + const bayBox = (bayGroup).getBBox(); + const text = createTextElement( + bayElement.getAttribute('name') || '', + {x: bayBox.x, y: bayBox.y - 20}, + 'medium' + ); + labelGroup.append(text); + + const textBox = text.getBBox(); + const parsedIcon = new DOMParser().parseFromString( + editIcon.strings[0], + 'application/xml' + ); + parsedIcon.querySelectorAll('circle,path,line').forEach(icon => { + icon.setAttribute( + 'transform', + `translate(${textBox.x + textBox.width + 5},${textBox.y}) scale(0.75)` + ); + labelGroup.append(icon); + }); + }); +} + +/** + * Create a basic caption. + * @param textContent - The content of the caption. + * @param coordinates - The x and y position in px to locate in drawing pane. + * @param textSize - The size of the caption + * @returns The text SVG element. + */ +export function createTextElement( + textContent: string, + coordinates: Point, + textSize: string +): SVGGraphicsElement { + const finalElement = document.createElementNS( + 'http://www.w3.org/2000/svg', + 'text' + ); + + finalElement.textContent = textContent; + finalElement.setAttribute( + 'style', + `font-family: Roboto, sans-serif; font-weight: 300; font-size: ${textSize}` + ); + + finalElement.setAttribute('x', `${coordinates.x}`); + finalElement.setAttribute('y', `${coordinates.y}`); + + return finalElement; +} + +/** + * Create a Terminal element. + * @param terminal - The SCL element Terminal to draw + * @param sideToDraw - The side of the element the terminal must be drawn on. + * @param clickAction - The action to execute when the terminal is being clicked. + * @returns The terminal SVG element. + */ +export function createTerminalElement( + terminal: Element, + sideToDraw: Direction, + clickAction?: (event: Event) => void +): SVGElement { + const groupElement = createGroupElement(terminal); + + const terminalIdentity = + typeof identity(terminal) === 'string' + ? identity(terminal) + : 'unidentifiable'; + + const parentEquipment = terminal.closest( + 'ConductingEquipment, PowerTransformer' + ); + const terminalPosition = getAbsolutePositionTerminal( + parentEquipment!, + sideToDraw + ); + + const icon = document.createElementNS('http://www.w3.org/2000/svg', 'circle'); + icon.setAttribute('id', `${terminalIdentity}`); + icon.setAttribute('cx', `${terminalPosition.x}`); + icon.setAttribute('cy', `${terminalPosition.y}`); + icon.setAttribute('r', '2'); + groupElement.appendChild(icon); + + if (clickAction) groupElement.addEventListener('click', clickAction); + + return groupElement; +} + +/** + * Create a bus bar element. + * @param busbarElement - The Bus Bar SCL Element. + * @param busbarLength - The length of the bus bar depending on the x coordinate of the most far out right equipment () + * @returns The Bus Bar SVG element. + */ +export function createBusBarElement( + busbarElement: Element, + busbarLength: number +): SVGGraphicsElement { + const groupElement = createGroupElement(busbarElement); + // Overwrite the type to make a distinction between Bays and Busbars. + groupElement.setAttribute('type', 'Busbar'); + + const absolutePosition = getAbsolutePositionBusBar(busbarElement); + + // TODO: Add this to the icons.ts file. + const icon = document.createElementNS('http://www.w3.org/2000/svg', 'line'); + icon.setAttribute('name', getNameAttribute(busbarElement)!); + icon.setAttribute('stroke-width', '4'); + icon.setAttribute('stroke', 'currentColor'); + + icon.setAttribute('x1', `${absolutePosition.x}`); + icon.setAttribute('y1', `${absolutePosition.y}`); + icon.setAttribute('x2', `${busbarLength}`); + icon.setAttribute('y2', `${absolutePosition.y}`); + + groupElement.appendChild(icon); + + return groupElement; +} + +/** + * Add a Text Element to the top of the Bay + * + * @param rootGroup - The Root group containing all groups. + * @param busbarElement - The BusBar from the SCL document to use. + * @param clickAction - The action to execute when the Name of the BusBar is being clicked. + */ +export function addLabelToBusBar(rootGroup: SVGElement, + busbarElement: Element, + clickAction?: (event: Event) => void +): void { + rootGroup + .querySelectorAll(`g[id="${identity(busbarElement)}"]`) + .forEach(busbarGroup => { + const labelGroup = document.createElementNS('http://www.w3.org/2000/svg','g'); + labelGroup.setAttribute('type', 'BusbarLabel'); + if (clickAction) labelGroup.addEventListener('click', clickAction); + busbarGroup.prepend(labelGroup); + + const busbarBox = (busbarGroup).getBBox(); + const text = createTextElement( + busbarElement.getAttribute('name') || '', + { x: busbarBox.x, y: busbarBox.y - 20 }, + 'medium' + ); + labelGroup.append(text); + + const textBox = text.getBBox(); + const parsedIcon = new DOMParser().parseFromString( + editIcon.strings[0], + 'application/xml' + ); + parsedIcon.querySelectorAll('circle,path,line').forEach(icon => { + icon.setAttribute( + 'transform', + `translate(${textBox.x + textBox.width + 5},${textBox.y}) scale(0.75)` + ); + labelGroup.append(icon); + }); + }); +} + +/** + * Create a Conducting Equipment element. + * @param equipmentElement - The SCL element ConductingEquipment + * @param clickAction - The action to execute when the Conducting Equipment is being clicked. + * @returns The Conducting Equipment SVG element. + */ +export function createConductingEquipmentElement( + equipmentElement: Element, + clickAction?: (event: Event) => void +): SVGElement { + const groupElement = createGroupElement(equipmentElement); + + const absolutePosition = getAbsolutePosition(equipmentElement); + const parsedIcon = new DOMParser().parseFromString( + getIcon(equipmentElement).strings[0], + 'application/xml' + ); + parsedIcon.querySelectorAll('circle,path,line').forEach(icon => { + icon.setAttribute( + 'transform', + `translate(${absolutePosition.x},${absolutePosition.y}) scale(${ + EQUIPMENT_SIZE / 25 + })` + ); + groupElement.appendChild(icon); + }); + + const text = createTextElement( + getNameAttribute(equipmentElement)!, + { x: absolutePosition.x! - 15, y: absolutePosition.y! + 30 }, + 'x-small' + ); + groupElement.appendChild(text); + + if (clickAction) groupElement.addEventListener('click', clickAction); + + return groupElement; +} + +/** + * Create a PowerTransformer element. + * @param powerTransformerElement - The SCL element PowerTransformer + * @param clickAction - The action to execute when the Power Transformer is being clicked. + * @returns The Power Transformer SVG element. + */ +export function createPowerTransformerElement( + powerTransformerElement: Element, + clickAction?: (event: Event) => void +): SVGElement { + const groupElement = createGroupElement(powerTransformerElement); + + const absolutePosition = getAbsolutePosition(powerTransformerElement); + const parsedIcon = new DOMParser().parseFromString( + powerTransformerTwoWindingIcon.strings[0], + 'application/xml' + ); + parsedIcon.querySelectorAll('circle,path,line').forEach(icon => { + icon.setAttribute( + 'transform', + `translate(${absolutePosition.x},${absolutePosition.y}) scale(${ + EQUIPMENT_SIZE / 25 + })` + ); + groupElement.appendChild(icon); + }); + + const text = createTextElement( + getNameAttribute(powerTransformerElement)!, + { x: absolutePosition.x! - 15, y: absolutePosition.y! + 30 }, + 'x-small' + ); + groupElement.appendChild(text); + + if (clickAction) groupElement.addEventListener('click', clickAction); + + return groupElement; +} + +/** + * Create a Connectivity Node element. + * @param cNodeElement - The SCL element ConnectivityNode + * @param clickAction - The action to execute when the Terminal is being clicked. + * @returns The Connectivity Node SVG element. + */ +export function createConnectivityNodeElement( + cNodeElement: Element, + clickAction?: (event: Event) => void +): SVGElement { + const groupElement = createGroupElement(cNodeElement); + + const parsedIcon = new DOMParser().parseFromString( + connectivityNodeIcon.strings[0], + 'application/xml' + ); + + const absolutePosition = getAbsolutePositionConnectivityNode(cNodeElement); + parsedIcon.querySelectorAll('circle').forEach(icon => { + icon.setAttribute( + 'transform', + `translate(${absolutePosition.x},${absolutePosition.y})` + ); + groupElement.appendChild(icon); + }); + + if (clickAction) groupElement.addEventListener('click', clickAction); + + return groupElement; +} + +/** + * Draw a route from ConnectivityNode to equipments Terminal (ConductingEquipment or PowerTransformer) + * @param cNodesTerminalPosition - The start position in px of the SCL element ConnectivityNode. + * @param equipmentsTerminalPosition - The end position in px of the SCL element ConductingEquipment or PowerTransformer. + * @param svgElementToDrawOn - The SVG Element to draw the route on. + */ +export function drawCNodeConnections( + cNodesTerminalPosition: Point, + equipmentsTerminalPosition: Point, + svgElementToDrawOn: SVGElement +): void { + const path = getOrthogonalPath( + equipmentsTerminalPosition, + cNodesTerminalPosition, + SVG_GRID_SIZE + ); + + 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'); + + // Inserting elements like this works kind of like z-index (not supported in SVG yet), + // these elements are placed behind all other elements. + // By doing it like this, all other elements are hoverable for example. + svgElementToDrawOn.insertAdjacentElement('afterbegin', line); +} + +/** + * Draw a route from the bus bar to elements terminal position. + * @param busbarsTerminalPosition - The start position in px the bus bar. + * @param equipmentsTerminalPosition - The end position in px of the SCL element ConductingEquipment or PowerTransformer. + * @param svgElementToDrawOn - The SVG Element to draw the route on. + */ +export function drawBusBarRoute( + busbarsTerminalPosition: Point, + equipmentsTerminalPosition: Point, + svgElementToDrawOn: SVGElement +): void { + const path = [busbarsTerminalPosition].concat([equipmentsTerminalPosition]); + + 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'); + + svgElementToDrawOn.appendChild(line); +} + +/** + * Small simple algorithm deciding on which direction the route should be drawn + * for a connection between elements Terminal and ConnectivityNode + * @param equipment - The SCL element ConductingEquipment or PowerTransformer the route starts from. + * @param cNode - The SLC element ConnectivityNode the route ends with. + * @returns The sides of both points . + */ +export function getDirections( + equipment: Element, + cNode: Element +): PointDirections { + const pointA = getAbsoluteCoordinates(equipment); + const pointB = calculateConnectivityNodeCoordinates(cNode); + + if (pointA.y < pointB.y && pointA.x < pointB.x) + return { startDirection: 'bottom', endDirection: 'left' }; + + if (pointA.y < pointB.y && pointA.x > pointB.x) + return { startDirection: 'bottom', endDirection: 'right' }; + + if (pointA.y < pointB.y && pointA.x === pointB.x) + return { startDirection: 'bottom', endDirection: 'top' }; + + if (pointA.y > pointB.y && pointA.x < pointB.x) + return { startDirection: 'top', endDirection: 'left' }; + + if (pointA.y > pointB.y && pointA.x > pointB.x) + return { startDirection: 'top', endDirection: 'right' }; + + if (pointA.y > pointB.y && pointA.x === pointB.x) + return { startDirection: 'top', endDirection: 'bottom' }; + + if (pointA.y === pointB.y && pointA.x > pointB.x) + return { startDirection: 'left', endDirection: 'right' }; + + if (pointA.y === pointB.y && pointA.x < pointB.x) + return { startDirection: 'right', endDirection: 'left' }; + + return { startDirection: 'bottom', endDirection: 'top' }; +} + +/** + * Get the name of the parent of given child element. + * @param childElement - The child element. + * @returns The name. + */ +export function getParentElementName( + childElement: Element +): string | undefined { + const parentElement = childElement.parentElement; + return getNameAttribute(parentElement); +} + +/* Calculate length of the busbar that is depending on the most far right equipment + * @param root - Either the whole SCL file or the voltage level where the bus bar resides + * @returns - the length of the bus bar + */ +export function getBusBarLength(root: Element): number { + return ( + Math.max( + ...Array.from( + root.querySelectorAll('ConductingEquipment, PowerTransformer') + ).map(equipment => getAbsolutePosition(equipment).x!) + ) + SVG_GRID_SIZE + ); +} diff --git a/packages/open-scd/src/editors/singlelinediagram/wizards/bay.ts b/packages/open-scd/src/editors/singlelinediagram/wizards/bay.ts new file mode 100644 index 0000000000..4a8c687c07 --- /dev/null +++ b/packages/open-scd/src/editors/singlelinediagram/wizards/bay.ts @@ -0,0 +1,45 @@ +import { TemplateResult } from 'lit-element'; +import { get } from 'lit-translate'; + +import { Wizard} from '../../../foundation.js'; + +import '../../../wizard-textfield.js'; +import { renderBayWizard } from "../../../wizards/bay.js"; +import { + getDescAttribute, + getNameAttribute, + getXCoordinateAttribute, + getYCoordinateAttribute, + updateNamingAndCoordinatesAction, + renderXYCoordinateFields +} from "./foundation.js"; + +function render( + name: string | null, + desc: string | null, + xCoordinate: string | null, + yCoordinate: string | null, +): TemplateResult[] { + return renderBayWizard(name, desc) + .concat(renderXYCoordinateFields(xCoordinate, yCoordinate)); +} + +export function editBayWizard(element: Element): Wizard { + return [ + { + title: get('bay.wizard.title.edit'), + element, + primary: { + icon: 'edit', + label: get('save'), + action: updateNamingAndCoordinatesAction(element), + }, + content: render( + getNameAttribute(element), + getDescAttribute(element), + getXCoordinateAttribute(element), + getYCoordinateAttribute(element), + ), + }, + ]; +} diff --git a/packages/open-scd/src/editors/singlelinediagram/wizards/conductingequipment.ts b/packages/open-scd/src/editors/singlelinediagram/wizards/conductingequipment.ts new file mode 100644 index 0000000000..627a597342 --- /dev/null +++ b/packages/open-scd/src/editors/singlelinediagram/wizards/conductingequipment.ts @@ -0,0 +1,61 @@ +import { TemplateResult } from 'lit-element'; +import { get } from 'lit-translate'; + +import '@material/mwc-list/mwc-list-item'; +import '@material/mwc-select'; + +import '../../../wizard-textfield.js'; +import { Wizard } from '../../../foundation.js'; +import { + getDescAttribute, + getNameAttribute, + getXCoordinateAttribute, + getYCoordinateAttribute, + updateNamingAndCoordinatesAction, + renderXYCoordinateFields +} from './foundation.js'; +import { + renderConductingEquipmentWizard, + reservedNamesConductingEquipment, + typeName +} from "../../../wizards/conductingequipment.js"; + +export function render( + name: string | null, + desc: string | null, + xCoordinate: string | null, + yCoordinate: string | null, + option: 'edit' | 'create', + type: string, + reservedNames: string[] +): TemplateResult[] { + return renderConductingEquipmentWizard(name, desc, option, type, reservedNames) + .concat(renderXYCoordinateFields(xCoordinate, yCoordinate)); +} + +export function editConductingEquipmentWizard(element: Element): Wizard { + const reservedNames = reservedNamesConductingEquipment( + element.parentNode!, + element.getAttribute('name')); + + return [ + { + title: get('conductingequipment.wizard.title.edit'), + element, + primary: { + icon: 'edit', + label: get('save'), + action: updateNamingAndCoordinatesAction(element), + }, + content: render( + getNameAttribute(element), + getDescAttribute(element), + getXCoordinateAttribute(element), + getYCoordinateAttribute(element), + 'edit', + typeName(element), + reservedNames + ), + }, + ]; +} diff --git a/packages/open-scd/src/editors/singlelinediagram/wizards/foundation.ts b/packages/open-scd/src/editors/singlelinediagram/wizards/foundation.ts new file mode 100644 index 0000000000..349d4865e2 --- /dev/null +++ b/packages/open-scd/src/editors/singlelinediagram/wizards/foundation.ts @@ -0,0 +1,92 @@ +import { html, TemplateResult } from "lit-element"; +import { translate } from "lit-translate"; + +import { + cloneElement, + EditorAction, + getValue, + WizardActor, + WizardInputElement, +} from '../../../foundation.js'; +import { SCL_COORDINATES_NAMESPACE } from "../foundation.js"; + +export function getNameAttribute(element: Element): string | null { + return element.getAttribute('name'); +} + +export function getDescAttribute(element: Element): string | null { + return element.getAttribute('desc'); +} + +export function getXCoordinateAttribute(element: Element): string | null { + return element.getAttributeNS(SCL_COORDINATES_NAMESPACE, 'x'); +} + +export function getYCoordinateAttribute(element: Element): string | null { + return element.getAttributeNS(SCL_COORDINATES_NAMESPACE, 'y'); +} + +export function getFixedCoordinateValue(value: string | null): string | null { + if (value === null) { + return value; + } + + let convertedValue = Number(value); + if (isNaN(convertedValue) || convertedValue < 0) { + convertedValue = 0; + } + + return convertedValue.toString(); +} + +function updateXYAttribute(element: Element, attributeName: string, value: string | null): void { + if (value === null) { + element.removeAttributeNS(SCL_COORDINATES_NAMESPACE, attributeName) + } else { + element.setAttributeNS(SCL_COORDINATES_NAMESPACE, attributeName, value); + } +} + +export function updateNamingAndCoordinatesAction(element: Element): WizardActor { + return (inputs: WizardInputElement[]): EditorAction[] => { + const name = getValue(inputs.find(i => i.label === 'name')!)!; + const desc = getValue(inputs.find(i => i.label === 'desc')!); + const xCoordinate = getValue(inputs.find(i => i.label === 'xCoordinate')!); + const yCoordinate = getValue(inputs.find(i => i.label === 'yCoordinate')!); + + if ( + name === getNameAttribute(element) && + desc === getDescAttribute(element) && + xCoordinate === getXCoordinateAttribute(element) && + yCoordinate === getYCoordinateAttribute(element) + ) { + return []; + } + + const newElement = cloneElement(element, { name, desc }); + updateXYAttribute(newElement, 'x', getFixedCoordinateValue(xCoordinate)); + updateXYAttribute(newElement, 'y', getFixedCoordinateValue(yCoordinate)); + + return [{ old: { element }, new: { element: newElement } }]; + }; +} + +export function renderXYCoordinateFields( + xCoordinate: string | null, + yCoordinate: string | null, +) : TemplateResult[] { + return [ + html``, + html``, + ]; +} diff --git a/packages/open-scd/src/editors/singlelinediagram/wizards/powertransformer.ts b/packages/open-scd/src/editors/singlelinediagram/wizards/powertransformer.ts new file mode 100644 index 0000000000..3383803f90 --- /dev/null +++ b/packages/open-scd/src/editors/singlelinediagram/wizards/powertransformer.ts @@ -0,0 +1,52 @@ +import { TemplateResult } from 'lit-element'; +import { get } from 'lit-translate'; + +import { Wizard} from '../../../foundation.js'; + +import '../../../wizard-textfield.js'; +import { + reservedNamesPowerTransformer, + renderPowerTransformerWizard +} from "../../../wizards/powertransformer.js"; +import { + getDescAttribute, + getNameAttribute, + getXCoordinateAttribute, + getYCoordinateAttribute, + updateNamingAndCoordinatesAction, + renderXYCoordinateFields +} from "./foundation.js"; + +function render( + name: string | null, + desc: string | null, + type: string | null, + xCoordinate: string | null, + yCoordinate: string | null, + reservedNames: string[] +): TemplateResult[] { + return renderPowerTransformerWizard(name, desc, type, reservedNames) + .concat(renderXYCoordinateFields(xCoordinate, yCoordinate)); +} + +export function editPowerTransformerWizard(element: Element): Wizard { + return [ + { + title: get('powertransformer.wizard.title.edit'), + element, + primary: { + icon: 'edit', + label: get('save'), + action: updateNamingAndCoordinatesAction(element), + }, + content: render( + getNameAttribute(element), + getDescAttribute(element), + element.getAttribute('type'), + getXCoordinateAttribute(element), + getYCoordinateAttribute(element), + reservedNamesPowerTransformer(element) + ), + }, + ]; +} diff --git a/packages/open-scd/src/editors/singlelinediagram/wizards/wizard-library.ts b/packages/open-scd/src/editors/singlelinediagram/wizards/wizard-library.ts new file mode 100644 index 0000000000..69411d7c4d --- /dev/null +++ b/packages/open-scd/src/editors/singlelinediagram/wizards/wizard-library.ts @@ -0,0 +1,516 @@ +import { SCLTag, Wizard } from '../../../foundation.js'; +import { emptyWizard } from '../../../wizards/wizard-library.js'; + +import { editConnectivityNodeWizard } from "../../../wizards/connectivitynode.js"; +import { editTerminalWizard } from "../../../wizards/terminal.js"; + +import { editBayWizard } from "./bay.js"; +import { editConductingEquipmentWizard } from './conductingequipment.js'; +import { editPowerTransformerWizard } from './powertransformer.js'; + +type SclElementWizard = (element: Element) => Wizard | undefined; + +export const wizards: Record< + SCLTag, + { + edit: SclElementWizard; + create: SclElementWizard; + } +> = { + AccessControl: { + edit: emptyWizard, + create: emptyWizard, + }, + AccessPoint: { + edit: emptyWizard, + create: emptyWizard, + }, + Address: { + edit: emptyWizard, + create: emptyWizard, + }, + Association: { + edit: emptyWizard, + create: emptyWizard, + }, + Authentication: { + edit: emptyWizard, + create: emptyWizard, + }, + BDA: { + edit: emptyWizard, + create: emptyWizard, + }, + BitRate: { + edit: emptyWizard, + create: emptyWizard, + }, + Bay: { + edit: editBayWizard, + create: emptyWizard, + }, + ClientLN: { + edit: emptyWizard, + create: emptyWizard, + }, + ClientServices: { + edit: emptyWizard, + create: emptyWizard, + }, + CommProt: { + edit: emptyWizard, + create: emptyWizard, + }, + Communication: { + edit: emptyWizard, + create: emptyWizard, + }, + ConductingEquipment: { + edit: editConductingEquipmentWizard, + create: emptyWizard, + }, + ConfDataSet: { + edit: emptyWizard, + create: emptyWizard, + }, + ConfLdName: { + edit: emptyWizard, + create: emptyWizard, + }, + ConfLNs: { + edit: emptyWizard, + create: emptyWizard, + }, + ConfLogControl: { + edit: emptyWizard, + create: emptyWizard, + }, + ConfReportControl: { + edit: emptyWizard, + create: emptyWizard, + }, + ConfSG: { + edit: emptyWizard, + create: emptyWizard, + }, + ConfSigRef: { + edit: emptyWizard, + create: emptyWizard, + }, + ConnectedAP: { + edit: emptyWizard, + create: emptyWizard, + }, + ConnectivityNode: { + edit: editConnectivityNodeWizard, + create: emptyWizard, + }, + DA: { + edit: emptyWizard, + create: emptyWizard, + }, + DAI: { + edit: emptyWizard, + create: emptyWizard, + }, + DAType: { + edit: emptyWizard, + create: emptyWizard, + }, + DO: { + edit: emptyWizard, + create: emptyWizard, + }, + DOI: { + edit: emptyWizard, + create: emptyWizard, + }, + DOType: { + edit: emptyWizard, + create: emptyWizard, + }, + DataObjectDirectory: { + edit: emptyWizard, + create: emptyWizard, + }, + DataSet: { + edit: emptyWizard, + create: emptyWizard, + }, + DataSetDirectory: { + edit: emptyWizard, + create: emptyWizard, + }, + DataTypeTemplates: { + edit: emptyWizard, + create: emptyWizard, + }, + DynAssociation: { + edit: emptyWizard, + create: emptyWizard, + }, + DynDataSet: { + edit: emptyWizard, + create: emptyWizard, + }, + EnumType: { + edit: emptyWizard, + create: emptyWizard, + }, + EnumVal: { + edit: emptyWizard, + create: emptyWizard, + }, + EqFunction: { + edit: emptyWizard, + create: emptyWizard, + }, + EqSubFunction: { + edit: emptyWizard, + create: emptyWizard, + }, + ExtRef: { + edit: emptyWizard, + create: emptyWizard, + }, + FCDA: { + edit: emptyWizard, + create: emptyWizard, + }, + FileHandling: { + edit: emptyWizard, + create: emptyWizard, + }, + Function: { + edit: emptyWizard, + create: emptyWizard, + }, + GeneralEquipment: { + edit: emptyWizard, + create: emptyWizard, + }, + GetCBValues: { + edit: emptyWizard, + create: emptyWizard, + }, + GetDataObjectDefinition: { + edit: emptyWizard, + create: emptyWizard, + }, + GetDataSetValue: { + edit: emptyWizard, + create: emptyWizard, + }, + GetDirectory: { + edit: emptyWizard, + create: emptyWizard, + }, + GOOSE: { + edit: emptyWizard, + create: emptyWizard, + }, + GOOSESecurity: { + edit: emptyWizard, + create: emptyWizard, + }, + GSE: { + edit: emptyWizard, + create: emptyWizard, + }, + GSEDir: { + edit: emptyWizard, + create: emptyWizard, + }, + GSEControl: { + edit: emptyWizard, + create: emptyWizard, + }, + GSESettings: { + edit: emptyWizard, + create: emptyWizard, + }, + GSSE: { + edit: emptyWizard, + create: emptyWizard, + }, + Header: { + edit: emptyWizard, + create: emptyWizard, + }, + History: { + edit: emptyWizard, + create: emptyWizard, + }, + Hitem: { + edit: emptyWizard, + create: emptyWizard, + }, + IED: { + edit: emptyWizard, + create: emptyWizard, + }, + IEDName: { + edit: emptyWizard, + create: emptyWizard, + }, + Inputs: { + edit: emptyWizard, + create: emptyWizard, + }, + IssuerName: { + edit: emptyWizard, + create: emptyWizard, + }, + KDC: { + edit: emptyWizard, + create: emptyWizard, + }, + LDevice: { + edit: emptyWizard, + create: emptyWizard, + }, + LN: { + edit: emptyWizard, + create: emptyWizard, + }, + LN0: { + edit: emptyWizard, + create: emptyWizard, + }, + LNode: { + edit: emptyWizard, + create: emptyWizard, + }, + LNodeType: { + edit: emptyWizard, + create: emptyWizard, + }, + Line: { + edit: emptyWizard, + create: emptyWizard, + }, + Log: { + edit: emptyWizard, + create: emptyWizard, + }, + LogControl: { + edit: emptyWizard, + create: emptyWizard, + }, + LogSettings: { + edit: emptyWizard, + create: emptyWizard, + }, + MaxTime: { + edit: emptyWizard, + create: emptyWizard, + }, + McSecurity: { + edit: emptyWizard, + create: emptyWizard, + }, + MinTime: { + edit: emptyWizard, + create: emptyWizard, + }, + NeutralPoint: { + edit: emptyWizard, + create: emptyWizard, + }, + OptFields: { + edit: emptyWizard, + create: emptyWizard, + }, + P: { + edit: emptyWizard, + create: emptyWizard, + }, + PhysConn: { + edit: emptyWizard, + create: emptyWizard, + }, + PowerTransformer: { + edit: editPowerTransformerWizard, + create: emptyWizard, + }, + Private: { + edit: emptyWizard, + create: emptyWizard, + }, + Process: { + edit: emptyWizard, + create: emptyWizard, + }, + ProtNs: { + edit: emptyWizard, + create: emptyWizard, + }, + Protocol: { + edit: emptyWizard, + create: emptyWizard, + }, + ReadWrite: { + edit: emptyWizard, + create: emptyWizard, + }, + RedProt: { + edit: emptyWizard, + create: emptyWizard, + }, + ReportControl: { + edit: emptyWizard, + create: emptyWizard, + }, + ReportSettings: { + edit: emptyWizard, + create: emptyWizard, + }, + RptEnabled: { + edit: emptyWizard, + create: emptyWizard, + }, + SamplesPerSec: { + edit: emptyWizard, + create: emptyWizard, + }, + SampledValueControl: { + edit: emptyWizard, + create: emptyWizard, + }, + SecPerSamples: { + edit: emptyWizard, + create: emptyWizard, + }, + SCL: { + edit: emptyWizard, + create: emptyWizard, + }, + SDI: { + edit: emptyWizard, + create: emptyWizard, + }, + SDO: { + edit: emptyWizard, + create: emptyWizard, + }, + Server: { + edit: emptyWizard, + create: emptyWizard, + }, + ServerAt: { + edit: emptyWizard, + create: emptyWizard, + }, + Services: { + edit: emptyWizard, + create: emptyWizard, + }, + SetDataSetValue: { + edit: emptyWizard, + create: emptyWizard, + }, + SettingControl: { + edit: emptyWizard, + create: emptyWizard, + }, + SettingGroups: { + edit: emptyWizard, + create: emptyWizard, + }, + SGEdit: { + edit: emptyWizard, + create: emptyWizard, + }, + SmpRate: { + edit: emptyWizard, + create: emptyWizard, + }, + SMV: { + edit: emptyWizard, + create: emptyWizard, + }, + SmvOpts: { + edit: emptyWizard, + create: emptyWizard, + }, + SMVsc: { + edit: emptyWizard, + create: emptyWizard, + }, + SMVSecurity: { + edit: emptyWizard, + create: emptyWizard, + }, + SMVSettings: { + edit: emptyWizard, + create: emptyWizard, + }, + SubEquipment: { + edit: emptyWizard, + create: emptyWizard, + }, + SubFunction: { + edit: emptyWizard, + create: emptyWizard, + }, + SubNetwork: { + edit: emptyWizard, + create: emptyWizard, + }, + Subject: { + edit: emptyWizard, + create: emptyWizard, + }, + Substation: { + edit: emptyWizard, + create: emptyWizard, + }, + SupSubscription: { + edit: emptyWizard, + create: emptyWizard, + }, + TapChanger: { + edit: emptyWizard, + create: emptyWizard, + }, + Terminal: { + edit: editTerminalWizard, + create: emptyWizard, + }, + Text: { + edit: emptyWizard, + create: emptyWizard, + }, + TimerActivatedControl: { + edit: emptyWizard, + create: emptyWizard, + }, + TimeSyncProt: { + edit: emptyWizard, + create: emptyWizard, + }, + TransformerWinding: { + edit: emptyWizard, + create: emptyWizard, + }, + TrgOps: { + edit: emptyWizard, + create: emptyWizard, + }, + Val: { + edit: emptyWizard, + create: emptyWizard, + }, + ValueHandling: { + edit: emptyWizard, + create: emptyWizard, + }, + Voltage: { + edit: emptyWizard, + create: emptyWizard, + }, + VoltageLevel: { + edit: emptyWizard, + create: emptyWizard, + }, +}; diff --git a/packages/open-scd/src/editors/subscription/fcda-binding-list.ts b/packages/open-scd/src/editors/subscription/fcda-binding-list.ts new file mode 100644 index 0000000000..3ec10122cf --- /dev/null +++ b/packages/open-scd/src/editors/subscription/fcda-binding-list.ts @@ -0,0 +1,459 @@ +import { + css, + customElement, + html, + LitElement, + property, + PropertyValues, + query, + state, + TemplateResult, +} from 'lit-element'; +import { nothing, SVGTemplateResult } from 'lit-html'; +import { classMap } from 'lit-html/directives/class-map.js'; +import { translate } from 'lit-translate'; + +import '@material/mwc-icon'; +import '@material/mwc-list'; +import '@material/mwc-list/mwc-list-item'; +import '@material/mwc-list/mwc-check-list-item'; +import '@material/mwc-menu'; + +import { Icon } from '@material/mwc-icon'; +import { List } from '@material/mwc-list'; +import { Menu } from '@material/mwc-menu'; + +import { + getDescriptionAttribute, + getNameAttribute, + identity, + newWizardEvent, +} from '../../foundation.js'; +import { gooseIcon, smvIcon } from '../../icons/icons.js'; +import { wizards } from '../../wizards/wizard-library.js'; + +import { + getFcdaSubtitleValue, + getFcdaTitleValue, + newFcdaSelectEvent, + styles, + SubscriptionChangedEvent, +} from './foundation.js'; +import { getSubscribedExtRefElements } from './later-binding/foundation.js'; + +type controlTag = 'SampledValueControl' | 'GSEControl'; + +type iconLookup = Record; + +/** + * A sub element for showing all Goose/Sampled Value Controls. + * A control can be edited using the standard wizard. + * And when selecting a FCDA Element a custom event is fired, so other list can be updated. + */ +@customElement('fcda-binding-list') +export class FcdaBindingList extends LitElement { + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + @property() + controlTag!: controlTag; + @property() + includeLaterBinding!: boolean; + + // The selected Elements when a FCDA Line is clicked. + @state() + private selectedControlElement: Element | undefined; + @state() + private selectedFcdaElement: Element | undefined; + @state() + private extRefCounters = new Map(); + + @property({ + type: Boolean, + hasChanged() { + return false; + }, + }) + get hideSubscribed(): boolean { + return ( + localStorage.getItem( + `fcda-binding-list-${ + this.includeLaterBinding ? 'later-binding' : 'data-binding' + }-${this.controlTag}$hideSubscribed` + ) === 'true' ?? false + ); + } + + set hideSubscribed(value: boolean) { + const oldValue = this.hideSubscribed; + localStorage.setItem( + `fcda-binding-list-${ + this.includeLaterBinding ? 'later-binding' : 'data-binding' + }-${this.controlTag}$hideSubscribed`, + `${value}` + ); + this.requestUpdate('hideSubscribed', oldValue); + } + + @property({ + type: Boolean, + hasChanged() { + return false; + }, + }) + get hideNotSubscribed(): boolean { + return ( + localStorage.getItem( + `fcda-binding-list-${ + this.includeLaterBinding ? 'later-binding' : 'data-binding' + }-${this.controlTag}$hideNotSubscribed` + ) === 'true' ?? false + ); + } + + set hideNotSubscribed(value: boolean) { + const oldValue = this.hideNotSubscribed; + localStorage.setItem( + `fcda-binding-list-${ + this.includeLaterBinding ? 'later-binding' : 'data-binding' + }-${this.controlTag}$hideNotSubscribed`, + `${value}` + ); + this.requestUpdate('hideNotSubscribed', oldValue); + } + + @query('.actions-menu') actionsMenu!: Menu; + @query('.actions-menu-icon') actionsMenuIcon!: Icon; + @query('.control-block-list') controlBlockList!: List; + + private iconControlLookup: iconLookup = { + SampledValueControl: smvIcon, + GSEControl: gooseIcon, + }; + + constructor() { + super(); + + this.resetSelection = this.resetSelection.bind(this); + parent.addEventListener('open-doc', this.resetSelection); + + const parentDiv = this.closest('.container'); + if (parentDiv) { + this.resetExtRefCount = this.resetExtRefCount.bind(this); + parentDiv.addEventListener('subscription-changed', this.resetExtRefCount); + } + } + + private getControlElements(): Element[] { + if (this.doc) { + return Array.from(this.doc.querySelectorAll(`LN0 > ${this.controlTag}`)); + } + return []; + } + + private getFcdaElements(controlElement: Element): Element[] { + const lnElement = controlElement.parentElement; + if (lnElement) { + return Array.from( + lnElement.querySelectorAll( + `:scope > DataSet[name=${controlElement.getAttribute( + 'datSet' + )}] > FCDA` + ) + ); + } + return []; + } + + private resetExtRefCount(event: SubscriptionChangedEvent): void { + if (event.detail.control && event.detail.fcda) { + const controlBlockFcdaId = `${identity(event.detail.control)} ${identity( + event.detail.fcda + )}`; + this.extRefCounters.delete(controlBlockFcdaId); + } + } + + private getExtRefCount( + fcdaElement: Element, + controlElement: Element + ): number { + const controlBlockFcdaId = `${identity(controlElement)} ${identity( + fcdaElement + )}`; + if (!this.extRefCounters.has(controlBlockFcdaId)) { + const extRefCount = getSubscribedExtRefElements( + this.doc.getRootNode(), + this.controlTag, + fcdaElement, + controlElement!, + this.includeLaterBinding + ).length; + this.extRefCounters.set(controlBlockFcdaId, extRefCount); + } + return this.extRefCounters.get(controlBlockFcdaId); + } + + private openEditWizard(controlElement: Element): void { + const wizard = wizards[this.controlTag].edit(controlElement); + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + + private resetSelection(): void { + this.selectedControlElement = undefined; + this.selectedFcdaElement = undefined; + } + + private onFcdaSelect(controlElement: Element, fcdaElement: Element) { + this.resetSelection(); + + this.selectedControlElement = controlElement; + this.selectedFcdaElement = fcdaElement; + } + + protected updated(_changedProperties: PropertyValues): void { + super.updated(_changedProperties); + + // When a new document is loaded or the selection is changed + // we will fire the FCDA Select Event. + if ( + _changedProperties.has('doc') || + _changedProperties.has('selectedControlElement') || + _changedProperties.has('selectedFcdaElement') + ) { + this.dispatchEvent( + newFcdaSelectEvent( + this.selectedControlElement, + this.selectedFcdaElement + ) + ); + } + + // When a new document is loaded we will reset the Map to clear old entries. + if (_changedProperties.has('doc')) { + this.extRefCounters = new Map(); + } + } + + renderFCDA(controlElement: Element, fcdaElement: Element): TemplateResult { + const fcdaCount = this.getExtRefCount(fcdaElement, controlElement); + + const filterClasses = { + subitem: true, + 'show-subscribed': fcdaCount !== 0, + 'show-not-subscribed': fcdaCount === 0, + }; + + return html` this.onFcdaSelect(controlElement, fcdaElement)} + value="${identity(controlElement)} + ${identity(fcdaElement)}" + > + ${getFcdaTitleValue(fcdaElement)} + ${getFcdaSubtitleValue(fcdaElement)} + subdirectory_arrow_right + ${fcdaCount !== 0 ? html`${fcdaCount}` : nothing} + `; + } + + updateBaseFilterState(): void { + !this.hideSubscribed + ? this.controlBlockList!.classList.add('show-subscribed') + : this.controlBlockList!.classList.remove('show-subscribed'); + !this.hideNotSubscribed + ? this.controlBlockList!.classList.add('show-not-subscribed') + : this.controlBlockList!.classList.remove('show-not-subscribed'); + } + + protected firstUpdated(): void { + this.actionsMenu.anchor = this.actionsMenuIcon; + + this.actionsMenu.addEventListener('closed', () => { + this.hideSubscribed = !(>this.actionsMenu.index).has(0); + this.hideNotSubscribed = !(>this.actionsMenu.index).has(1); + this.updateBaseFilterState(); + }); + + this.updateBaseFilterState(); + } + + renderTitle(): TemplateResult { + const menuClasses = { + 'filter-off': this.hideSubscribed || this.hideNotSubscribed, + }; + return html`

    + ${translate(`subscription.${this.controlTag}.controlBlockList.title`)} + { + if (!this.actionsMenu.open) this.actionsMenu.show(); + else this.actionsMenu.close(); + }} + > + + + ${translate('subscription.subscriber.subscribed')} + + + ${translate('subscription.subscriber.notSubscribed')} + + +

    `; + } + + renderControls(controlElements: Element[]): TemplateResult { + return html` + ${controlElements + .filter(controlElement => this.getFcdaElements(controlElement).length) + .map(controlElement => { + const fcdaElements = this.getFcdaElements(controlElement); + const showSubscribed = fcdaElements.some( + fcda => this.getExtRefCount(fcda, controlElement) !== 0 + ); + const showNotSubscribed = fcdaElements.some( + fcda => this.getExtRefCount(fcda, controlElement) === 0 + ); + + const filterClasses = { + control: true, + 'show-subscribed': showSubscribed, + 'show-not-subscribed': showNotSubscribed, + }; + + return html` + + this.openEditWizard(controlElement)} + > + ${getNameAttribute(controlElement)} + ${getDescriptionAttribute(controlElement) + ? html`${getDescriptionAttribute(controlElement)}` + : nothing} + ${identity(controlElement)} + ${this.iconControlLookup[this.controlTag]} + +
  • + ${fcdaElements.map(fcdaElement => + this.renderFCDA(controlElement, fcdaElement) + )} + `; + })} +
    `; + } + + render(): TemplateResult { + const controlElements = this.getControlElements(); + return html`
    + ${this.renderTitle()} + ${controlElements + ? this.renderControls(controlElements) + : html`

    ${translate('subscription.subscriber.notSubscribed')}

    `} +
    `; + } + + static styles = css` + ${styles} + + mwc-list-item.hidden[noninteractive] + li[divider] { + display: none; + } + + mwc-list-item { + --mdc-list-item-meta-size: 48px; + } + + section { + position: relative; + } + + .actions-menu-icon { + float: right; + } + + .actions-menu-icon.filter-off { + color: var(--secondary); + background-color: var(--mdc-theme-background); + } + + /* Filtering rules for control blocks end up implementing logic to allow + very fast CSS response. The following rules appear to be minimal but can be + hard to understand intuitively for the multiple conditions. If modifying, + it is suggested to create a truth-table to check for side-effects */ + + /* remove all control blocks if no filters */ + filtered-list.control-block-list:not(.show-subscribed, .show-not-subscribed) + mwc-list-item { + display: none; + } + + /* remove control blocks taking care to respect multiple conditions */ + filtered-list.control-block-list.show-not-subscribed:not(.show-subscribed) + mwc-list-item.control.show-subscribed:not(.show-not-subscribed) { + display: none; + } + + filtered-list.control-block-list.show-subscribed:not(.show-not-subscribed) + mwc-list-item.control.show-not-subscribed:not(.show-subscribed) { + display: none; + } + + /* remove fcdas if not part of filter */ + filtered-list.control-block-list:not(.show-not-subscribed) + mwc-list-item.subitem.show-not-subscribed { + display: none; + } + + filtered-list.control-block-list:not(.show-subscribed) + mwc-list-item.subitem.show-subscribed { + display: none; + } + + .interactive { + pointer-events: all; + } + + .subitem { + padding-left: var(--mdc-list-side-padding, 16px); + } + `; +} diff --git a/packages/open-scd/src/editors/subscription/foundation.ts b/packages/open-scd/src/editors/subscription/foundation.ts new file mode 100644 index 0000000000..8df872cf23 --- /dev/null +++ b/packages/open-scd/src/editors/subscription/foundation.ts @@ -0,0 +1,999 @@ +import { css, LitElement, query } from 'lit-element'; + +import { + cloneElement, + compareNames, + Create, + createElement, + Delete, + getSclSchemaVersion, + isPublic, + minAvailableLogicalNodeInstance, +} from '../../foundation.js'; +import { getFcdaReferences } from '../../foundation/ied.js'; +import { SCL_NAMESPACE } from '../../schemas.js'; + +export enum View { + PUBLISHER, + SUBSCRIBER, +} + +/** + * Enumeration stating the Subscribe status of a IED to a GOOSE or Sampled Value. + */ +export enum SubscribeStatus { + Full, + Partial, + None, +} + +export interface ViewDetail { + view: View; +} +export type ViewEvent = CustomEvent; +export function newViewEvent( + view: View, + eventInitDict?: CustomEventInit +): ViewEvent { + return new CustomEvent('view', { + bubbles: true, + composed: true, + ...eventInitDict, + detail: { view, ...eventInitDict?.detail }, + }); +} + +export interface IEDSelectDetail { + ied: Element | undefined; +} +export type IEDSelectEvent = CustomEvent; +export function newIEDSelectEvent( + ied: Element | undefined, + eventInitDict?: CustomEventInit +): IEDSelectEvent { + return new CustomEvent('ied-select', { + bubbles: true, + composed: true, + ...eventInitDict, + detail: { ied, ...eventInitDict?.detail }, + }); +} + +export interface FcdaSelectDetail { + control: Element | undefined; + fcda: Element | undefined; +} +export type FcdaSelectEvent = CustomEvent; +export function newFcdaSelectEvent( + control: Element | undefined, + fcda: Element | undefined, + eventInitDict?: CustomEventInit +): FcdaSelectEvent { + return new CustomEvent('fcda-select', { + bubbles: true, + composed: true, + ...eventInitDict, + detail: { control, fcda, ...eventInitDict?.detail }, + }); +} + +export interface SubscriptionChangedDetail { + control: Element | undefined; + fcda: Element | undefined; +} +export type SubscriptionChangedEvent = CustomEvent; +export function newSubscriptionChangedEvent( + control: Element | undefined, + fcda: Element | undefined, + eventInitDict?: CustomEventInit +): SubscriptionChangedEvent { + return new CustomEvent('subscription-changed', { + bubbles: true, + composed: true, + ...eventInitDict, + detail: { control, fcda, ...eventInitDict?.detail }, + }); +} + +export function getFcdaTitleValue(fcdaElement: Element): string { + return `${fcdaElement.getAttribute('doName')}${ + fcdaElement.hasAttribute('doName') && fcdaElement.hasAttribute('daName') + ? `.` + : `` + }${fcdaElement.getAttribute('daName')}`; +} + +export function getFcdaSubtitleValue(fcdaElement: Element): string { + return `${fcdaElement.getAttribute('ldInst')} ${ + fcdaElement.hasAttribute('ldInst') ? `/` : '' + }${ + fcdaElement.getAttribute('prefix') + ? ` ${fcdaElement.getAttribute('prefix')}` + : '' + } ${fcdaElement.getAttribute('lnClass')} ${fcdaElement.getAttribute( + 'lnInst' + )}`; +} + +export function existExtRef( + parentInputs: Element, + fcda: Element, + control: Element | undefined +): boolean { + return !!getExtRef(parentInputs, fcda, control); +} + +export function getExtRef( + parentInputs: Element, + fcda: Element, + control: Element | undefined +): Element | undefined { + function createCriteria(attributeName: string, value: string | null): string { + if (value) { + return `[${attributeName}="${value}"]`; + } + return ''; + } + + const iedName = fcda.closest('IED')?.getAttribute('name'); + if (!iedName) { + return undefined; + } + + let controlCriteria = ''; + if (control && getSclSchemaVersion(fcda.ownerDocument) !== '2003') { + controlCriteria = `[serviceType="${serviceTypes[control.tagName]!}"]`; + controlCriteria += createCriteria( + 'srcLDInst', + control.closest('LDevice')?.getAttribute('inst') ?? null + ); + controlCriteria += createCriteria( + 'srcLNClass', + control.closest('LN0,LN')?.getAttribute('lnClass') ?? null + ); + controlCriteria += createCriteria( + 'srcLNInst', + control.closest('LN0,LN')?.getAttribute('inst') ?? null + ); + controlCriteria += createCriteria( + 'srcCBName', + control.getAttribute('name') ?? null + ); + } + + return Array.from( + parentInputs.querySelectorAll( + `ExtRef[iedName="${iedName}"]${getFcdaReferences(fcda)}${controlCriteria}` + ) + ).find(extRefElement => !extRefElement.hasAttribute('intAddr')); +} + +export function canRemoveSubscriptionSupervision( + subscribedExtRef: Element +): boolean { + const [srcCBName, srcLDInst, srcLNClass, iedName, srcPrefix, srcLNInst] = [ + 'srcCBName', + 'srcLDInst', + 'srcLNClass', + 'iedName', + 'srcPrefix', + 'srcLNInst', + ].map(attr => subscribedExtRef.getAttribute(attr)); + return !Array.from( + subscribedExtRef.closest('IED')?.getElementsByTagName('ExtRef') ?? [] + ) + .filter(isPublic) + .some( + extRef => + (extRef.getAttribute('srcCBName') ?? '') === (srcCBName ?? '') && + (extRef.getAttribute('srcLDInst') ?? '') === (srcLDInst ?? '') && + (extRef.getAttribute('srcLNClass') ?? '') === (srcLNClass ?? '') && + (extRef.getAttribute('iedName') ?? '') === (iedName ?? '') && + (extRef.getAttribute('srcPrefix') ?? '') === (srcPrefix ?? '') && + (extRef.getAttribute('srcLNInst') ?? '') === (srcLNInst ?? '') && + extRef !== subscribedExtRef + ); +} + +/** + * Searches for first instantiated LGOS/LSVS LN for presence of DOI>DAI[valKind=Conf/RO][valImport=true] + * given a supervision type and if necessary then searches DataTypeTemplates for + * DOType>DA[valKind=Conf/RO][valImport=true] to determine if modifications to supervision are allowed. + * @param ied - SCL IED element. + * @param supervisionType - either 'LGOS' or 'LSVS' supervision LN classes. + * @returns boolean indicating if subscriptions are allowed. + */ +function isSupervisionModificationAllowed( + ied: Element, + supervisionType: string +): boolean { + const firstSupervisionLN = ied.querySelector( + `LN[lnClass="${supervisionType}"]` + ); + + // no supervision logical nodes => no new supervision possible + if (firstSupervisionLN === null) return false; + + // check if allowed to modify based on first instance properties + const supervisionName = supervisionType === 'LGOS' ? 'GoCBRef' : 'SvCBRef'; + const instValKind = firstSupervisionLN! + .querySelector(`DOI[name="${supervisionName}"]>DAI[name="setSrcRef"]`) + ?.getAttribute('valKind'); + const instValImport = firstSupervisionLN! + .querySelector(`DOI[name="${supervisionName}"]>DAI[name="setSrcRef"]`) + ?.getAttribute('valImport'); + + if ( + (instValKind === 'RO' || instValKind === 'Conf') && + instValImport === 'true' + ) + return true; + + // check if allowed to modify based on DataTypeTemplates for first instance + const rootNode = firstSupervisionLN?.ownerDocument; + const lNodeType = firstSupervisionLN.getAttribute('lnType'); + const lnClass = firstSupervisionLN.getAttribute('lnClass'); + const dObj = rootNode.querySelector( + `DataTypeTemplates > LNodeType[id="${lNodeType}"][lnClass="${lnClass}"] > DO[name="${ + lnClass === 'LGOS' ? 'GoCBRef' : 'SvCBRef' + }"]` + ); + if (dObj) { + const dORef = dObj.getAttribute('type'); + const daObj = rootNode.querySelector( + `DataTypeTemplates > DOType[id="${dORef}"] > DA[name="setSrcRef"]` + ); + if (daObj) { + return ( + (daObj.getAttribute('valKind') === 'Conf' || + daObj.getAttribute('valKind') === 'RO') && + daObj.getAttribute('valImport') === 'true' + ); + } + } + // definition missing + return false; +} + +/** + * Returns an array with a single Create action to create a new + * supervision element for the given GOOSE/SMV message and subscriber IED. + * + * @param controlBlock The GOOSE or SMV message element + * @param subscriberIED The subscriber IED + * @returns an empty array if instantiation is not possible or an array with a single Create action + */ +export function instantiateSubscriptionSupervision( + controlBlock: Element | undefined, + subscriberIED: Element | undefined +): Create[] { + const supervisionType = + controlBlock?.tagName === 'GSEControl' ? 'LGOS' : 'LSVS'; + if ( + !controlBlock || + !subscriberIED || + !isSupervisionAllowed(controlBlock, subscriberIED, supervisionType) + ) + return []; + const availableLN = findOrCreateAvailableLNInst( + controlBlock, + subscriberIED, + supervisionType + ); + if ( + !availableLN || + !isSupervisionModificationAllowed(subscriberIED, supervisionType) + ) + return []; + + const actions: Create[] = []; + // If creating new LN element + if (!availableLN.parentElement) { + const parent = subscriberIED.querySelector( + `LN[lnClass="${supervisionType}"]` + )?.parentElement; + if (parent) { + // use Create Action for supervision LN + actions.push({ + new: { + parent: parent, + element: availableLN, + reference: parent!.querySelector( + `LN[lnClass="${supervisionType}"]:last-child` + )?.nextElementSibling, + }, + }); + } + } + + // Create child elements + const supervisionName = supervisionType === 'LGOS' ? 'GoCBRef' : 'SvCBRef'; + + let doiElement = availableLN.querySelector(`DOI[name="${supervisionName}"]`); + if (!doiElement) { + doiElement = subscriberIED.ownerDocument.createElementNS( + SCL_NAMESPACE, + 'DOI' + ); + doiElement.setAttribute('name', supervisionName); + actions.push({ + new: { + parent: availableLN!, + element: doiElement, + }, + }); + } + + let daiElement = availableLN.querySelector( + `DOI[name="${supervisionName}"]>DAI[name="setSrcRef"]` + ); + if (!daiElement) { + daiElement = subscriberIED.ownerDocument.createElementNS( + SCL_NAMESPACE, + 'DAI' + ); + const srcValRef = subscriberIED.querySelector( + `LN[lnClass="${supervisionType}"]>DOI[name="${supervisionName}"]>DAI[name="setSrcRef"]` + ); + daiElement.setAttribute('name', 'setSrcRef'); + + // transfer valKind and valImport from first supervision instance if present + if (srcValRef?.hasAttribute('valKind')) + daiElement.setAttribute('valKind', srcValRef.getAttribute('valKind')!); + if (srcValRef?.hasAttribute('valImport')) + daiElement.setAttribute( + 'valImport', + srcValRef.getAttribute('valImport')! + ); + actions.push({ + new: { + parent: doiElement!, + element: daiElement, + }, + }); + } + + let valElement = availableLN.querySelector(`Val`); + if (!valElement) { + valElement = subscriberIED.ownerDocument.createElementNS( + SCL_NAMESPACE, + 'Val' + ); + } + valElement.textContent = controlBlockReference(controlBlock); + actions.push({ + new: { + parent: daiElement!, + element: valElement, + }, + }); + + return actions; +} + +/** + * Return Val elements within an LGOS/LSVS instance for a particular IED and control block type. + * @param ied - IED SCL element. + * @param cbTagName - Either GSEControl or (defaults to) SampledValueControl. + * @param firstOnly - If true, return the first element found + * @returns an Element array of Val SCL elements within an LGOS/LSVS node. + */ +export function getSupervisionCbRefs( + ied: Element, + cbTagName: string +): Element[]; +export function getSupervisionCbRefs( + ied: Element, + cbTagName: string, + firstOnly: boolean +): Element | null; +export function getSupervisionCbRefs( + ied: Element, + cbTagName: string, + firstOnly?: boolean +): Element[] | Element | null { + const supervisionType = cbTagName === 'GSEControl' ? 'LGOS' : 'LSVS'; + const supervisionName = supervisionType === 'LGOS' ? 'GoCBRef' : 'SvCBRef'; + const selectorString = `LN[lnClass="${supervisionType}"]>DOI[name="${supervisionName}"]>DAI[name="setSrcRef"]>Val,LN0[lnClass="${supervisionType}"]>DOI[name="${supervisionName}"]>DAI[name="setSrcRef"]>Val`; + return firstOnly + ? ied.querySelector(selectorString) + : Array.from(ied.querySelectorAll(selectorString)); +} + +/** + * Return an array with a single Delete action to delete the supervision element + * for the given GOOSE/SMV message and subscriber IED. + * + * @param controlBlock The GOOSE or SMV message element + * @param subscriberIED The subscriber IED + * @returns an empty array if removing the supervision is not possible or an array + * with a single Delete action that removes the LN if it was created in OpenSCD + * or only the supervision structure DOI/DAI/Val if it was created by the user. + */ +export function removeSubscriptionSupervision( + controlBlock: Element | undefined, + subscriberIED: Element | undefined +): Delete[] { + if (!controlBlock || !subscriberIED) return []; + const valElement = getSupervisionCbRefs( + subscriberIED, + controlBlock.tagName + ).find(val => val.textContent == controlBlockReference(controlBlock)); + if (!valElement) return []; + const lnElement = valElement.closest('LN0, LN'); + if (!lnElement || !lnElement.parentElement) return []; + // Check if that one has been created by OpenSCD (private section exists) + const isOpenScdCreated = lnElement.querySelector( + 'Private[type="OpenSCD.create"]' + ); + return isOpenScdCreated + ? [ + { + old: { + parent: lnElement.parentElement, + element: lnElement, + }, + }, + ] + : [ + { + old: { + parent: lnElement, + element: valElement.closest('DOI')!, + }, + }, + ]; +} + +/** + * Checks if the given combination of GOOSE/SMV message and subscriber IED + * allows for subscription supervision. + * @param controlBlock The GOOSE or SMV message element + * @param subscriberIED The subscriber IED + * @param supervisionType LSVS or LGOS + * @returns true if both controlBlock and subscriberIED meet the requirements for + * setting up a supervision for the specified supervision type or false if they don't + */ +function isSupervisionAllowed( + controlBlock: Element, + subscriberIED: Element, + supervisionType: string +): boolean { + if (getSclSchemaVersion(subscriberIED.ownerDocument) === '2003') return false; + if (subscriberIED.querySelector(`LN[lnClass="${supervisionType}"]`) === null) + return false; + if ( + getSupervisionCbRefs(subscriberIED, controlBlock.tagName).find( + val => val.textContent == controlBlockReference(controlBlock) + ) + ) + return false; + if ( + maxSupervisions(subscriberIED, controlBlock) <= + instantiatedSupervisionsCount(subscriberIED, controlBlock) + ) + return false; + + return true; +} + +/** Returns an new or existing LN instance available for supervision instantiation + * + * @param controlBlock The GOOSE or SMV message element + * @param subscriberIED The subscriber IED + * @returns The LN instance or null if no LN instance could be found or created + */ +export function findOrCreateAvailableLNInst( + controlBlock: Element, + subscriberIED: Element, + supervisionType: string +): Element | null { + let availableLN = Array.from( + subscriberIED.querySelectorAll(`LN[lnClass="${supervisionType}"]`) + ).find(ln => { + const supervisionName = supervisionType === 'LGOS' ? 'GoCBRef' : 'SvCBRef'; + return ( + ln.querySelector( + `DOI[name="${supervisionName}"]>DAI[name="setSrcRef"]>Val` + ) === null || + ln.querySelector( + `DOI[name="${supervisionName}"]>DAI[name="setSrcRef"]>Val` + )?.textContent === '' + ); + }); + if (!availableLN) { + availableLN = subscriberIED.ownerDocument.createElementNS( + SCL_NAMESPACE, + 'LN' + ); + const openScdTag = subscriberIED.ownerDocument.createElementNS( + SCL_NAMESPACE, + 'Private' + ); + openScdTag.setAttribute('type', 'OpenSCD.create'); + availableLN.appendChild(openScdTag); + availableLN.setAttribute('lnClass', supervisionType); + const instantiatedSiblings = getSupervisionCbRefs( + subscriberIED, + controlBlock.tagName, + true + )?.closest('LN'); + + if (!instantiatedSiblings) return null; + availableLN.setAttribute( + 'lnType', + instantiatedSiblings?.getAttribute('lnType') ?? '' + ); + } + + /* Before we return, we make sure that LN's inst is unique, non-empty + and also the minimum inst as the minimum of all available in the IED */ + const inst = availableLN.getAttribute('inst') ?? ''; + if (inst === '') { + const instNumber = minAvailableLogicalNodeInstance( + Array.from( + subscriberIED.querySelectorAll(`LN[lnClass="${supervisionType}"]`) + ) + ); + if (!instNumber) return null; + availableLN.setAttribute('inst', instNumber); + } + return availableLN; +} + +/** + * Find the first ExtRef SCL element given a control and a subscribing IED + * + * @param publishedControlBlock - the control block SCL element in the publishing IED. + * @param subscribingIed - the subscribing IED SCL element. + * @returns The first ExtRef element associated with the subscribing IED and published control block. + */ +export function getFirstSubscribedExtRef( + publishedControlBlock: Element, + subscribingIed: Element +): Element | null { + const publishingIed = publishedControlBlock.closest('LN,LN0')!; + const dataSet = publishingIed.querySelector( + `DataSet[name="${publishedControlBlock.getAttribute('datSet')}"]` + ); + let extRef: Element | undefined = undefined; + Array.from( + subscribingIed?.querySelectorAll('LN0 > Inputs, LN > Inputs') + ).some(inputs => { + Array.from(dataSet!.querySelectorAll('FCDA')).some(fcda => { + const anExtRef = getExtRef(inputs, fcda, publishedControlBlock); + if (anExtRef) { + extRef = anExtRef; + return true; + } + return false; + }); + return extRef !== undefined; + }); + return extRef !== undefined ? extRef : null; +} + +/** Returns the subscriber's supervision LN for a given control block and extRef element + * + * @param extRef - The extRef SCL element in the subscribing IED. + * @returns The supervision LN instance or null if not found + */ +export function getExistingSupervision(extRef: Element | null): Element | null { + if (extRef === null) return null; + + const extRefValues = ['iedName', 'serviceType', 'srcPrefix', 'srcCBName']; + const [srcIedName, serviceType, srcPrefix, srcCBName] = extRefValues.map( + attr => extRef.getAttribute(attr) ?? '' + ); + + const supervisionType = serviceType === 'GOOSE' ? 'LGOS' : 'LSVS'; + const refSelector = + supervisionType === 'LGOS' ? 'DOI[name="GoCBRef"]' : 'DOI[name="SvCBRef"]'; + + const srcLDInst = + extRef.getAttribute('srcLDInst') ?? extRef.getAttribute('ldInst'); + const srcLNClass = extRef.getAttribute('srcLNClass') ?? 'LLN0'; + + const cbReference = `${srcIedName}${srcPrefix}${srcLDInst}/${srcLNClass}.${srcCBName}`; + const iedName = extRef.closest('IED')?.getAttribute('name'); + + const candidates = Array.from( + extRef.ownerDocument + .querySelector(`IED[name="${iedName}"]`)! + .querySelectorAll( + `LN[lnClass="${supervisionType}"]>${refSelector}>DAI[name="setSrcRef"]>Val` + ) + ).find(val => val.textContent === cbReference); + + return candidates !== undefined ? candidates.closest('LN')! : null; +} + +/** + * Counts the number of LN instances with proper supervision for the given control block set up. + * + * @param subscriberIED The subscriber IED + * @param controlBlock The GOOSE or SMV message element + * @returns The number of LN instances with a supervision set up + */ +export function instantiatedSupervisionsCount( + subscriberIED: Element, + controlBlock: Element +): number { + const instantiatedValues = getSupervisionCbRefs( + subscriberIED, + controlBlock.tagName + ).filter(val => val.textContent !== ''); + return instantiatedValues.length; +} + +/** + * Counts the max number of LN instances with supervision allowed for + * the given control block's type of message. + * + * @param subscriberIED The subscriber IED + * @param controlBlock The GOOSE or SMV message element + * @returns The max number of LN instances with supervision allowed + */ +export function maxSupervisions( + subscriberIED: Element, + controlBlock: Element +): number { + const maxAttr = controlBlock.tagName === 'GSEControl' ? 'maxGo' : 'maxSv'; + const maxValues = parseInt( + subscriberIED + .querySelector('Services>SupSubscription') + ?.getAttribute(maxAttr) ?? '0', + 10 + ); + return isNaN(maxValues) ? 0 : maxValues; +} + +/** + * Creates a string pointer to the control block element. + * + * @param controlBlock The GOOSE or SMV message element + * @returns null if the control block is undefined or a string pointer to the control block element + */ +export function controlBlockReference( + controlBlock: Element | undefined +): string | null { + if (!controlBlock) return null; + const anyLn = controlBlock.closest('LN,LN0'); + const prefix = anyLn?.getAttribute('prefix') ?? ''; + const lnClass = anyLn?.getAttribute('lnClass'); + const lnInst = anyLn?.getAttribute('inst') ?? ''; + const ldInst = controlBlock.closest('LDevice')?.getAttribute('inst'); + const iedName = controlBlock.closest('IED')?.getAttribute('name'); + const cbName = controlBlock.getAttribute('name'); + if (!cbName && !iedName && !ldInst && !lnClass) return null; + return `${iedName}${ldInst}/${prefix}${lnClass}${lnInst}.${cbName}`; +} + +export function canCreateValidExtRef( + fcda: Element, + controlBlock: Element | undefined +): boolean { + const iedName = fcda.closest('IED')?.getAttribute('name'); + const [ldInst, lnClass, lnInst, doName] = [ + 'ldInst', + 'lnClass', + 'lnInst', + 'doName', + ].map(attr => fcda.getAttribute(attr)); + if (!iedName || !ldInst || !lnClass || !lnInst || !doName) { + return false; + } + + // For 2003 schema or serviceType `Poll`, the extra fields aren't needed. + if ( + getSclSchemaVersion(fcda.ownerDocument) === '2003' || + controlBlock === undefined + ) { + return true; + } + + const srcLDInst = controlBlock.closest('LDevice')?.getAttribute('inst'); + const srcLNClass = controlBlock.closest('LN0,LN')?.getAttribute('lnClass'); + const srcLNInst = controlBlock.closest('LN0,LN')?.getAttribute('inst'); + const srcCBName = controlBlock.getAttribute('name'); + + // For srcLNInst an empty string is allowed in `LN0` + return !( + !srcLDInst || + !srcLNClass || + !srcCBName || + typeof srcLNInst !== 'string' + ); +} + +export const serviceTypes: Partial> = { + ReportControl: 'Report', + GSEControl: 'GOOSE', + SampledValueControl: 'SMV', +}; + +/** + * Create a new ExtRef Element depending on the SCL Edition copy attributes from the Control Element, + * FCDA Element and related Elements. + * + * @param controlElement - `ReportControl`, `GSEControl` or `SampledValueControl` source element + * @param fcdaElement - The source data attribute element. + * @returns The new created ExtRef element, which can be added to the document. + */ +export function createExtRefElement( + controlElement: Element | undefined, + fcdaElement: Element +): Element { + const iedName = fcdaElement.closest('IED')?.getAttribute('name') ?? null; + const [ldInst, prefix, lnClass, lnInst, doName, daName] = [ + 'ldInst', + 'prefix', + 'lnClass', + 'lnInst', + 'doName', + 'daName', + ].map(attr => fcdaElement.getAttribute(attr)); + + if (getSclSchemaVersion(fcdaElement.ownerDocument) === '2003') { + // Edition 2003(1) does not define serviceType and its MCD attribute starting with src... + return createElement(fcdaElement.ownerDocument, 'ExtRef', { + iedName, + ldInst, + lnClass, + lnInst, + prefix, + doName, + daName, + }); + } + + if (!controlElement || !serviceTypes[controlElement.tagName]) { + //for invalid control block tag name assume polling + return createElement(fcdaElement.ownerDocument, 'ExtRef', { + iedName, + serviceType: 'Poll', + ldInst, + lnClass, + lnInst, + prefix, + doName, + daName, + }); + } + + // default is empty string as attributes are mandatory acc to IEC 61850-6 >Ed2 + const srcLDInst = + controlElement.closest('LDevice')?.getAttribute('inst') ?? ''; + const srcPrefix = + controlElement.closest('LN0,LN')?.getAttribute('prefix') ?? ''; + const srcLNClass = + controlElement.closest('LN0,LN')?.getAttribute('lnClass') ?? ''; + const srcLNInst = controlElement.closest('LN0,LN')?.getAttribute('inst'); + const srcCBName = controlElement.getAttribute('name') ?? ''; + + return createElement(fcdaElement.ownerDocument, 'ExtRef', { + iedName, + serviceType: serviceTypes[controlElement.tagName]!, + ldInst, + lnClass, + lnInst, + prefix, + doName, + daName, + srcLDInst, + srcPrefix, + srcLNClass, + srcLNInst: srcLNInst ? srcLNInst : null, + srcCBName, + }); +} + +/** + * Create a clone of the passed ExtRefElement and updated or set the required attributes on the cloned element + * depending on the Edition and type of Control Element. + * + * @param extRefElement - The ExtRef Element to clone and update. + * @param controlElement - `ReportControl`, `GSEControl` or `SampledValueControl` source element + * @param fcdaElement - The source data attribute element. + * @returns A cloned ExtRef Element with updated information to be used for example in a Replace Action. + */ +export function updateExtRefElement( + extRefElement: Element, + controlElement: Element | undefined, + fcdaElement: Element +): Element { + const iedName = fcdaElement.closest('IED')?.getAttribute('name') ?? null; + const [ldInst, prefix, lnClass, lnInst, doName, daName] = [ + 'ldInst', + 'prefix', + 'lnClass', + 'lnInst', + 'doName', + 'daName', + ].map(attr => fcdaElement.getAttribute(attr)); + + if (getSclSchemaVersion(fcdaElement.ownerDocument) === '2003') { + // Edition 2003(1) does not define serviceType and its MCD attribute starting with src... + return cloneElement(extRefElement, { + iedName, + serviceType: null, + ldInst, + lnClass, + lnInst, + prefix, + doName, + daName, + srcLDInst: null, + srcPrefix: null, + srcLNClass: null, + srcLNInst: null, + srcCBName: null, + }); + } + + if (!controlElement || !serviceTypes[controlElement.tagName]) { + //for invalid control block tag name assume polling + return cloneElement(extRefElement, { + iedName, + serviceType: 'Poll', + ldInst, + lnClass, + lnInst, + prefix, + doName, + daName, + srcLDInst: null, + srcPrefix: null, + srcLNClass: null, + srcLNInst: null, + srcCBName: null, + }); + } + + const srcLDInst = + controlElement.closest('LDevice')?.getAttribute('inst') ?? ''; + const srcPrefix = + controlElement.closest('LN0,LN')?.getAttribute('prefix') ?? ''; + const srcLNClass = + controlElement.closest('LN0,LN')?.getAttribute('lnClass') ?? ''; + const srcLNInst = controlElement.closest('LN0,LN')?.getAttribute('inst'); + const srcCBName = controlElement.getAttribute('name') ?? ''; + + return cloneElement(extRefElement, { + iedName, + serviceType: serviceTypes[controlElement.tagName]!, + ldInst, + lnClass, + lnInst, + prefix, + doName, + daName, + srcLDInst, + srcPrefix, + srcLNClass, + srcLNInst: srcLNInst ? srcLNInst : null, + srcCBName, + }); +} + +export function getOrderedIeds(doc: XMLDocument): Element[] { + return doc + ? Array.from(doc.querySelectorAll(':root > IED')).sort((a, b) => + compareNames(a, b) + ) + : []; +} + +/** + * An element within this list has 2 properties: + * - The element itself, either a GSEControl or an IED at this point. + * - A 'partial' property indicating if the GOOSE is fully initialized or partially. + */ +export interface ListElement { + element: Element; + partial?: boolean; +} + +export class SubscriberListContainer extends LitElement { + /** List holding all current subscribed Elements. */ + subscribedElements: ListElement[] = []; + + /** List holding all current available Elements which are not subscribed. */ + availableElements: ListElement[] = []; + + /** Current selected IED (when in Subscriber view) */ + currentSelectedIed: Element | undefined; + + /** The current used dataset for subscribing / unsubscribing */ + currentUsedDataset: Element | undefined | null; + + @query('div') subscriberWrapper!: Element; + + protected updated(): void { + if (this.subscriberWrapper) { + this.subscriberWrapper.scrollTo(0, 0); + } + } + + protected resetElements(): void { + this.subscribedElements = []; + this.availableElements = []; + } +} + +/** Common `CSS` styles used by DataTypeTemplate subeditors */ +export const styles = css` + :host(.moving) section { + opacity: 0.3; + } + + section { + background-color: var(--mdc-theme-surface); + transition: all 200ms linear; + outline-color: var(--mdc-theme-primary); + outline-style: solid; + outline-width: 0px; + opacity: 1; + } + + section:focus { + 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); + } + + section:focus-within { + outline-width: 2px; + transition: all 250ms linear; + } + + h1, + h2, + h3 { + color: var(--mdc-theme-on-surface); + font-family: 'Roboto', sans-serif; + font-weight: 300; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + margin: 0px; + line-height: 48px; + padding-left: 0.3em; + transition: background-color 150ms linear; + } + + section:focus-within > h1, + section:focus-within > h2, + section:focus-within > h3 { + color: var(--mdc-theme-surface); + background-color: var(--mdc-theme-primary); + transition: background-color 200ms linear; + } + + h1 > nav, + h2 > nav, + h3 > nav, + h1 > abbr > mwc-icon-button, + h2 > abbr > mwc-icon-button, + h3 > abbr > mwc-icon-button { + float: right; + } + + abbr[title] { + border-bottom: none !important; + cursor: inherit !important; + text-decoration: none !important; + } + + mwc-list-item[noninteractive] { + font-weight: 500; + } +`; + +declare global { + interface ElementEventMap { + ['view']: ViewEvent; + ['ied-select']: IEDSelectEvent; + ['fcda-select']: FcdaSelectEvent; + ['subscription-changed']: SubscriptionChangedEvent; + } +} diff --git a/packages/open-scd/src/editors/subscription/goose/foundation.ts b/packages/open-scd/src/editors/subscription/goose/foundation.ts new file mode 100644 index 0000000000..c833d11b93 --- /dev/null +++ b/packages/open-scd/src/editors/subscription/goose/foundation.ts @@ -0,0 +1,42 @@ +import { SubscribeStatus } from '../foundation.js'; + +export interface GOOSESelectDetail { + gseControl: Element | undefined; + dataset: Element | undefined; +} +export type GOOSESelectEvent = CustomEvent; +export function newGOOSESelectEvent( + gseControl: Element | undefined, + dataset: Element | undefined, + eventInitDict?: CustomEventInit +): GOOSESelectEvent { + return new CustomEvent('goose-select', { + bubbles: true, + composed: true, + ...eventInitDict, + detail: { gseControl, dataset, ...eventInitDict?.detail }, + }); +} + +export interface GooseSubscriptionDetail { + element: Element; + subscribeStatus: SubscribeStatus; +} +export type GooseSubscriptionEvent = CustomEvent; +export function newGooseSubscriptionEvent( + element: Element, + subscribeStatus: SubscribeStatus +): GooseSubscriptionEvent { + return new CustomEvent('goose-subscription', { + bubbles: true, + composed: true, + detail: { element, subscribeStatus }, + }); +} + +declare global { + interface ElementEventMap { + ['goose-select']: GOOSESelectEvent; + ['goose-subscription']: GooseSubscriptionEvent; + } +} diff --git a/packages/open-scd/src/editors/subscription/goose/goose-list.ts b/packages/open-scd/src/editors/subscription/goose/goose-list.ts new file mode 100644 index 0000000000..4222742160 --- /dev/null +++ b/packages/open-scd/src/editors/subscription/goose/goose-list.ts @@ -0,0 +1,147 @@ +import { + css, + customElement, + html, + LitElement, + property, + TemplateResult, +} from 'lit-element'; +import { translate } from 'lit-translate'; +import { classMap } from 'lit-html/directives/class-map'; + +import '@material/mwc-icon'; +import '@material/mwc-list/mwc-list-item'; + +import '../../../filtered-list.js'; +import { + getNameAttribute, + identity, + newWizardEvent, +} from '../../../foundation.js'; +import { newGOOSESelectEvent } from './foundation.js'; +import { gooseIcon } from '../../../icons/icons.js'; +import { wizards } from '../../../wizards/wizard-library.js'; +import { getOrderedIeds, styles } from '../foundation.js'; + +let selectedGseControl: Element | undefined; +let selectedDataSet: Element | undefined | null; + +function onOpenDocResetSelectedGooseMsg() { + selectedGseControl = undefined; + selectedDataSet = undefined; +} +addEventListener('open-doc', onOpenDocResetSelectedGooseMsg); + +/** An sub element for showing all published GOOSE messages per IED. */ +@customElement('goose-list') +export class GooseList extends LitElement { + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + private onSelect(gseControl: Element): void { + if (gseControl == selectedGseControl) return; + + const ln = gseControl.parentElement; + const dataset = ln?.querySelector( + `DataSet[name=${gseControl.getAttribute('datSet')}]` + ); + + selectedGseControl = gseControl; + selectedDataSet = dataset; + + this.dispatchEvent( + newGOOSESelectEvent(selectedGseControl, selectedDataSet!) + ); + + this.requestUpdate(); + } + + renderGoose(gseControl: Element): TemplateResult { + return html` this.onSelect(gseControl)} + graphic="large" + hasMeta + value="${identity(gseControl)}" + > + ${gooseIcon} + ${gseControl.getAttribute('name')} + this.openEditWizard(gseControl)} + > + `; + } + + private openEditWizard(gseControl: Element): void { + const wizard = wizards['GSEControl'].edit(gseControl); + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + + protected updated(): void { + this.dispatchEvent( + newGOOSESelectEvent(selectedGseControl, selectedDataSet ?? undefined) + ); + } + + protected firstUpdated(): void { + selectedGseControl = undefined; + selectedDataSet = undefined; + } + + render(): TemplateResult { + return html`
    +

    ${translate('subscription.goose.publisher.title')}

    + + ${getOrderedIeds(this.doc).map( + ied => + html` + + ${getNameAttribute(ied)} + developer_board + +
  • + ${Array.from( + ied.querySelectorAll( + ':scope > AccessPoint > Server > LDevice > LN0 > GSEControl' + ) + ) + .filter(cb => cb.hasAttribute('datSet')) + .map(control => this.renderGoose(control))} + ` + )} +
    +
    `; + } + + static styles = css` + ${styles} + + mwc-list-item { + --mdc-list-item-meta-size: 48px; + } + + mwc-icon-button.hidden { + display: none; + } + + mwc-list-item.hidden[noninteractive] + li[divider] { + display: none; + } + `; +} diff --git a/packages/open-scd/src/editors/subscription/goose/subscriber-list.ts b/packages/open-scd/src/editors/subscription/goose/subscriber-list.ts new file mode 100644 index 0000000000..7600fb1d1e --- /dev/null +++ b/packages/open-scd/src/editors/subscription/goose/subscriber-list.ts @@ -0,0 +1,495 @@ +import { + css, + customElement, + html, + property, + TemplateResult, +} from 'lit-element'; +import { nothing } from 'lit-html'; +import { get, translate } from 'lit-translate'; + +import '@material/mwc-icon'; +import '@material/mwc-list'; +import '@material/mwc-list/mwc-list-item'; + +import '../../../filtered-list.js'; +import { + ComplexAction, + Create, + createElement, + Delete, + identity, + Move, + newActionEvent, +} from '../../../foundation.js'; +import { + GOOSESelectEvent, + GooseSubscriptionEvent, + newGooseSubscriptionEvent, +} from './foundation.js'; +import { emptyInputsDeleteActions } from '../../../foundation/ied.js'; +import { + canCreateValidExtRef, + createExtRefElement, + existExtRef, + getExistingSupervision, + getExtRef, + getFirstSubscribedExtRef, + IEDSelectEvent, + instantiateSubscriptionSupervision, + ListElement, + removeSubscriptionSupervision, + styles, + SubscriberListContainer, + SubscribeStatus, + View, + ViewEvent, +} from '../foundation.js'; + +/** Defining view outside the class, which makes it persistent. */ +let view: View = View.PUBLISHER; + +/** An sub element for subscribing and unsubscribing IEDs to GOOSE messages. */ +@customElement('subscriber-list-goose') +export class SubscriberList extends SubscriberListContainer { + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + /** Current selected GOOSE message (when in GOOSE Publisher view) */ + currentSelectedGseControl: Element | undefined; + + /** The name of the IED belonging to the current selected GOOSE */ + currentGooseIedName: string | undefined | null; + + constructor() { + super(); + this.onIEDSelectEvent = this.onIEDSelectEvent.bind(this); + this.onGOOSESelectEvent = this.onGOOSESelectEvent.bind(this); + this.onGooseSubscriptionEvent = this.onGooseSubscriptionEvent.bind(this); + this.onViewChange = this.onViewChange.bind(this); + + const parentDiv = this.closest('.container'); + if (parentDiv) { + parentDiv.addEventListener('ied-select', this.onIEDSelectEvent); + parentDiv.addEventListener('goose-select', this.onGOOSESelectEvent); + parentDiv.addEventListener( + 'goose-subscription', + this.onGooseSubscriptionEvent + ); + parentDiv.addEventListener('view', this.onViewChange); + } + } + + private async onIEDSelectEvent(event: IEDSelectEvent) { + if (!event.detail.ied) return; + this.currentSelectedIed = event.detail.ied!; + + this.resetElements(); + + const subscribedInputs = this.currentSelectedIed.querySelectorAll( + `LN0 > Inputs, LN > Inputs` + ); + + Array.from(this.doc.querySelectorAll('GSEControl')) + .filter(cb => cb.hasAttribute('datSet')) + .forEach(control => { + const ied = control.closest('IED')!; + + if ( + ied.getAttribute('name') == + this.currentSelectedIed?.getAttribute('name') + ) + return; + + /** If no Inputs is available, it's automatically available. */ + if (subscribedInputs.length == 0) { + this.availableElements.push({ element: control }); + return; + } + + let numberOfLinkedExtRefs = 0; + const dataSet = ied.querySelector( + `DataSet[name="${control.getAttribute('datSet')}"]` + ); + + if (!dataSet) return; + + dataSet!.querySelectorAll('FCDA').forEach(fcda => { + subscribedInputs.forEach(inputs => { + if (getExtRef(inputs, fcda, control)) { + numberOfLinkedExtRefs++; + } + }); + }); + + if (numberOfLinkedExtRefs == 0) { + this.availableElements.push({ element: control }); + return; + } + + if (numberOfLinkedExtRefs >= dataSet!.querySelectorAll('FCDA').length) { + this.subscribedElements.push({ element: control }); + } else { + this.availableElements.push({ element: control, partial: true }); + } + }); + + this.requestUpdate(); + } + + private async onGOOSESelectEvent(event: GOOSESelectEvent) { + if (!event.detail.dataset || !event.detail.gseControl) return; + + this.currentSelectedGseControl = event.detail.gseControl; + this.currentUsedDataset = event.detail.dataset; + this.currentGooseIedName = this.currentSelectedGseControl + ?.closest('IED') + ?.getAttribute('name'); + + this.resetElements(); + + Array.from(this.doc.querySelectorAll(':root > IED')) + .filter(ied => ied.getAttribute('name') != this.currentGooseIedName) + .forEach(ied => { + const inputElements = ied.querySelectorAll(`LN0 > Inputs, LN > Inputs`); + + let numberOfLinkedExtRefs = 0; + + /** + * If no Inputs element is found, we can safely say it's not subscribed. + */ + if (!inputElements) { + this.availableElements.push({ element: ied }); + return; + } + + /** + * Count all the linked ExtRefs. + */ + this.currentUsedDataset!.querySelectorAll('FCDA').forEach(fcda => { + inputElements.forEach(inputs => { + if (getExtRef(inputs, fcda, this.currentSelectedGseControl)) { + numberOfLinkedExtRefs++; + } + }); + }); + + /** + * Make a distinction between not subscribed at all, + * partially subscribed and fully subscribed. + */ + if (numberOfLinkedExtRefs == 0) { + this.availableElements.push({ element: ied }); + return; + } + + if ( + numberOfLinkedExtRefs >= + this.currentUsedDataset!.querySelectorAll('FCDA').length + ) { + this.subscribedElements.push({ element: ied }); + } else { + this.availableElements.push({ element: ied, partial: true }); + } + }); + + this.requestUpdate(); + } + + private async onGooseSubscriptionEvent(event: GooseSubscriptionEvent) { + let iedToSubscribe = event.detail.element; + + if (view == View.SUBSCRIBER) { + const dataSetName = event.detail.element.getAttribute('datSet'); + this.currentUsedDataset = + event.detail.element.parentElement?.querySelector( + `DataSet[name="${dataSetName}"]` + ); + this.currentSelectedGseControl = event.detail.element; + this.currentGooseIedName = event.detail.element + .closest('IED') + ?.getAttribute('name'); + iedToSubscribe = this.currentSelectedIed!; + } + + switch (event.detail.subscribeStatus) { + case SubscribeStatus.Full: { + this.unsubscribe(iedToSubscribe); + break; + } + case SubscribeStatus.Partial: { + this.subscribe(iedToSubscribe); + break; + } + case SubscribeStatus.None: { + this.subscribe(iedToSubscribe); + break; + } + } + } + + private async onViewChange(event: ViewEvent) { + view = event.detail.view; + + this.currentSelectedIed = undefined; + this.currentSelectedGseControl = undefined; + + this.resetElements(); + this.requestUpdate(); + } + + private async subscribe(ied: Element): Promise { + if (!ied.querySelector('LN0')) return; + + let inputsElement = ied.querySelector('LN0 > Inputs'); + if (!inputsElement) + inputsElement = createElement(ied.ownerDocument, 'Inputs', {}); + + const complexAction: ComplexAction = { + actions: [], + title: get(`subscription.connect`), + }; + + this.currentUsedDataset!.querySelectorAll('FCDA').forEach(fcda => { + if ( + !existExtRef(inputsElement!, fcda, this.currentSelectedGseControl) && + canCreateValidExtRef(fcda, this.currentSelectedGseControl) + ) { + const extRef = createExtRefElement( + this.currentSelectedGseControl, + fcda + ); + + if (inputsElement?.parentElement) + complexAction.actions.push({ + new: { parent: inputsElement!, element: extRef }, + }); + else inputsElement?.appendChild(extRef); + } + }); + + // we need to extend the actions array with the actions for the instantiation of the LGOS + const supervisionActions = instantiateSubscriptionSupervision( + this.currentSelectedGseControl, + ied + ); + if (inputsElement.parentElement) { + complexAction.actions.concat(supervisionActions); + } else { + /** If the IED doesn't have a Inputs element, just append it to the first LN0 element. */ + const inputAction: (Create | Move)[] = [ + { + new: { parent: ied.querySelector('LN0')!, element: inputsElement }, + }, + ]; + complexAction.actions = inputAction.concat(supervisionActions); + } + this.dispatchEvent(newActionEvent(complexAction)); + } + + private async unsubscribe(ied: Element): Promise { + const actions: Delete[] = []; + ied.querySelectorAll('LN0 > Inputs, LN > Inputs').forEach(inputs => { + this.currentUsedDataset!.querySelectorAll('FCDA').forEach(fcda => { + const extRef = getExtRef(inputs, fcda, this.currentSelectedGseControl); + if (extRef) actions.push({ old: { parent: inputs, element: extRef } }); + }); + }); + + // Check if empty Input Element should also be removed. + actions.push(...emptyInputsDeleteActions(actions)); + + // we need to extend the actions array with the actions for removing the supervision + actions.push( + ...removeSubscriptionSupervision(this.currentSelectedGseControl, ied) + ); + + this.dispatchEvent( + newActionEvent({ + title: get('subscription.disconnect'), + actions: actions, + }) + ); + } + + renderSubscriber(status: SubscribeStatus, element: Element): TemplateResult { + let firstSubscribedExtRef: Element | null = null; + let supervisionNode: Element | null = null; + if (status !== SubscribeStatus.None) { + if (view === View.PUBLISHER) { + firstSubscribedExtRef = getFirstSubscribedExtRef( + this.currentSelectedGseControl!, + element + ); + supervisionNode = getExistingSupervision(firstSubscribedExtRef!); + } else { + firstSubscribedExtRef = getFirstSubscribedExtRef( + element, + this.currentSelectedIed! + ); + supervisionNode = getExistingSupervision(firstSubscribedExtRef!); + } + } + return html` { + this.dispatchEvent( + newGooseSubscriptionEvent(element, status ?? SubscribeStatus.None) + ); + }} + graphic="avatar" + ?hasMeta=${supervisionNode !== null} + > + ${view == View.PUBLISHER + ? element.getAttribute('name') + : element.getAttribute('name') + + ` (${element.closest('IED')?.getAttribute('name')})`} + ${status == SubscribeStatus.Full ? html`clear` : html`add`} + ${supervisionNode !== null + ? html`monitor_heart` + : nothing} + `; + } + + renderUnSubscribers(elements: ListElement[]): TemplateResult { + return html` + ${translate('subscription.subscriber.availableToSubscribe')} + +
  • + ${elements.length > 0 + ? elements.map(element => + this.renderSubscriber(SubscribeStatus.None, element.element) + ) + : html` + ${translate('subscription.none')} + `}`; + } + + renderPartiallySubscribers(elements: ListElement[]): TemplateResult { + return html` + ${translate('subscription.subscriber.partiallySubscribed')} + +
  • + ${elements.length > 0 + ? elements.map(element => + this.renderSubscriber(SubscribeStatus.Partial, element.element) + ) + : html` + ${translate('subscription.none')} + `}`; + } + + renderFullSubscribers(): TemplateResult { + return html` + ${translate('subscription.subscriber.subscribed')} + +
  • + ${this.subscribedElements.length > 0 + ? this.subscribedElements.map(element => + this.renderSubscriber(SubscribeStatus.Full, element.element) + ) + : html` + ${translate('subscription.none')} + `}`; + } + + renderTitle(): TemplateResult { + const gseControlName = + this.currentSelectedGseControl?.getAttribute('name') ?? undefined; + + return view == View.PUBLISHER + ? html`

    + ${translate('subscription.goose.publisher.subscriberTitle', { + selected: gseControlName + ? this.currentGooseIedName + ' > ' + gseControlName + : 'GOOSE', + })} +

    ` + : html`

    + ${translate('subscription.goose.subscriber.publisherTitle', { + selected: this.currentSelectedIed + ? this.currentSelectedIed.getAttribute('name')! + : 'IED', + })} +

    `; + } + + protected firstUpdated(): void { + this.currentSelectedIed = undefined; + } + + render(): TemplateResult { + return html` +
    + ${this.renderTitle()} + ${this.availableElements.length != 0 || + this.subscribedElements.length != 0 + ? html`
    + + ${this.renderFullSubscribers()} + ${this.renderPartiallySubscribers( + this.availableElements.filter(element => element.partial) + )} + ${this.renderUnSubscribers( + this.availableElements.filter(element => !element.partial) + )} + +
    ` + : html` + + ${ + view == View.PUBLISHER + ? translate( + 'subscription.subscriber.noControlBlockSelected' + ) + : translate('subscription.subscriber.noIedSelected') + } + + + `} +
    + `; + } + + static styles = css` + ${styles} + + .wrapper { + height: 100vh; + overflow-y: scroll; + } + `; +} diff --git a/packages/open-scd/src/editors/subscription/ied-list.ts b/packages/open-scd/src/editors/subscription/ied-list.ts new file mode 100644 index 0000000000..b5fbb6ce58 --- /dev/null +++ b/packages/open-scd/src/editors/subscription/ied-list.ts @@ -0,0 +1,74 @@ +import { + css, + customElement, + html, + LitElement, + property, + TemplateResult, +} from 'lit-element'; +import { translate } from 'lit-translate'; + +import '@material/mwc-icon'; +import '@material/mwc-list/mwc-list-item'; + +import '../../filtered-list.js'; +import { getNameAttribute } from '../../foundation.js'; +import { getOrderedIeds, newIEDSelectEvent, styles } from './foundation.js'; + +let selectedIed: Element | undefined; + +function onOpenDocResetSelectedGooseMsg() { + selectedIed = undefined; +} +addEventListener('open-doc', onOpenDocResetSelectedGooseMsg); + +@customElement('ied-list') +export class IedList extends LitElement { + @property() + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + @property({ type: String }) + serviceType?: 'goose' | 'smv'; + + private onIedSelect(element: Element): void { + selectedIed = element; + + this.dispatchEvent(newIEDSelectEvent(selectedIed)); + } + + protected updated(): void { + this.dispatchEvent(newIEDSelectEvent(selectedIed)); + } + + protected firstUpdated(): void { + selectedIed = undefined; + } + + render(): TemplateResult { + return html`
    +

    + ${translate(`subscription.${this.serviceType}.subscriber.iedListTitle`)} +

    + + ${getOrderedIeds(this.doc).map( + ied => + html` + this.onIedSelect(ied)} + graphic="icon" + > + ${getNameAttribute(ied)} + developer_board + + ` + )} + +
    `; + } + + static styles = css` + ${styles} + `; +} diff --git a/packages/open-scd/src/editors/subscription/later-binding/ext-ref-later-binding-list.ts b/packages/open-scd/src/editors/subscription/later-binding/ext-ref-later-binding-list.ts new file mode 100644 index 0000000000..3b3c0a2bae --- /dev/null +++ b/packages/open-scd/src/editors/subscription/later-binding/ext-ref-later-binding-list.ts @@ -0,0 +1,392 @@ +import { + css, + customElement, + html, + LitElement, + property, + state, + TemplateResult, +} from 'lit-element'; +import { nothing } from 'lit-html'; +import { get, translate } from 'lit-translate'; + +import { + cloneElement, + ComplexAction, + Delete, + getDescriptionAttribute, + identity, + newActionEvent, +} from '../../../foundation.js'; + +import { + getExistingSupervision, + styles, + updateExtRefElement, + serviceTypes, + instantiateSubscriptionSupervision, + removeSubscriptionSupervision, + FcdaSelectEvent, + newSubscriptionChangedEvent, + canRemoveSubscriptionSupervision, +} from '../foundation.js'; + +import { + getExtRefElements, + getSubscribedExtRefElements, + fcdaSpecification, + inputRestriction, + isSubscribed, +} from './foundation.js'; + +/** + * A sub element for showing all Ext Refs from a FCDA Element. + * The List reacts on a custom event to know which FCDA Element was selected and updated the view. + */ +@customElement('extref-later-binding-list') +export class ExtRefLaterBindingList extends LitElement { + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + @property() + controlTag!: 'SampledValueControl' | 'GSEControl'; + + @state() + currentSelectedControlElement: Element | undefined; + @state() + currentSelectedFcdaElement: Element | undefined; + @state() + currentIedElement: Element | undefined; + + serviceTypeLookup = { + GSEControl: 'GOOSE', + SampledValueControl: 'SMV', + }; + + constructor() { + super(); + + const parentDiv = this.closest('.container'); + if (parentDiv) { + this.onFcdaSelectEvent = this.onFcdaSelectEvent.bind(this); + parentDiv.addEventListener('fcda-select', this.onFcdaSelectEvent); + } + } + + private async onFcdaSelectEvent(event: FcdaSelectEvent) { + this.currentSelectedControlElement = event.detail.control; + this.currentSelectedFcdaElement = event.detail.fcda; + + // Retrieve the IED Element to which the FCDA belongs. + // These ExtRef Elements will be excluded. + this.currentIedElement = this.currentSelectedFcdaElement + ? this.currentSelectedFcdaElement.closest('IED') ?? undefined + : undefined; + } + + /** + * Check data consistency of source `FCDA` and sink `ExtRef` based on + * `ExtRef`'s `pLN`, `pDO`, `pDA` and `pServT` attributes. + * Consistent means `CDC` and `bType` of both ExtRef and FCDA is equal. + * In case + * - `pLN`, `pDO`, `pDA` or `pServT` attributes are not present, allow subscribing + * - no CDC or bType can be extracted, do not allow subscribing + * + * @param extRef - The `ExtRef` Element to check against + */ + private unsupportedExtRefElement(extRef: Element): boolean { + // Vendor does not provide data for the check + if ( + !extRef.hasAttribute('pLN') || + !extRef.hasAttribute('pDO') || + !extRef.hasAttribute('pDA') || + !extRef.hasAttribute('pServT') + ) + return false; + + // Not ready for any kind of subscription + if (!this.currentSelectedFcdaElement) return true; + + const fcda = fcdaSpecification(this.currentSelectedFcdaElement); + const input = inputRestriction(extRef); + + if (fcda.cdc === null && input.cdc === null) return true; + if (fcda.bType === null && input.bType === null) return true; + if ( + serviceTypes[this.currentSelectedControlElement?.tagName ?? ''] !== + extRef.getAttribute('pServT') + ) + return true; + + return fcda.cdc !== input.cdc || fcda.bType !== input.bType; + } + + /** + * Unsubscribing means removing a list of attributes from the ExtRef Element. + * + * @param extRefElement - The Ext Ref Element to clean from attributes. + */ + private unsubscribe(extRefElement: Element): void { + if ( + !this.currentIedElement || + !this.currentSelectedFcdaElement || + !this.currentSelectedControlElement! + ) { + return; + } + const clonedExtRefElement = cloneElement(extRefElement, { + iedName: null, + ldInst: null, + prefix: null, + lnClass: null, + lnInst: null, + doName: null, + daName: null, + serviceType: null, + srcLDInst: null, + srcPrefix: null, + srcLNClass: null, + srcLNInst: null, + srcCBName: null, + }); + + const replaceAction = { + old: { element: extRefElement }, + new: { element: clonedExtRefElement }, + }; + + const subscriberIed = extRefElement.closest('IED') || undefined; + const removeSubscriptionActions: Delete[] = []; + if (canRemoveSubscriptionSupervision(extRefElement)) + removeSubscriptionActions.push( + ...removeSubscriptionSupervision( + this.currentSelectedControlElement, + subscriberIed + ) + ); + + this.dispatchEvent( + newActionEvent({ + title: get(`subscription.disconnect`), + actions: [replaceAction, ...removeSubscriptionActions], + }) + ); + this.dispatchEvent( + newSubscriptionChangedEvent( + this.currentSelectedControlElement, + this.currentSelectedFcdaElement + ) + ); + } + + /** + * Subscribing means copying a list of attributes from the FCDA Element (and others) to the ExtRef Element. + * + * @param extRefElement - The Ext Ref Element to add the attributes to. + */ + private subscribe(extRefElement: Element): void { + if ( + !this.currentIedElement || + !this.currentSelectedFcdaElement || + !this.currentSelectedControlElement! + ) { + return; + } + + const complexAction: ComplexAction = { + actions: [], + title: get(`subscription.connect`), + }; + + const replaceAction = { + old: { element: extRefElement }, + new: { + element: updateExtRefElement( + extRefElement, + this.currentSelectedControlElement, + this.currentSelectedFcdaElement + ), + }, + }; + complexAction.actions.push(replaceAction); + + const subscriberIed = extRefElement.closest('IED') || undefined; + + complexAction.actions.push( + ...instantiateSubscriptionSupervision( + this.currentSelectedControlElement, + subscriberIed + ) + ); + + this.dispatchEvent(newActionEvent(complexAction)); + this.dispatchEvent( + newSubscriptionChangedEvent( + this.currentSelectedControlElement, + this.currentSelectedFcdaElement + ) + ); + } + + private getSubscribedExtRefElements(): Element[] { + return getSubscribedExtRefElements( + this.doc.getRootNode(), + this.controlTag, + this.currentSelectedFcdaElement, + this.currentSelectedControlElement, + true + ); + } + + private getAvailableExtRefElements(): Element[] { + return getExtRefElements( + this.doc.getRootNode(), + this.currentSelectedFcdaElement, + true + ).filter( + extRefElement => + !isSubscribed(extRefElement) && + (!extRefElement.hasAttribute('serviceType') || + extRefElement.getAttribute('serviceType') === + this.serviceTypeLookup[this.controlTag]) + ); + } + + private renderTitle(): TemplateResult { + return html`

    + ${translate(`subscription.laterBinding.extRefList.title`)} +

    `; + } + + private renderExtRefElement(extRefElement: Element): TemplateResult { + const supervisionNode = getExistingSupervision(extRefElement); + return html` this.unsubscribe(extRefElement)} + value="${identity(extRefElement)}" + > + + ${extRefElement.getAttribute('intAddr')} + ${getDescriptionAttribute(extRefElement) + ? html` (${getDescriptionAttribute(extRefElement)})` + : nothing} + + ${identity(extRefElement.parentElement)}${supervisionNode !== null + ? ` (${identity(supervisionNode)})` + : ''} + swap_horiz + ${supervisionNode !== null + ? html`monitor_heart` + : nothing} + `; + } + + private renderSubscribedExtRefs(): TemplateResult { + const subscribedExtRefs = this.getSubscribedExtRefElements(); + return html` + + ${translate('subscription.subscriber.subscribed')} + +
  • + ${subscribedExtRefs.length > 0 + ? html`${subscribedExtRefs.map(extRefElement => + this.renderExtRefElement(extRefElement) + )}` + : html` + ${translate( + 'subscription.laterBinding.extRefList.noSubscribedExtRefs' + )} + `} + `; + } + + private renderAvailableExtRefs(): TemplateResult { + const availableExtRefs = this.getAvailableExtRefElements(); + return html` + + + ${translate('subscription.subscriber.availableToSubscribe')} + + +
  • + ${availableExtRefs.length > 0 + ? html`${availableExtRefs.map( + extRefElement => html` this.subscribe(extRefElement)} + value="${identity(extRefElement)}" + > + + ${extRefElement.getAttribute('intAddr')} + ${getDescriptionAttribute(extRefElement) + ? html` (${getDescriptionAttribute(extRefElement)})` + : nothing} + + ${identity(extRefElement.parentElement)} + arrow_back + ` + )}` + : html` + ${translate( + 'subscription.laterBinding.extRefList.noAvailableExtRefs' + )} + `} + `; + } + + render(): TemplateResult { + return html`
    + ${this.currentSelectedControlElement && this.currentSelectedFcdaElement + ? html` + ${this.renderTitle()} + + ${this.renderSubscribedExtRefs()} ${this.renderAvailableExtRefs()} + + ` + : html` +

    + ${translate('subscription.laterBinding.extRefList.noSelection')} +

    + `} +
    `; + } + + static styles = css` + ${styles} + + mwc-list-item.hidden[noninteractive] + li[divider] { + display: none; + } + `; +} diff --git a/packages/open-scd/src/editors/subscription/later-binding/ext-ref-ln-binding-list.ts b/packages/open-scd/src/editors/subscription/later-binding/ext-ref-ln-binding-list.ts new file mode 100644 index 0000000000..c7b1ca825c --- /dev/null +++ b/packages/open-scd/src/editors/subscription/later-binding/ext-ref-ln-binding-list.ts @@ -0,0 +1,373 @@ +import { + css, + customElement, + html, + LitElement, + property, + state, + TemplateResult, +} from 'lit-element'; +import { nothing } from 'lit-html'; +import { get, translate } from 'lit-translate'; + +import { + ComplexAction, + createElement, + Delete, + identity, + newActionEvent, +} from '../../../foundation.js'; +import { Nsdoc } from '../../../foundation/nsdoc.js'; + +import { + canCreateValidExtRef, + createExtRefElement, + existExtRef, + FcdaSelectEvent, + getExtRef, + getExistingSupervision, + newSubscriptionChangedEvent, + removeSubscriptionSupervision, + instantiateSubscriptionSupervision, + styles, + canRemoveSubscriptionSupervision, +} from '../foundation.js'; +import { getSubscribedExtRefElements } from './foundation.js'; +import { emptyInputsDeleteActions } from '../../../foundation/ied.js'; + +/** + * A sub element for showing all Ext Refs from a FCDA Element. + * The List reacts on a custom event to know which FCDA Element was selected and updated the view. + */ +@customElement('extref-ln-binding-list') +export class ExtRefLnBindingList extends LitElement { + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + @property() + nsdoc!: Nsdoc; + @property() + controlTag!: 'SampledValueControl' | 'GSEControl'; + + @state() + currentSelectedControlElement: Element | undefined; + @state() + currentSelectedFcdaElement: Element | undefined; + @state() + currentIedElement: Element | undefined; + + constructor() { + super(); + + const parentDiv = this.closest('.container'); + if (parentDiv) { + this.onFcdaSelectEvent = this.onFcdaSelectEvent.bind(this); + parentDiv.addEventListener('fcda-select', this.onFcdaSelectEvent); + } + } + + private getLNElements(): Element[] { + if (this.doc) { + return Array.from( + this.doc.querySelectorAll('LDevice > LN0, LDevice > LN') + ).filter(element => element.closest('IED') !== this.currentIedElement); + } + return []; + } + + private getSubscribedLNElements(): Element[] { + return this.getLNElements().filter( + element => + getSubscribedExtRefElements( + element, + this.controlTag, + this.currentSelectedFcdaElement, + this.currentSelectedControlElement, + false + ).length > 0 + ); + } + + private getAvailableLNElements(): Element[] { + return this.getLNElements().filter( + element => + getSubscribedExtRefElements( + element, + this.controlTag, + this.currentSelectedFcdaElement, + this.currentSelectedControlElement, + false + ).length == 0 + ); + } + + private async onFcdaSelectEvent(event: FcdaSelectEvent) { + this.currentSelectedControlElement = event.detail.control; + this.currentSelectedFcdaElement = event.detail.fcda; + + // Retrieve the IED Element to which the FCDA belongs. + // These LN Elements will be excluded. + this.currentIedElement = this.currentSelectedFcdaElement + ? this.currentSelectedFcdaElement.closest('IED') ?? undefined + : undefined; + } + + private subscribe(lnElement: Element): ComplexAction | null { + if ( + !this.currentIedElement || + !this.currentSelectedFcdaElement || + !this.currentSelectedControlElement! + ) { + return null; + } + + const complexAction: ComplexAction = { + actions: [], + title: get(`subscription.connect`), + }; + + let inputsElement = lnElement.querySelector(':scope > Inputs'); + if (!inputsElement) { + inputsElement = createElement(lnElement.ownerDocument, 'Inputs', {}); + complexAction.actions.push({ + new: { parent: lnElement, element: inputsElement }, + }); + } + + if ( + !existExtRef( + inputsElement!, + this.currentSelectedFcdaElement, + this.currentSelectedControlElement + ) && + canCreateValidExtRef( + this.currentSelectedFcdaElement, + this.currentSelectedControlElement + ) + ) { + const extRef = createExtRefElement( + this.currentSelectedControlElement, + this.currentSelectedFcdaElement + ); + complexAction.actions.push({ + new: { parent: inputsElement, element: extRef }, + }); + } + + // we need to extend the actions array with the actions for the instation of the LGOS + const subscriberIed = lnElement.closest('IED') || undefined; + complexAction.actions.push( + ...instantiateSubscriptionSupervision( + this.currentSelectedControlElement, + subscriberIed + ) + ); + + return complexAction; + } + + private unsubscribe(lnElement: Element): ComplexAction | null { + if ( + !this.currentIedElement || + !this.currentSelectedFcdaElement || + !this.currentSelectedControlElement! + ) { + return null; + } + + const actions: Delete[] = []; + const inputElement = lnElement.querySelector(':scope > Inputs')!; + const extRefElement = getExtRef( + inputElement, + this.currentSelectedFcdaElement, + this.currentSelectedControlElement + ); + if (extRefElement) { + actions.push({ old: { parent: inputElement, element: extRefElement } }); + } + + // Check if empty Input Element should also be removed. + actions.push(...emptyInputsDeleteActions(actions)); + + // we need to extend the actions array with the actions for removing the supervision + const subscriberIed = lnElement.closest('IED') || undefined; + if (extRefElement && canRemoveSubscriptionSupervision(extRefElement)) + actions.push( + ...removeSubscriptionSupervision( + this.currentSelectedControlElement, + subscriberIed + ) + ); + + return { + title: get('subscription.disconnect'), + actions: actions, + }; + } + + private bindingNotSupported(lnElement: Element): boolean { + const iedElement = lnElement.closest('IED')!; + return ( + (iedElement + .querySelector( + ':scope > AccessPoint > Services > ClientServices, :scope > Services > ClientServices' + ) + ?.getAttribute('noIctBinding') ?? 'false') === 'true' + ); + } + + private buildLNTitle(lnElement: Element): string { + const prefix = lnElement.getAttribute('prefix'); + const inst = lnElement.getAttribute('inst'); + + const data = this.nsdoc.getDataDescription(lnElement); + + return `${prefix ? `${prefix} - ` : ''}${data.label} ${ + inst ? ` - ${inst}` : '' + }`; + } + + private renderTitle(): TemplateResult { + return html`

    ${translate(`subscription.binding.extRefList.title`)}

    `; + } + + private renderSubscribedLN(lnElement: Element): TemplateResult { + const extRefs = getSubscribedExtRefElements( + lnElement, + this.controlTag, + this.currentSelectedFcdaElement, + this.currentSelectedControlElement, + false + ); + const supervisionNode = getExistingSupervision(extRefs[0]); + return html` { + const replaceAction = this.unsubscribe(lnElement); + if (replaceAction) { + this.dispatchEvent(newActionEvent(replaceAction)); + this.dispatchEvent( + newSubscriptionChangedEvent( + this.currentSelectedControlElement, + this.currentSelectedFcdaElement + ) + ); + } + }} + > + ${this.buildLNTitle(lnElement)} + ${identity(lnElement.closest('LDevice'))} + close + ${supervisionNode !== null + ? html`monitor_heart` + : nothing}`; + } + + private renderSubscribedLNs(): TemplateResult { + const subscribedLNs = this.getSubscribedLNElements(); + return html` + + ${translate('subscription.subscriber.subscribed')} + +
  • + ${subscribedLNs.length > 0 + ? html`${subscribedLNs.map(lN => this.renderSubscribedLN(lN))}` + : html` + ${translate('subscription.binding.extRefList.noSubscribedLNs')} + `} + `; + } + + private renderAvailableLNs(): TemplateResult { + const availableLNs = this.getAvailableLNElements(); + return html` + + + ${translate('subscription.subscriber.availableToSubscribe')} + + +
  • + ${availableLNs.length > 0 + ? html`${availableLNs.map( + lnElement => html` { + const replaceAction = this.subscribe(lnElement); + if (replaceAction) { + this.dispatchEvent(newActionEvent(replaceAction)); + this.dispatchEvent( + newSubscriptionChangedEvent( + this.currentSelectedControlElement, + this.currentSelectedFcdaElement + ) + ); + } + }} + > + ${this.buildLNTitle(lnElement)} + + ${identity(lnElement.closest('LDevice'))} + + add + ` + )}` + : html` + ${translate('subscription.binding.extRefList.noAvailableLNs')} + `} + `; + } + + render(): TemplateResult { + return html`
    + ${this.currentSelectedControlElement && this.currentSelectedFcdaElement + ? html` + ${this.renderTitle()} + + ${this.renderSubscribedLNs()} ${this.renderAvailableLNs()} + + ` + : html` +

    ${translate('subscription.binding.extRefList.noSelection')}

    + `} +
    `; + } + + static styles = css` + ${styles} + + mwc-list-item.hidden[noninteractive] + li[divider] { + display: none; + } + `; +} diff --git a/packages/open-scd/src/editors/subscription/later-binding/foundation.ts b/packages/open-scd/src/editors/subscription/later-binding/foundation.ts new file mode 100644 index 0000000000..0b0a408977 --- /dev/null +++ b/packages/open-scd/src/editors/subscription/later-binding/foundation.ts @@ -0,0 +1,272 @@ +import { getSclSchemaVersion } from '../../../foundation.js'; +import { serviceTypes } from '../foundation.js'; + +function dataAttributeSpecification( + anyLn: Element, + doName: string, + daName: string +): { cdc: string | null; bType: string | null } { + const doc = anyLn.ownerDocument; + const lNodeType = doc.querySelector( + `LNodeType[id="${anyLn.getAttribute('lnType')}"]` + ); + + const doNames = doName.split('.'); + let leaf: Element | null | undefined = lNodeType; + for (const doName of doNames) { + const dO: Element | null | undefined = leaf?.querySelector( + `DO[name="${doName}"], SDO[name="${doName}"]` + ); + leaf = doc.querySelector(`DOType[id="${dO?.getAttribute('type')}"]`); + } + if (!leaf || !leaf.getAttribute('cdc')) return { cdc: null, bType: null }; + + const cdc = leaf.getAttribute('cdc')!; + + const daNames = daName.split('.'); + for (const daName of daNames) { + const dA: Element | null | undefined = leaf?.querySelector( + `DA[name="${daName}"], BDA[name="${daName}"]` + ); + leaf = + daNames.indexOf(daName) < daNames.length - 1 + ? doc.querySelector(`DAType[id="${dA?.getAttribute('type')}"]`) + : dA; + } + if (!leaf || !leaf.getAttribute('bType')) return { cdc, bType: null }; + + const bType = leaf.getAttribute('bType')!; + + return { bType, cdc }; +} + +/** + * @param fcda - Data attribute reference in a data set + * @returns Data objects `CDC` and data attributes `bType` + */ +export function fcdaSpecification(fcda: Element): { + cdc: string | null; + bType: string | null; +} { + const [doName, daName] = ['doName', 'daName'].map(attr => + fcda.getAttribute(attr) + ); + if (!doName || !daName) return { cdc: null, bType: null }; + + const ied = fcda.closest('IED'); + + const anyLn = Array.from( + ied?.querySelectorAll( + `LDevice[inst="${fcda.getAttribute( + 'ldInst' + )}"] > LN, LDevice[inst="${fcda.getAttribute('inst')}"] LN0` + ) ?? [] + ).find(anyLn => { + return ( + (anyLn.getAttribute('prefix') ?? '') === + (fcda.getAttribute('prefix') ?? '') && + (anyLn.getAttribute('lnClass') ?? '') === + (fcda.getAttribute('lnClass') ?? '') && + (anyLn.getAttribute('inst') ?? '') === (fcda.getAttribute('lnInst') ?? '') + ); + }); + if (!anyLn) return { cdc: null, bType: null }; + + return dataAttributeSpecification(anyLn, doName, daName); +} + +/** + * Edition 2 and later SCL files allow to restrict subscription on + * later binding type inputs (`ExtRef` elements) based on a `CDC` and + * basic type `bType`. + * @param extRef - A later binding type input in the sink IED + * @returns data objects `CDC` and data attribute basic type `bType` or `null` + */ +export function inputRestriction(extRef: Element): { + cdc: string | null; + bType: string | null; +} { + const [pLN, pDO, pDA] = ['pLN', 'pDO', 'pDA'].map(attr => + extRef.getAttribute(attr) + ); + if (!pLN || !pDO || !pDA) return { cdc: null, bType: null }; + + const anyLns = Array.from( + extRef + .closest('IED') + ?.querySelectorAll(`LN[lnClass="${pLN}"],LN0[lnClass="${pLN}"]`) ?? [] + ); + + for (const anyLn of anyLns) { + const dataSpec = dataAttributeSpecification(anyLn, pDO, pDA); + if (dataSpec.cdc !== null && dataSpec.bType !== null) return dataSpec; + } + + return { cdc: null, bType: null }; +} + +/** + * Simple function to check if the attribute of the Left Side has the same value as the attribute of the Right Element. + * + * @param leftElement - The Left Element to check against. + * @param rightElement - The Right Element to check. + * @param attributeName - The name of the attribute to check. + */ +export function sameAttributeValue( + leftElement: Element | undefined, + rightElement: Element | undefined, + attributeName: string +): boolean { + return ( + (leftElement?.getAttribute(attributeName) ?? '') === + (rightElement?.getAttribute(attributeName) ?? '') + ); +} + +/** + * Simple function to check if the attribute of the Left Side has the same value as the attribute of the Right Element. + * + * @param leftElement - The Left Element to check against. + * @param leftAttributeName - The name of the attribute (left) to check against. + * @param rightElement - The Right Element to check. + * @param rightAttributeName - The name of the attribute (right) to check. + */ +export function sameAttributeValueDiffName( + leftElement: Element | undefined, + leftAttributeName: string, + rightElement: Element | undefined, + rightAttributeName: string +): boolean { + return ( + (leftElement?.getAttribute(leftAttributeName) ?? '') === + (rightElement?.getAttribute(rightAttributeName) ?? '') + ); +} + +/** + * If needed check version specific attributes against FCDA Element. + * + * @param controlTag - Indicates which type of control element. + * @param controlElement - The Control Element to check against. + * @param extRefElement - The Ext Ref Element to check. + */ +function checkEditionSpecificRequirements( + controlTag: 'SampledValueControl' | 'GSEControl', + controlElement: Element | undefined, + extRefElement: Element +): boolean { + // For 2003 Edition no extra check needed. + if (getSclSchemaVersion(extRefElement.ownerDocument) === '2003') { + return true; + } + + const lDeviceElement = controlElement?.closest('LDevice') ?? undefined; + const lnElement = controlElement?.closest('LN0') ?? undefined; + + // For the 2007B and 2007B4 Edition we need to check some extra attributes. + return ( + (extRefElement.getAttribute('serviceType') ?? '') === + serviceTypes[controlTag] && + sameAttributeValueDiffName( + extRefElement, + 'srcLDInst', + lDeviceElement, + 'inst' + ) && + sameAttributeValueDiffName( + extRefElement, + 'scrPrefix', + lnElement, + 'prefix' + ) && + sameAttributeValueDiffName( + extRefElement, + 'srcLNClass', + lnElement, + 'lnClass' + ) && + sameAttributeValueDiffName(extRefElement, 'srcLNInst', lnElement, 'inst') && + sameAttributeValueDiffName( + extRefElement, + 'srcCBName', + controlElement, + 'name' + ) + ); +} + +/** + * Check if specific attributes from the ExtRef Element are the same as the ones from the FCDA Element + * and also if the IED Name is the same. If that is the case this ExtRef subscribes to the selected FCDA + * Element. + * + * @param controlTag - Indicates which type of control element. + * @param controlElement - The Control Element to check against. + * @param fcdaElement - The FCDA Element to check against. + * @param extRefElement - The Ext Ref Element to check. + */ +export function isSubscribedTo( + controlTag: 'SampledValueControl' | 'GSEControl', + controlElement: Element | undefined, + fcdaElement: Element | undefined, + extRefElement: Element +): boolean { + return ( + extRefElement.getAttribute('iedName') === + fcdaElement?.closest('IED')?.getAttribute('name') && + sameAttributeValue(fcdaElement, extRefElement, 'ldInst') && + sameAttributeValue(fcdaElement, extRefElement, 'prefix') && + sameAttributeValue(fcdaElement, extRefElement, 'lnClass') && + sameAttributeValue(fcdaElement, extRefElement, 'lnInst') && + sameAttributeValue(fcdaElement, extRefElement, 'doName') && + sameAttributeValue(fcdaElement, extRefElement, 'daName') && + checkEditionSpecificRequirements(controlTag, controlElement, extRefElement) + ); +} + +/** + * Check if the ExtRef is already subscribed to a FCDA Element. + * + * @param extRefElement - The Ext Ref Element to check. + */ +export function isSubscribed(extRefElement: Element): boolean { + return ( + extRefElement.hasAttribute('iedName') && + extRefElement.hasAttribute('ldInst') && + extRefElement.hasAttribute('prefix') && + extRefElement.hasAttribute('lnClass') && + extRefElement.hasAttribute('lnInst') && + extRefElement.hasAttribute('doName') && + extRefElement.hasAttribute('daName') + ); +} + +export function getExtRefElements( + rootElement: Element, + fcdaElement: Element | undefined, + includeLaterBinding: boolean +): Element[] { + return Array.from(rootElement.querySelectorAll('ExtRef')) + .filter( + element => + (includeLaterBinding && element.hasAttribute('intAddr')) || + (!includeLaterBinding && !element.hasAttribute('intAddr')) + ) + .filter(element => element.closest('IED') !== fcdaElement?.closest('IED')); +} + +export function getSubscribedExtRefElements( + rootElement: Element, + controlTag: 'SampledValueControl' | 'GSEControl', + fcdaElement: Element | undefined, + controlElement: Element | undefined, + includeLaterBinding: boolean +): Element[] { + return getExtRefElements( + rootElement, + fcdaElement, + includeLaterBinding + ).filter(extRefElement => + isSubscribedTo(controlTag, controlElement, fcdaElement, extRefElement) + ); +} diff --git a/packages/open-scd/src/editors/subscription/sampledvalues/foundation.ts b/packages/open-scd/src/editors/subscription/sampledvalues/foundation.ts new file mode 100644 index 0000000000..8566b80c63 --- /dev/null +++ b/packages/open-scd/src/editors/subscription/sampledvalues/foundation.ts @@ -0,0 +1,42 @@ +import { SubscribeStatus } from '../foundation.js'; + +export interface SmvSelectDetail { + smvControl: Element | undefined; + dataset: Element | undefined; +} +export type SmvSelectEvent = CustomEvent; +export function newSmvSelectEvent( + smvControl: Element | undefined, + dataset: Element | undefined, + eventInitDict?: CustomEventInit +): SmvSelectEvent { + return new CustomEvent('smv-select', { + bubbles: true, + composed: true, + ...eventInitDict, + detail: { smvControl: smvControl, dataset, ...eventInitDict?.detail }, + }); +} + +export interface SmvSubscriptionDetail { + element: Element; + subscribeStatus: SubscribeStatus; +} +export type SmvSubscriptionEvent = CustomEvent; +export function newSmvSubscriptionEvent( + element: Element, + subscribeStatus: SubscribeStatus +): SmvSubscriptionEvent { + return new CustomEvent('smv-subscription', { + bubbles: true, + composed: true, + detail: { element, subscribeStatus }, + }); +} + +declare global { + interface ElementEventMap { + ['smv-select']: SmvSelectEvent; + ['smv-subscription']: SmvSubscriptionEvent; + } +} diff --git a/packages/open-scd/src/editors/subscription/sampledvalues/smv-list.ts b/packages/open-scd/src/editors/subscription/sampledvalues/smv-list.ts new file mode 100644 index 0000000000..8da41fc039 --- /dev/null +++ b/packages/open-scd/src/editors/subscription/sampledvalues/smv-list.ts @@ -0,0 +1,143 @@ +import { + css, + customElement, + html, + LitElement, + property, + TemplateResult, +} from 'lit-element'; +import { translate } from 'lit-translate'; + +import '@material/mwc-icon'; +import '@material/mwc-list'; +import '@material/mwc-list/mwc-list-item'; + +import { + getNameAttribute, + identity, + newWizardEvent, +} from '../../../foundation.js'; +import { newSmvSelectEvent } from './foundation.js'; +import { smvIcon } from '../../../icons/icons.js'; +import { getOrderedIeds, styles } from '../foundation.js'; +import { classMap } from 'lit-html/directives/class-map.js'; +import { wizards } from '../../../wizards/wizard-library.js'; + +let selectedSmvMsg: Element | undefined; +let selectedDataSet: Element | undefined | null; + +function onOpenDocResetSelectedSmvMsg() { + selectedSmvMsg = undefined; + selectedDataSet = undefined; +} +addEventListener('open-doc', onOpenDocResetSelectedSmvMsg); + +/** An sub element for showing all Sampled Values per IED. */ +@customElement('smv-list') +export class SmvPublisherList extends LitElement { + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + private onSelect(smvControl: Element) { + const ln = smvControl.parentElement; + const dataset = ln?.querySelector( + `DataSet[name=${smvControl.getAttribute('datSet')}]` + ); + + selectedSmvMsg = smvControl; + selectedDataSet = dataset; + + this.dispatchEvent(newSmvSelectEvent(selectedSmvMsg, selectedDataSet!)); + + this.requestUpdate(); + } + + private openEditWizard(smvControl: Element): void { + const wizard = wizards['SampledValueControl'].edit(smvControl); + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + + protected updated(): void { + this.dispatchEvent( + newSmvSelectEvent(selectedSmvMsg, selectedDataSet ?? undefined) + ); + } + + protected firstUpdated(): void { + selectedSmvMsg = undefined; + selectedDataSet = undefined; + } + + renderSmv(smvControl: Element): TemplateResult { + return html` this.onSelect(smvControl)} + graphic="large" + hasMeta + value="${identity(smvControl)}" + > + ${smvIcon} + ${smvControl.getAttribute('name')} + this.openEditWizard(smvControl)} + > + `; + } + + render(): TemplateResult { + return html`
    +

    ${translate('subscription.smv.publisher.title')}

    + + ${getOrderedIeds(this.doc).map( + ied => + html` + + ${getNameAttribute(ied)} + developer_board + +
  • + ${Array.from( + ied.querySelectorAll( + ':scope > AccessPoint > Server > LDevice > LN0 > SampledValueControl' + ) + ) + .filter(cb => cb.hasAttribute('datSet')) + .map(control => this.renderSmv(control))} + ` + )} +
    +
    `; + } + + static styles = css` + ${styles} + + mwc-list-item { + --mdc-list-item-meta-size: 48px; + } + + mwc-icon-button.hidden { + display: none; + } + + mwc-list-item.hidden[noninteractive] + li[divider] { + display: none; + } + `; +} diff --git a/packages/open-scd/src/editors/subscription/sampledvalues/subscriber-list.ts b/packages/open-scd/src/editors/subscription/sampledvalues/subscriber-list.ts new file mode 100644 index 0000000000..2ebe048752 --- /dev/null +++ b/packages/open-scd/src/editors/subscription/sampledvalues/subscriber-list.ts @@ -0,0 +1,498 @@ +import { + css, + customElement, + html, + property, + TemplateResult, +} from 'lit-element'; +import { nothing } from 'lit-html'; +import { get, translate } from 'lit-translate'; + +import '@material/mwc-icon'; +import '@material/mwc-list'; +import '@material/mwc-list/mwc-list-item'; + +import '../../../filtered-list.js'; +import { + ComplexAction, + Create, + createElement, + Delete, + identity, + Move, + newActionEvent, +} from '../../../foundation.js'; +import { + newSmvSubscriptionEvent, + SmvSelectEvent, + SmvSubscriptionEvent, +} from './foundation.js'; +import { emptyInputsDeleteActions } from '../../../foundation/ied.js'; +import { + canCreateValidExtRef, + createExtRefElement, + existExtRef, + getExistingSupervision, + getExtRef, + getFirstSubscribedExtRef, + IEDSelectEvent, + instantiateSubscriptionSupervision, + ListElement, + removeSubscriptionSupervision, + styles, + SubscriberListContainer, + SubscribeStatus, + View, + ViewEvent, +} from '../foundation.js'; + +/** Defining view outside the class, which makes it persistent. */ +let view: View = View.PUBLISHER; + +/** An sub element for subscribing and unsubscribing IEDs to Sampled Values messages. */ +@customElement('subscriber-list-smv') +export class SubscriberList extends SubscriberListContainer { + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + /** Current selected Sampled Values element (when in GOOSE Publisher view) */ + currentSelectedSmvControl: Element | undefined; + + /** The name of the IED belonging to the current selected Sampled Values */ + currentSmvIedName: string | undefined | null; + + constructor() { + super(); + this.onIEDSelectEvent = this.onIEDSelectEvent.bind(this); + this.onSmvSelectEvent = this.onSmvSelectEvent.bind(this); + this.onIEDSubscriptionEvent = this.onIEDSubscriptionEvent.bind(this); + this.onViewChange = this.onViewChange.bind(this); + + const parentDiv = this.closest('.container'); + if (parentDiv) { + parentDiv.addEventListener('ied-select', this.onIEDSelectEvent); + parentDiv.addEventListener('smv-select', this.onSmvSelectEvent); + parentDiv.addEventListener( + 'smv-subscription', + this.onIEDSubscriptionEvent + ); + parentDiv.addEventListener('view', this.onViewChange); + } + } + + private async onIEDSelectEvent(event: IEDSelectEvent) { + if (!event.detail.ied) return; + this.currentSelectedIed = event.detail.ied!; + + this.resetElements(); + + const subscribedInputs = this.currentSelectedIed.querySelectorAll( + `LN0 > Inputs, LN > Inputs` + ); + + Array.from(this.doc.querySelectorAll('SampledValueControl')) + .filter(cb => cb.hasAttribute('datSet')) + .forEach(control => { + const ied = control.closest('IED')!; + + if ( + ied.getAttribute('name') == + this.currentSelectedIed?.getAttribute('name') + ) + return; + + /** If no Inputs is available, it's automatically available. */ + if (subscribedInputs.length == 0) { + this.availableElements.push({ element: control }); + return; + } + + let numberOfLinkedExtRefs = 0; + const dataSet = ied.querySelector( + `DataSet[name="${control.getAttribute('datSet')}"]` + ); + + if (!dataSet) return; + + dataSet!.querySelectorAll('FCDA').forEach(fcda => { + subscribedInputs.forEach(inputs => { + if (getExtRef(inputs, fcda, this.currentSelectedSmvControl)) { + numberOfLinkedExtRefs++; + } + }); + }); + + if (numberOfLinkedExtRefs == 0) { + this.availableElements.push({ element: control }); + return; + } + + if (numberOfLinkedExtRefs >= dataSet!.querySelectorAll('FCDA').length) { + this.subscribedElements.push({ element: control }); + } else { + this.availableElements.push({ element: control, partial: true }); + } + }); + + this.requestUpdate(); + } + + private async onSmvSelectEvent(event: SmvSelectEvent) { + if (!event.detail.dataset || !event.detail.smvControl) return; + + this.currentSelectedSmvControl = event.detail.smvControl; + this.currentUsedDataset = event.detail.dataset; + + this.currentSmvIedName = this.currentSelectedSmvControl + ?.closest('IED') + ?.getAttribute('name'); + + this.subscribedElements = []; + this.availableElements = []; + + Array.from(this.doc.querySelectorAll(':root > IED')) + .filter(ied => ied.getAttribute('name') != this.currentSmvIedName) + .forEach(ied => { + const inputElements = ied.querySelectorAll(`LN0 > Inputs, LN > Inputs`); + + let numberOfLinkedExtRefs = 0; + + /** + * If no Inputs element is found, we can safely say it's not subscribed. + */ + if (!inputElements) { + this.availableElements.push({ element: ied }); + return; + } + + /** + * Count all the linked ExtRefs. + */ + this.currentUsedDataset!.querySelectorAll('FCDA').forEach(fcda => { + inputElements.forEach(inputs => { + if (getExtRef(inputs, fcda, this.currentSelectedSmvControl)) { + numberOfLinkedExtRefs++; + } + }); + }); + + /** + * Make a distinction between not subscribed at all, + * partially subscribed and fully subscribed. + */ + if (numberOfLinkedExtRefs == 0) { + this.availableElements.push({ element: ied }); + return; + } + + if ( + numberOfLinkedExtRefs >= + this.currentUsedDataset!.querySelectorAll('FCDA').length + ) { + this.subscribedElements.push({ element: ied }); + } else { + this.availableElements.push({ element: ied, partial: true }); + } + }); + + this.requestUpdate(); + } + + private async onIEDSubscriptionEvent(event: SmvSubscriptionEvent) { + let iedToSubscribe = event.detail.element; + + if (view == View.SUBSCRIBER) { + const dataSetName = event.detail.element.getAttribute('datSet'); + this.currentUsedDataset = + event.detail.element.parentElement?.querySelector( + `DataSet[name="${dataSetName}"]` + ); + this.currentSelectedSmvControl = event.detail.element; + this.currentSmvIedName = event.detail.element + .closest('IED') + ?.getAttribute('name'); + iedToSubscribe = this.currentSelectedIed!; + } + + switch (event.detail.subscribeStatus) { + case SubscribeStatus.Full: { + this.unsubscribe(iedToSubscribe); + break; + } + case SubscribeStatus.Partial: { + this.subscribe(iedToSubscribe); + break; + } + case SubscribeStatus.None: { + this.subscribe(iedToSubscribe); + break; + } + } + } + + private async onViewChange(event: ViewEvent) { + view = event.detail.view; + + this.currentSelectedIed = undefined; + this.currentSelectedSmvControl = undefined; + + this.resetElements(); + this.requestUpdate(); + } + + private async subscribe(ied: Element): Promise { + if (!ied.querySelector('LN0')) return; + + let inputsElement = ied.querySelector('LN0 > Inputs'); + if (!inputsElement) + inputsElement = createElement(ied.ownerDocument, 'Inputs', {}); + + const complexAction: ComplexAction = { + actions: [], + title: get(`subscription.connect`), + }; + + this.currentUsedDataset!.querySelectorAll('FCDA').forEach(fcda => { + if ( + !existExtRef(inputsElement!, fcda, this.currentSelectedSmvControl) && + canCreateValidExtRef(fcda, this.currentSelectedSmvControl) + ) { + const extRef = createExtRefElement( + this.currentSelectedSmvControl, + fcda + ); + + if (inputsElement?.parentElement) + complexAction.actions.push({ + new: { parent: inputsElement!, element: extRef }, + }); + else inputsElement?.appendChild(extRef); + } + }); + + // we need to extend the actions array with the actions for the instantiation of the LSVS + const supervisionActions = instantiateSubscriptionSupervision( + this.currentSelectedSmvControl, + ied + ); + + if (inputsElement.parentElement) { + complexAction.actions.concat(supervisionActions); + } else { + /** If the IED doesn't have a Inputs element, just append it to the first LN0 element. */ + const inputAction: (Create | Move)[] = [ + { + new: { parent: ied.querySelector('LN0')!, element: inputsElement }, + }, + ]; + complexAction.actions = inputAction.concat(supervisionActions); + } + this.dispatchEvent(newActionEvent(complexAction)); + } + + private async unsubscribe(ied: Element): Promise { + const actions: Delete[] = []; + ied.querySelectorAll('LN0 > Inputs, LN > Inputs').forEach(inputs => { + this.currentUsedDataset!.querySelectorAll('FCDA').forEach(fcda => { + const extRef = getExtRef(inputs, fcda, this.currentSelectedSmvControl); + if (extRef) actions.push({ old: { parent: inputs, element: extRef } }); + }); + }); + + // Check if empty Input Element should also be removed. + actions.push(...emptyInputsDeleteActions(actions)); + + // we need to extend the actions array with the actions for removing the supervision + actions.push( + ...removeSubscriptionSupervision(this.currentSelectedSmvControl, ied) + ); + + this.dispatchEvent( + newActionEvent({ + title: get('subscription.disconnect'), + actions: actions, + }) + ); + } + + renderSubscriber(status: SubscribeStatus, element: Element): TemplateResult { + let firstSubscribedExtRef: Element | null = null; + let supervisionNode: Element | null = null; + if (status !== SubscribeStatus.None) { + if (view === View.PUBLISHER) { + firstSubscribedExtRef = getFirstSubscribedExtRef( + this.currentSelectedSmvControl!, + element + ); + supervisionNode = getExistingSupervision(firstSubscribedExtRef!); + } else { + firstSubscribedExtRef = getFirstSubscribedExtRef( + element, + this.currentSelectedIed! + ); + supervisionNode = getExistingSupervision(firstSubscribedExtRef!); + } + } + return html` { + this.dispatchEvent( + newSmvSubscriptionEvent(element, status ?? SubscribeStatus.None) + ); + }} + graphic="avatar" + ?hasMeta=${supervisionNode !== null} + > + ${view == View.PUBLISHER + ? element.getAttribute('name') + : element.getAttribute('name') + + ` (${element.closest('IED')?.getAttribute('name')})`} + ${status == SubscribeStatus.Full ? html`clear` : html`add`} + ${supervisionNode !== null + ? html`monitor_heart` + : nothing} + `; + } + + renderUnSubscribers(elements: ListElement[]): TemplateResult { + return html` + ${translate('subscription.subscriber.availableToSubscribe')} + +
  • + ${elements.length > 0 + ? elements.map(element => + this.renderSubscriber(SubscribeStatus.None, element.element) + ) + : html` + ${translate('subscription.none')} + `}`; + } + + renderPartiallySubscribers(elements: ListElement[]): TemplateResult { + return html` + ${translate('subscription.subscriber.partiallySubscribed')} + +
  • + ${elements.length > 0 + ? elements.map(element => + this.renderSubscriber(SubscribeStatus.Partial, element.element) + ) + : html` + ${translate('subscription.none')} + `}`; + } + + renderFullSubscribers(): TemplateResult { + return html` + ${translate('subscription.subscriber.subscribed')} + +
  • + ${this.subscribedElements.length > 0 + ? this.subscribedElements.map(element => + this.renderSubscriber(SubscribeStatus.Full, element.element) + ) + : html` + ${translate('subscription.none')} + `}`; + } + + renderTitle(): TemplateResult { + const gseControlName = + this.currentSelectedSmvControl?.getAttribute('name') ?? undefined; + + return view == View.PUBLISHER + ? html`

    + ${translate('subscription.smv.publisher.subscriberTitle', { + selected: gseControlName + ? this.currentSmvIedName + ' > ' + gseControlName + : 'Sampled Value', + })} +

    ` + : html`

    + ${translate('subscription.smv.subscriber.publisherTitle', { + selected: this.currentSelectedIed + ? this.currentSelectedIed.getAttribute('name')! + : 'IED', + })} +

    `; + } + + protected firstUpdated(): void { + this.currentSelectedIed = undefined; + } + + render(): TemplateResult { + return html` +
    + ${this.renderTitle()} + ${this.availableElements.length != 0 || + this.subscribedElements.length != 0 + ? html`
    + + ${this.renderFullSubscribers()} + ${this.renderPartiallySubscribers( + this.availableElements.filter(element => element.partial) + )} + ${this.renderUnSubscribers( + this.availableElements.filter(element => !element.partial) + )} + +
    ` + : html` + + ${ + view == View.PUBLISHER + ? translate( + 'subscription.subscriber.noControlBlockSelected' + ) + : translate('subscription.subscriber.noIedSelected') + } + + + `} +
    + `; + } + + static styles = css` + ${styles} + + .wrapper { + height: 100vh; + overflow-y: scroll; + } + `; +} diff --git a/packages/open-scd/src/editors/substation/bay-editor.ts b/packages/open-scd/src/editors/substation/bay-editor.ts new file mode 100644 index 0000000000..e44f2b2175 --- /dev/null +++ b/packages/open-scd/src/editors/substation/bay-editor.ts @@ -0,0 +1,287 @@ +import { + css, + customElement, + html, + LitElement, + property, + query, + state, + TemplateResult, +} from 'lit-element'; +import { classMap } from 'lit-html/directives/class-map'; +import { translate } from 'lit-translate'; + +import '@material/mwc-icon-button'; +import '@material/mwc-textfield'; +import { Dialog } from '@material/mwc-dialog'; +import { Menu } from '@material/mwc-menu'; +import { IconButton } from '@material/mwc-icon-button'; +import { ListItem } from '@material/mwc-list/mwc-list-item'; + +import '../../action-pane.js'; +import './ied-editor.js'; +import './conducting-equipment-editor.js'; +import './general-equipment-editor.js'; +import './powertransformer-editor.js'; +import { VoltageLevelEditor } from './voltage-level-editor.js'; +import { + getChildElementsByTagName, + newActionEvent, + newWizardEvent, + SCLTag, + tags, +} from '../../foundation.js'; +import { emptyWizard, wizards } from '../../wizards/wizard-library.js'; +import { + cloneSubstationElement, + renderGeneralEquipment, + redirectDialog, + startMove, + styles, +} from './foundation.js'; + +function childTags(element: Element | null | undefined): SCLTag[] { + if (!element) return []; + + return tags[element.tagName].children.filter( + child => wizards[child].create !== emptyWizard + ); +} + +/** [[`SubstationEditor`]] subeditor for a `Bay` element. */ +@customElement('bay-editor') +export class BayEditor extends LitElement { + /** The document being edited as provided to editor by [[`Zeroline`]]. */ + @property({ attribute: false }) + doc!: XMLDocument; + @property({type: Number}) + editCount = -1; + @property({ attribute: false }) + element!: Element; + @property({ type: Boolean }) + readonly = false; + /** Whether `Function` and `SubFunction` are rendered */ + @property({ type: Boolean }) + showfunctions = false; + + @property({ type: String }) + get header(): string { + const name = this.element.getAttribute('name') ?? ''; + const desc = this.element.getAttribute('desc'); + + return `${name} ${desc ? `- ${desc}` : ''}`; + } + + @property({ attribute: false }) + getAttachedIeds?: (element: Element) => Element[] = () => { + return []; + }; + + @state() + cloneUI = false; + + @query('mwc-dialog') dialog!: Dialog; + @query('mwc-menu') addMenu!: Menu; + @query('mwc-icon-button[icon="playlist_add"]') addButton!: IconButton; + + openEditWizard(): void { + const wizard = wizards['Bay'].edit(this.element); + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + + /** Opens a [[`WizardDialog`]] for editing `LNode` connections. */ + openLNodeWizard(): void { + const wizard = wizards['LNode'].create(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, + }, + }) + ); + } + + private openCreateWizard(tagName: string): void { + const wizard = wizards[tagName].create(this.element!); + + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + + updated(): void { + this.addMenu.anchor = this.addButton; + } + + private renderRedirectUI(): TemplateResult { + if (!this.cloneUI) return html``; + + return redirectDialog(this.element); + } + + private renderLNodes(): TemplateResult { + if (!this.showfunctions) return html``; + + const lNodes = getChildElementsByTagName(this.element, 'LNode'); + + return lNodes.length + ? html`
    + ${lNodes.map( + lNode => + html`` + )} +
    ` + : html``; + } + + renderFunctions(): TemplateResult { + if (!this.showfunctions) return html``; + + const functions = getChildElementsByTagName(this.element, 'Function'); + return html` ${functions.map( + fUnction => + html`` + )}`; + } + + renderIedContainer(): TemplateResult { + const ieds = this.getAttachedIeds?.(this.element) ?? []; + return ieds?.length + ? html`
    + ${ieds.map( + ied => + html`` + )} +
    ` + : html``; + } + + private renderAddButtons(): TemplateResult[] { + return childTags(this.element).map( + child => + html`${child}` + ); + } + + render(): TemplateResult { + return html`${this.renderRedirectUI()} + + + + + cloneSubstationElement(this)} + > + + + this.openEditWizard()} + > + + + startMove(this, BayEditor, [VoltageLevelEditor])} + > + + + this.remove()} + > + + + (this.addMenu.open = true)} + > { + const tagName = ((
    e.target).selected).value; + this.openCreateWizard(tagName); + }} + >${this.renderAddButtons()} + + ${renderGeneralEquipment(this.doc, this.element, this.showfunctions)} + ${this.renderIedContainer()}${this.renderLNodes()}${this.renderFunctions()} +
    + ${Array.from( + getChildElementsByTagName(this.element, 'PowerTransformer') + ).map( + pwt => + html`` + )} + ${Array.from( + getChildElementsByTagName(this.element, 'ConductingEquipment') + ).map( + voltageLevel => + html`` + )} +
    + `; + } + + static styles = css` + ${styles} + + .content.actionicon { + display: grid; + grid-gap: 12px; + padding: 12px; + box-sizing: border-box; + grid-template-columns: repeat(auto-fit, minmax(64px, auto)); + } + + conducting-equipment-editor[showfunctions] { + margin: 4px 8px 16px; + } + `; +} diff --git a/packages/open-scd/src/editors/substation/conducting-equipment-editor.ts b/packages/open-scd/src/editors/substation/conducting-equipment-editor.ts new file mode 100644 index 0000000000..32c0876a9c --- /dev/null +++ b/packages/open-scd/src/editors/substation/conducting-equipment-editor.ts @@ -0,0 +1,270 @@ +import { + css, + customElement, + html, + LitElement, + property, + query, + TemplateResult, +} from 'lit-element'; +import { translate } from 'lit-translate'; + +import '@material/mwc-fab'; +import '@material/mwc-icon'; +import '@material/mwc-icon-button'; +import '@material/mwc-menu'; +import { Menu } from '@material/mwc-menu'; +import { IconButton } from '@material/mwc-icon-button'; +import { ListItem } from '@material/mwc-list/mwc-list-item'; + +import '../../action-icon.js'; +import '../../action-pane.js'; +import './eq-function-editor.js'; +import './l-node-editor.js'; +import './sub-equipment-editor.js'; +import { startMove, getIcon, styles } from './foundation.js'; +import { + getChildElementsByTagName, + newActionEvent, + newWizardEvent, + SCLTag, + tags, +} from '../../foundation.js'; +import { BayEditor } from './bay-editor.js'; +import { emptyWizard, wizards } from '../../wizards/wizard-library.js'; + +function childTags(element: Element | null | undefined): SCLTag[] { + if (!element) return []; + + return tags[element.tagName].children.filter( + child => wizards[child].create !== emptyWizard + ); +} + +/** [[`SubstationEditor`]] subeditor for a `ConductingEquipment` element. */ +@customElement('conducting-equipment-editor') +export class ConductingEquipmentEditor extends LitElement { + /** The document being edited as provided to editor by [[`Zeroline`]]. */ + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + /** SCL element ConductingEquipment */ + @property({ attribute: false }) + element!: Element; + /** ConductingEquipment name attribute */ + @property({ type: String }) + get name(): string { + return this.element.getAttribute('name') ?? ''; + } + /** Whether `EqFunction`, `SubEqFunction` and `SubEquipment` are rendered */ + @property({ type: Boolean }) + showfunctions = false; + + @query('mwc-menu') addMenu!: Menu; + @query('mwc-icon-button[icon="playlist_add"]') addButton!: IconButton; + + private openEditWizard(): void { + const wizard = wizards['ConductingEquipment'].edit(this.element); + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + + private openLNodeWizard(): void { + const wizard = wizards['LNode'].create(this.element); + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + + private openCreateWizard(tagName: string): void { + const wizard = wizards[tagName].create(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, + }, + }) + ); + } + + updated(): void { + if (this.addMenu && this.addButton) + this.addMenu.anchor = this.addButton; + } + + private renderLNodes(): TemplateResult { + const lNodes = getChildElementsByTagName(this.element, 'LNode'); + + return lNodes.length + ? html`
    + ${lNodes.map( + lNode => + html`` + )} +
    ` + : html``; + } + + renderEqFunctions(): TemplateResult { + if (!this.showfunctions) return html``; + + const eqFunctions = getChildElementsByTagName(this.element, 'EqFunction'); + return html` ${eqFunctions.map( + eqFunction => + html`` + )}`; + } + + private renderSubEquipments(): TemplateResult { + if (!this.showfunctions) return html``; + + const subEquipments = getChildElementsByTagName( + this.element, + 'SubEquipment' + ); + + return html` ${subEquipments.map( + subEquipment => + html`` + )}`; + } + + private renderAddButtons(): TemplateResult[] { + return childTags(this.element).map( + child => + html`${child}` + ); + } + + renderContentPane(): TemplateResult { + return html`${getIcon(this.element)} + + + + + + + + + + + + (this.addMenu.open = true)} + > { + const tagName = ((
    e.target).selected).value; + this.openCreateWizard(tagName); + }} + >${this.renderAddButtons()} + `; + } + + renderContentIcon(): TemplateResult { + return html`${getIcon(this.element)} + + + + `; + } + + render(): TemplateResult { + if (this.showfunctions) + return html`${this.renderContentPane()}${this.renderLNodes()}${this.renderEqFunctions()}${this.renderSubEquipments()}`; + + return html`${this.renderContentIcon()}`; + } + + static styles = css` + ${styles} + + :host(.moving) { + opacity: 0.3; + } + + abbr { + text-decoration: none; + border-bottom: none; + } + `; +} diff --git a/packages/open-scd/src/editors/substation/eq-function-editor.ts b/packages/open-scd/src/editors/substation/eq-function-editor.ts new file mode 100644 index 0000000000..57ed5d1fe1 --- /dev/null +++ b/packages/open-scd/src/editors/substation/eq-function-editor.ts @@ -0,0 +1,192 @@ +import { + html, + LitElement, + TemplateResult, + property, + customElement, + state, + css, + query, +} from 'lit-element'; +import { translate } from 'lit-translate'; + +import '@material/mwc-icon-button'; +import '@material/mwc-list/mwc-list-item'; +import '@material/mwc-menu'; +import { IconButton } from '@material/mwc-icon-button'; +import { ListItem } from '@material/mwc-list/mwc-list-item'; +import { Menu } from '@material/mwc-menu'; + +import '../../action-pane.js'; +import './eq-sub-function-editor.js'; +import './general-equipment-editor.js'; +import { + getChildElementsByTagName, + newActionEvent, + newWizardEvent, + SCLTag, + tags, +} from '../../foundation.js'; +import { emptyWizard, wizards } from '../../wizards/wizard-library.js'; +import { classMap } from 'lit-html/directives/class-map.js'; +import { renderGeneralEquipment } from './foundation.js'; + +function childTags(element: Element | null | undefined): SCLTag[] { + if (!element) return []; + + return tags[element.tagName].children.filter( + child => wizards[child].create !== emptyWizard + ); +} + +/** Pane rendering `EqFunction` element with its children */ +@customElement('eq-function-editor') +export class EqFunctionEditor extends LitElement { + /** The document being edited as provided to editor by [[`Zeroline`]]. */ + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + /** The edited `EqFunction` element */ + @property({ attribute: false }) + element!: Element; + + @property({ type: Boolean }) + showfunctions = false; + + @state() + private get header(): string { + const name = this.element.getAttribute('name'); + const desc = this.element.getAttribute('desc'); + const type = this.element.getAttribute('type'); + + return `${name}${desc ? ` - ${desc}` : ''}${type ? ` (${type})` : ''}`; + } + + @query('mwc-menu') addMenu!: Menu; + @query('mwc-icon-button[icon="playlist_add"]') addButton!: IconButton; + + private openEditWizard(): void { + const wizard = wizards['EqFunction'].edit(this.element); + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + + remove(): void { + if (this.element.parentElement) + this.dispatchEvent( + newActionEvent({ + old: { + parent: this.element.parentElement, + element: this.element, + }, + }) + ); + } + + private openCreateWizard(tagName: string): void { + const wizard = wizards[tagName].create(this.element!); + + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + + updated(): void { + this.addMenu.anchor = this.addButton; + } + + private renderLNodes(): TemplateResult { + const lNodes = getChildElementsByTagName(this.element, 'LNode'); + + return lNodes.length + ? html`
    + ${lNodes.map( + lNode => + html`` + )} +
    ` + : html``; + } + + private renderEqSubFunctions(): TemplateResult { + const eqSubFunctions = getChildElementsByTagName( + this.element, + 'EqSubFunction' + ); + return html` ${eqSubFunctions.map( + eqSubFunction => + html`` + )}`; + } + + private renderAddButtons(): TemplateResult[] { + return childTags(this.element).map( + child => + html`${child}` + ); + } + + render(): TemplateResult { + return html` + this.openEditWizard()} + > + this.remove()} + > + (this.addMenu.open = true)} + > { + const tagName = ((
    e.target).selected).value; + this.openCreateWizard(tagName); + }} + >${this.renderAddButtons()} + ${renderGeneralEquipment(this.doc, this.element, this.showfunctions)} + ${this.renderLNodes()}${this.renderEqSubFunctions()}`; + } + + static styles = css` + abbr { + text-decoration: none; + border-bottom: none; + } + + .container.lnode { + display: grid; + grid-gap: 12px; + padding: 8px 12px 16px; + box-sizing: border-box; + grid-template-columns: repeat(auto-fit, minmax(64px, auto)); + } + `; +} diff --git a/packages/open-scd/src/editors/substation/eq-sub-function-editor.ts b/packages/open-scd/src/editors/substation/eq-sub-function-editor.ts new file mode 100644 index 0000000000..c4e41e623c --- /dev/null +++ b/packages/open-scd/src/editors/substation/eq-sub-function-editor.ts @@ -0,0 +1,184 @@ +import { + html, + LitElement, + TemplateResult, + property, + customElement, + state, + css, + query, +} from 'lit-element'; + +import { translate } from 'lit-translate'; + +import '@material/mwc-icon-button'; +import '@material/mwc-list/mwc-list-item'; +import '@material/mwc-menu'; +import { IconButton } from '@material/mwc-icon-button'; +import { ListItem } from '@material/mwc-list/mwc-list-item'; +import { Menu } from '@material/mwc-menu'; + +import '../../action-pane.js'; +import './general-equipment-editor.js'; +import { + getChildElementsByTagName, + newActionEvent, + newWizardEvent, + SCLTag, + tags, +} from '../../foundation.js'; +import { emptyWizard, wizards } from '../../wizards/wizard-library.js'; +import { classMap } from 'lit-html/directives/class-map.js'; +import { renderGeneralEquipment } from './foundation.js'; + +function childTags(element: Element | null | undefined): SCLTag[] { + if (!element) return []; + + return tags[element.tagName].children.filter( + child => wizards[child].create !== emptyWizard + ); +} +/** Pane rendering `EqSubFunction` element with its children */ +@customElement('eq-sub-function-editor') +export class EqSubFunctionEditor extends LitElement { + /** The document being edited as provided to editor by [[`Zeroline`]]. */ + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + /** The edited `EqSubFunction` element */ + @property({ attribute: false }) + element!: Element; + @property({ type: Boolean }) + showfunctions = false; + @state() + private get header(): string { + const name = this.element.getAttribute('name'); + const desc = this.element.getAttribute('desc'); + const type = this.element.getAttribute('type'); + + return `${name}${desc ? ` - ${desc}` : ''}${type ? ` (${type})` : ''}`; + } + + @query('mwc-menu') addMenu!: Menu; + @query('mwc-icon-button[icon="playlist_add"]') addButton!: IconButton; + + private openEditWizard(): void { + const wizard = wizards['EqSubFunction'].edit(this.element); + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + + remove(): void { + if (this.element.parentElement) + this.dispatchEvent( + newActionEvent({ + old: { + parent: this.element.parentElement, + element: this.element, + }, + }) + ); + } + + private openCreateWizard(tagName: string): void { + const wizard = wizards[tagName].create(this.element!); + + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + + updated(): void { + this.addMenu.anchor = this.addButton; + } + + private renderLNodes(): TemplateResult { + const lNodes = getChildElementsByTagName(this.element, 'LNode'); + + return lNodes.length + ? html`
    + ${lNodes.map( + lNode => + html`` + )} +
    ` + : html``; + } + + private renderEqSubFunctions(): TemplateResult { + const eqSubFunctions = getChildElementsByTagName( + this.element, + 'EqSubFunction' + ); + return html` ${eqSubFunctions.map( + eqSubFunction => + html`` + )}`; + } + + private renderAddButtons(): TemplateResult[] { + return childTags(this.element).map( + child => + html`${child}` + ); + } + + render(): TemplateResult { + return html` + this.openEditWizard()} + > + this.remove()} + > + (this.addMenu.open = true)} + > { + const tagName = ((
    e.target).selected).value; + this.openCreateWizard(tagName); + }} + >${this.renderAddButtons()} + ${renderGeneralEquipment(this.doc, this.element, this.showfunctions)} + ${this.renderLNodes()}${this.renderEqSubFunctions()}`; + } + + static styles = css` + abbr { + text-decoration: none; + border-bottom: none; + } + + .container.lnode { + display: grid; + grid-gap: 12px; + padding: 8px 12px 16px; + box-sizing: border-box; + grid-template-columns: repeat(auto-fit, minmax(64px, auto)); + } + `; +} diff --git a/packages/open-scd/src/editors/substation/foundation.ts b/packages/open-scd/src/editors/substation/foundation.ts new file mode 100644 index 0000000000..116c6ad56b --- /dev/null +++ b/packages/open-scd/src/editors/substation/foundation.ts @@ -0,0 +1,680 @@ +import { css, html, LitElement, TemplateResult } from 'lit-element'; +import { classMap } from 'lit-html/directives/class-map.js'; + +import './function-editor.js'; + +import { + identity, + newActionEvent, + isPublic, + getChildElementsByTagName, +} from '../../foundation.js'; +import { + circuitBreakerIcon, + disconnectorIcon, + currentTransformerIcon, + voltageTransformerIcon, + earthSwitchIcon, + generalConductingEquipmentIcon, +} from '../../icons/icons.js'; +import { typeStr } from '../../wizards/conductingequipment.js'; +import { Select } from '@material/mwc-select'; +import { WizardTextField } from '../../wizard-textfield.js'; +import { translate } from 'lit-translate'; +import { BayEditor } from './bay-editor.js'; +import { VoltageLevelEditor } from './voltage-level-editor.js'; +import { SubstationEditor } from './substation-editor.js'; + +function containsReference(element: Element, iedName: string): boolean { + return Array.from(element.getElementsByTagName('LNode')) + .filter(isPublic) + .some(lnode => lnode.getAttribute('iedName') === iedName); +} + +function isReferencedItself(element: Element, iedName: string): boolean { + return (Array.from(element.children)).some( + child => + child.tagName === 'LNode' && child.getAttribute('iedName') === iedName + ); +} + +function hasReferencedChildren(element: Element, iedName: string): boolean { + const threshold = element.tagName === 'Bay' ? 0 : 1; + return ( + (Array.from(element.children)).filter(child => + containsReference(child, iedName) + ).length > threshold + ); +} + +function hasOurs(element: Element, iedName: string): boolean { + return Array.from(element.getElementsByTagName('LNode')) + .filter(isPublic) + .some(lnode => lnode.getAttribute('iedName') === iedName); +} + +function getOurs(element: Element, iedName: string): Element[] { + return Array.from(element.getElementsByTagName('LNode')) + .filter(isPublic) + .filter(lnode => lnode.getAttribute('iedName') === iedName); +} + +function hasTheirs(element: Element, iedName: string): boolean { + const ours = getOurs(element, iedName); + const scl = element.closest('SCL')!; + + return Array.from(scl.getElementsByTagName('LNode')) + .filter(isPublic) + .filter(lnode => lnode.getAttribute('iedName') === iedName) + .some(lnode => !ours.includes(lnode)); +} + +export function attachedIeds( + element: Element, + remainingIeds: Set +): Element[] { + const attachedIeds: Element[] = []; + for (const ied of remainingIeds) { + const iedName = ied.getAttribute('name')!; + + if (element.tagName === 'SCL') { + if (!hasOurs(element, iedName) || hasReferencedChildren(element, iedName)) + attachedIeds.push(ied); + + continue; + } + + if (hasTheirs(element, iedName)) continue; + if ( + hasReferencedChildren(element, iedName) || + isReferencedItself(element, iedName) + ) + attachedIeds.push(ied); + } + + for (const ied of attachedIeds) { + remainingIeds.delete(ied); + } + + return attachedIeds; +} + +export function getAttachedIeds( + doc: XMLDocument +): (element: Element) => Element[] { + return (element: Element) => { + const ieds = new Set( + Array.from(doc.querySelectorAll('IED')).filter(isPublic) + ); + + return attachedIeds(element, ieds); + }; +} + +/** Whether the LNode reference valid relatively (IED agnostic) */ +function validRelativeReference( + ied: Element, + lNode: Element +): Element | undefined { + const [ldInst, prefix, lnClass, lnInst] = [ + 'ldInst', + 'prefix', + 'lnClass', + 'lnInst', + ].map(name => lNode.getAttribute(name)); + + return Array.from(ied.querySelectorAll('LN, LN0')) + .filter(isPublic) + .find( + anyLn => + anyLn?.closest('LDevice')?.getAttribute('inst') === ldInst && + (anyLn.getAttribute('prefix') ?? '') === (prefix ?? '') && + (anyLn.getAttribute('lnClass') ?? '') === (lnClass ?? '') && + (anyLn.getAttribute('inst') ?? '') === (lnInst ?? '') + ); +} + +/** Identity of LNode with iedName !== None is global and independent of parent*/ +function lNodeRegistry(doc: XMLDocument): (newLNode: Element) => boolean { + const lNodes = new Set( + Array.from(doc.querySelectorAll('LNode')) + .filter(isPublic) + .map(lNode => identity(lNode)) + ); + + return (newLNode: Element) => { + if (lNodes.has(identity(newLNode))) return true; + + lNodes.add(identity(newLNode)); + return false; + }; +} + +/** + * Clones - deep copy - substation element cloneEntity with removed single line diagram + * @param cloneEntity - substation element to be cloned + * @param newName - name of the clone + * @param iedRedirect - redirection information for LNode elements (all LNodes's are removed for undefined) + * @returns a deep cloned node without single line diagram information + */ +export function substationElementClone( + cloneEntity: Element, + newName: string, + iedRedirect?: Partial> +): Element { + const usedLNodes = lNodeRegistry(cloneEntity.ownerDocument); + + const clone: Element = cloneEntity.cloneNode(true); + clone.querySelectorAll('LNode').forEach(lNode => { + const oldIedName = lNode.getAttribute('iedName'); + + if (oldIedName === 'None') return; // non referenced LNode + if (!oldIedName) { + //iedName required + lNode.parentElement?.removeChild(lNode); + return; + } + + // no or invalid user choice + if (!iedRedirect || !iedRedirect[oldIedName]) { + lNode.parentElement?.removeChild(lNode); + return; + } + + // user decide to remove LNode + if (iedRedirect[oldIedName] === 'No') { + lNode.parentElement?.removeChild(lNode); + return; + } + + lNode.setAttribute('iedName', iedRedirect[oldIedName]!); + + // new LNode already in use + if (usedLNodes(lNode)) { + lNode.parentElement?.removeChild(lNode); + return; + } + + const ied = cloneEntity.ownerDocument.querySelector( + `IED[name="${iedRedirect[oldIedName]}"]` + ); + if (!ied || !validRelativeReference(ied, lNode)) { + lNode.parentElement?.removeChild(lNode); + return; + } + }); + + clone + .querySelectorAll('Terminal:not([cNodeName="grounded"])') + .forEach(terminal => terminal.parentElement?.removeChild(terminal)); + // FIXME(JakobVogelsang): for the moment removes terminal as well. + // For later terminal keep might be the better choice + + clone + .querySelectorAll('ConnectivityNode') + .forEach(condNode => condNode.parentElement?.removeChild(condNode)); + // FIXME(JakobVogelsang): for the moment beeing connectivity node remove as well. + // For later connectivity keep might be the better choice to preserve substation structure + + clone.setAttribute('name', newName); + + return clone; +} + +function cloneWithRedirect(evt: Event, cloneEntity: Element): void { + const dialog = (evt.target)?.parentElement; + if (!dialog) return; + + const children = <(Select | WizardTextField)[]>( + Array.from(dialog.querySelectorAll('mwc-select, wizard-textfield')) + ); + if (!children.every(child => child.checkValidity())) return; + + const nameField = dialog.querySelector('wizard-textfield')!; + + const iedRedirects = Array.from( + dialog.querySelectorAllinputs.find(i => i.label === 'values'); + const selectedElement = values.selected + ? templates.querySelector(`DAType[id="${values.selected.value}"]`) + : null; + const element = values.selected + ? selectedElement!.cloneNode(true) + : createElement(parent.ownerDocument, 'DAType', {}); + + element.setAttribute('id', id); + if (desc) element.setAttribute('desc', desc); + + const actions: Create[] = []; + + if (selectedElement) + addReferencedDataTypes(selectedElement, parent).forEach(action => + actions.push(action) + ); + + actions.push({ + new: { + parent, + element, + }, + }); + + return unifyCreateActionArray(actions); + }; +} + +export function createDATypeWizard( + parent: Element, + templates: Document +): Wizard { + return [ + { + title: get('datype.wizard.title.add'), + primary: { + icon: 'add', + label: get('add'), + action: addPredefinedDAType(parent, templates), + }, + content: [ + html` + ${Array.from(templates.querySelectorAll('DAType')).map( + datype => + html`${datype.getAttribute('id')?.replace('OpenSCD_', '')} + ${datype.querySelectorAll('BDA').length} + ` + )} + `, + html``, + html``, + ], + }, + ]; +} diff --git a/packages/open-scd/src/editors/templates/dotype-wizards.ts b/packages/open-scd/src/editors/templates/dotype-wizards.ts new file mode 100644 index 0000000000..ab8af69770 --- /dev/null +++ b/packages/open-scd/src/editors/templates/dotype-wizards.ts @@ -0,0 +1,445 @@ +import { html } from 'lit-html'; +import { get, translate } from 'lit-translate'; + +import '@material/mwc-button'; +import '@material/mwc-list'; +import '@material/mwc-list/mwc-list-item'; +import '@material/mwc-select'; +import { Select } from '@material/mwc-select'; +import { SingleSelectedEvent } from '@material/mwc-list/mwc-list-foundation'; +import { ListItem } from '@material/mwc-list/mwc-list-item'; +import { List } from '@material/mwc-list'; + +import '../../wizard-textfield.js'; +import { + cloneElement, + Create, + createElement, + EditorAction, + find, + getValue, + identity, + isPublic, + newActionEvent, + newSubWizardEvent, + newWizardEvent, + Replace, + Wizard, + WizardActor, + WizardInputElement, + WizardMenuActor, +} from '../../foundation.js'; +import { createDaWizard, editDAWizard } from '../../wizards/da.js'; +import { patterns } from '../../wizards/foundation/limits.js'; +import { + addReferencedDataTypes, + allDataTypeSelector, + CreateOptions, + unifyCreateActionArray, + UpdateOptions, + WizardOptions, +} from './foundation.js'; + +function remove(element: Element): WizardMenuActor { + return (wizard: Element): void => { + wizard.dispatchEvent( + newActionEvent({ old: { parent: element.parentElement!, element } }) + ); + wizard.dispatchEvent(newWizardEvent()); + }; +} + +function updateSDoAction(element: Element): WizardActor { + return (inputs: WizardInputElement[]): EditorAction[] => { + const name = getValue(inputs.find(i => i.label === 'name')!)!; + const desc = getValue(inputs.find(i => i.label === 'desc')!); + const type = getValue(inputs.find(i => i.label === 'type')!)!; + + const actions: EditorAction[] = []; + if ( + name === element.getAttribute('name') && + desc === element.getAttribute('desc') && + type === element.getAttribute('type') + ) { + return []; + } + + const newElement = cloneElement(element, { name, desc, type }); + actions.push({ old: { element }, new: { element: newElement } }); + + return actions; + }; +} + +function createSDoAction(parent: Element): WizardActor { + return (inputs: WizardInputElement[]): EditorAction[] => { + const name = getValue(inputs.find(i => i.label === 'name')!)!; + const desc = getValue(inputs.find(i => i.label === 'desc')!); + const type = getValue(inputs.find(i => i.label === 'type')!); + + const actions: EditorAction[] = []; + + const element = createElement(parent.ownerDocument, 'SDO', { + name, + desc, + type, + }); + actions.push({ + new: { + parent, + element, + }, + }); + + return actions; + }; +} + +function sDOWizard(options: WizardOptions): Wizard | undefined { + const doc = (options).doc + ? (options).doc + : (options).parent.ownerDocument; + const sdo = find(doc, 'SDO', (options).identity ?? NaN); + + const [title, action, type, menuActions, name, desc] = sdo + ? [ + get('sdo.wizard.title.edit'), + updateSDoAction(sdo), + sdo.getAttribute('type'), + [{ icon: 'delete', label: get('remove'), action: remove(sdo) }], + sdo.getAttribute('name'), + sdo.getAttribute('desc'), + ] + : [ + get('sdo.wizard.title.add'), + createSDoAction((options).parent), + null, + undefined, + '', + null, + ]; + + const types = Array.from(doc.querySelectorAll('DOType')) + .filter(isPublic) + .filter(type => type.getAttribute('id')); + + return [ + { + title, + element: sdo ?? undefined, + primary: { icon: '', label: get('save'), action }, + menuActions, + content: [ + html` + >`, + html``, + html`${types.map( + dataType => + html`${dataType.id}` + )}`, + ], + }, + ]; +} + +function addPredefinedDOType( + parent: Element, + templates: XMLDocument +): WizardActor { + return (inputs: WizardInputElement[]): EditorAction[] => { + const id = getValue(inputs.find(i => i.label === 'id')!); + + if (!id) return []; + + const existId = Array.from( + templates.querySelectorAll(allDataTypeSelector) + ).some(type => type.getAttribute('id') === id); + + if (existId) return []; + + const desc = getValue(inputs.find(i => i.label === 'desc')!); + const cdc = getValue(inputs.find(i => i.label === 'cdc')!)!; + + const values = ( + (e.target).value; + const cdc = + templates.querySelector(`DOType[id="${doTypeId}"]`)?.getAttribute('cdc') ?? + null; + + if (cdc) cdcUI.value = cdc; + cdcUI.disabled = true; +} + +export function createDOTypeWizard( + parent: Element, + templates: Document +): Wizard { + return [ + { + title: get('dotype.wizard.title.add'), + primary: { + icon: 'add', + label: get('add'), + action: addPredefinedDOType(parent, templates), + }, + content: [ + html` onSelectTemplateDOType(e, templates)} + > + ${Array.from(templates.querySelectorAll('DOType')).map( + datype => + html`${datype.getAttribute('id')?.replace('OpenSCD_', '')} + ${datype.querySelectorAll('SDO,DA').length} + ` + )} + `, + html``, + html``, + html``, + ], + }, + ]; +} + +function openAddSdo(parent: Element): WizardMenuActor { + return (wizard: Element): void => { + wizard.dispatchEvent(newSubWizardEvent(() => sDOWizard({ parent })!)); + }; +} + +function openAddDa(parent: Element): WizardMenuActor { + return (wizard: Element): void => { + wizard.dispatchEvent(newSubWizardEvent(() => createDaWizard(parent)!)); + }; +} + +function updateDOTypeAction(element: Element): WizardActor { + return (inputs: WizardInputElement[]): EditorAction[] => { + const id = getValue(inputs.find(i => i.label === 'id')!)!; + const desc = getValue(inputs.find(i => i.label === 'desc')!); + const cdc = getValue(inputs.find(i => i.label === 'CDC')!)!; + + if ( + id === element.getAttribute('id') && + desc === element.getAttribute('desc') && + cdc == element.getAttribute('cdc') + ) + return []; + + const newElement = cloneElement(element, { id, desc, cdc }); + + const actions: Replace[] = []; + actions.push({ old: { element }, new: { element: newElement } }); + + const oldId = element.getAttribute('id')!; + Array.from( + element.ownerDocument.querySelectorAll( + `LNodeType > DO[type="${oldId}"], DOType > SDO[type="${oldId}"]` + ) + ).forEach(oldDo => { + const newDo = oldDo.cloneNode(false); + newDo.setAttribute('type', id); + + actions.push({ old: { element: oldDo }, new: { element: newDo } }); + }); + + return [ + { title: get('dotype.action.edit', { oldId, newId: id }), actions }, + ]; + }; +} + +export function dOTypeWizard( + dOTypeIdentity: string, + doc: XMLDocument +): Wizard | undefined { + const dotype = find(doc, 'DOType', dOTypeIdentity); + if (!dotype) return undefined; + + return [ + { + title: get('dotype.wizard.title.edit'), + element: dotype, + primary: { + icon: '', + label: get('save'), + action: updateDOTypeAction(dotype), + }, + menuActions: [ + { + label: get('remove'), + icon: 'delete', + action: remove(dotype), + }, + { + label: get('scl.DO'), + icon: 'playlist_add', + action: openAddSdo(dotype), + }, + { + label: get('scl.DA'), + icon: 'playlist_add', + action: openAddDa(dotype), + }, + ], + content: [ + html``, + html``, + html``, + html` + { + const item = (e.target).selected; + + const daIdentity = ((e.target).selected).value; + const da = find(doc, 'DA', daIdentity); + + const wizard = item.classList.contains('DA') + ? da + ? editDAWizard(da) + : undefined + : sDOWizard({ + identity: item.value, + doc, + }); + + if (wizard) e.target!.dispatchEvent(newSubWizardEvent(wizard)); + }} + > + ${Array.from(dotype.querySelectorAll('SDO, DA')).map( + daorsdo => + html`${daorsdo.getAttribute('name')}${daorsdo.tagName === 'SDO' || + daorsdo.getAttribute('bType') === 'Enum' || + daorsdo.getAttribute('bType') === 'Struct' + ? '#' + daorsdo.getAttribute('type') + : daorsdo.getAttribute('bType')}` + )} + + `, + ], + }, + ]; +} diff --git a/packages/open-scd/src/editors/templates/enumtype-wizard.ts b/packages/open-scd/src/editors/templates/enumtype-wizard.ts new file mode 100644 index 0000000000..c33d39b489 --- /dev/null +++ b/packages/open-scd/src/editors/templates/enumtype-wizard.ts @@ -0,0 +1,366 @@ +import { html } from 'lit-element'; +import { get, translate } from 'lit-translate'; + +import '@material/mwc-button'; +import '@material/mwc-list'; +import '@material/mwc-list/mwc-list-item'; +import '@material/mwc-select'; +import { List } from '@material/mwc-list'; +import { ListItem } from '@material/mwc-list/mwc-list-item'; +import { SingleSelectedEvent } from '@material/mwc-list/mwc-list-foundation'; +import { Select } from '@material/mwc-select'; + +import '../../wizard-textfield.js'; +import { + cloneElement, + createElement, + EditorAction, + find, + getValue, + identity, + isPublic, + newActionEvent, + newSubWizardEvent, + newWizardEvent, + patterns, + Replace, + Wizard, + WizardActor, + WizardInputElement, + WizardMenuActor, +} from '../../foundation.js'; +import { CreateOptions, UpdateOptions, WizardOptions } from './foundation.js'; + +function remove(element: Element): WizardMenuActor { + return (wizard: Element): void => { + wizard.dispatchEvent( + newActionEvent({ old: { parent: element.parentElement!, element } }) + ); + wizard.dispatchEvent(newWizardEvent()); + }; +} + +function nextOrd(parent: Element): string { + const maxOrd = Math.max( + ...Array.from(parent.children).map(child => + parseInt(child.getAttribute('ord') ?? '-2', 10) + ) + ); + return isFinite(maxOrd) ? (maxOrd + 1).toString(10) : '0'; +} + +function createEnumValAction(parent: Element): WizardActor { + return (inputs: WizardInputElement[]): EditorAction[] => { + const value = getValue(inputs.find(i => i.label === 'value')!); + const desc = getValue(inputs.find(i => i.label === 'desc')!); + const ord = + getValue(inputs.find(i => i.label === 'ord')!) || nextOrd(parent); + + const element = createElement(parent.ownerDocument, 'EnumVal', { + ord, + desc, + }); + + element.textContent = value; + + const action = { + new: { + parent, + element, + }, + }; + + return [action]; + }; +} + +function updateEnumValAction(element: Element): WizardActor { + return (inputs: WizardInputElement[]): EditorAction[] => { + const value = getValue(inputs.find(i => i.label === 'value')!) ?? ''; + const desc = getValue(inputs.find(i => i.label === 'desc')!); + const ord = + getValue(inputs.find(i => i.label === 'ord')!) || + element.getAttribute('ord') || + nextOrd(element.parentElement!); + + if ( + value === element.textContent && + desc === element.getAttribute('desc') && + ord === element.getAttribute('ord') + ) + return []; + + const newElement = cloneElement(element, { desc, ord }); + newElement.textContent = value; + + return [{ old: { element }, new: { element: newElement } }]; + }; +} + +function eNumValWizard(options: WizardOptions): Wizard { + const doc = (options).doc + ? (options).doc + : (options).parent.ownerDocument; + const enumval = find( + doc, + 'EnumVal', + (options).identity ?? NaN + ); + + const [title, action, ord, desc, value, menuActions] = enumval + ? [ + get('enum-val.wizard.title.edit'), + updateEnumValAction(enumval), + enumval.getAttribute('ord'), + enumval.getAttribute('desc'), + enumval.textContent, + [ + { + icon: 'delete', + label: get('remove'), + action: remove(enumval), + }, + ], + ] + : [ + get('enum-val.wizard.title.add'), + createEnumValAction((options).parent), + nextOrd((options).parent), + null, // desc is uncommon on EnumVal + '', + undefined, + ]; + + return [ + { + title, + element: enumval ?? undefined, + primary: { + icon: '', + label: 'Save', + action: action, + }, + menuActions, + content: [ + html``, + html``, + html``, + ], + }, + ]; +} + +function createAction(parent: Element, templates: XMLDocument): WizardActor { + return (inputs: WizardInputElement[]): EditorAction[] => { + const id = getValue(inputs.find(i => i.label === 'id')!); + + if (!id) return []; + + const desc = getValue(inputs.find(i => i.label === 'desc')!); + const values = inputs.find(i => i.label === 'lnClass'))?.selected + ?.value; + const templateLNodeType = value + ? find(templates, 'LNodeType', value) + : null; + + const newLNodeType = templateLNodeType + ? templateLNodeType!.cloneNode(true) + : createElement(parent.ownerDocument, 'LNodeType', { + lnClass: value ?? '', + }); + + newLNodeType.setAttribute('id', id); + if (desc) newLNodeType.setAttribute('desc', desc); + + if (templateLNodeType) + return addPredefinedLNodeType(parent, newLNodeType, templateLNodeType); + + const allDo = getAllDataObjects(nsd74, value!, nsd7420); + wizard.dispatchEvent( + newWizardEvent(createLNodeTypeHelperWizard(parent, newLNodeType, allDo)) + ); + + wizard.dispatchEvent(newWizardEvent()); + return []; + }; +} + +function onLnClassChange(e: Event, templates: XMLDocument): void { + const identity = ( + this.dispatchEvent(newPendingStateEvent(this.getTemplateFile(evt)))} + /> + + { + const input = ( + this.shadowRoot!.querySelector('#template-file') + ); + input?.click(); + }} + > + + ${this.renderCloseButton()}`; + } + + private renderDialog( + content: TemplateResult, + heading: string + ): TemplateResult { + return html` + ${content} + `; + } + + render(): TemplateResult { + if (!this.doc) return html``; + + if (this.selectedProjectIed && this.selectedTemplateIed) { + return this.renderDialog( + this.renderCompare(), + get('compare-ied.resultTitle') + ); + } else if (this.templateDoc) { + return this.renderDialog( + this.renderIEDLists(), + get('compare-ied.selectIedTitle') + ); + } else { + return this.renderDialog( + this.renderSelectTemplateFile(), + get('compare-ied.selectProjectTitle') + ); + } + } + + static styles = css` + mwc-dialog { + --mdc-dialog-min-width: 64vw; + } + + .splitContainer { + display: flex; + padding: 8px 6px 16px; + height: 64vh; + } + + .iedList { + flex: 50%; + margin: 0px 6px 0px; + min-width: 300px; + height: 100%; + overflow-y: auto; + } + + .resultTitle { + font-weight: bold; + } + `; +} diff --git a/packages/open-scd/src/menu/ExportCommunication.ts b/packages/open-scd/src/menu/ExportCommunication.ts new file mode 100644 index 0000000000..acb49fc455 --- /dev/null +++ b/packages/open-scd/src/menu/ExportCommunication.ts @@ -0,0 +1,103 @@ +import { LitElement, property } from 'lit-element'; +import { get } from 'lit-translate'; + +import { formatXml, newLogEvent } from '../foundation.js'; + +function cloneAttributes(destElement: Element, sourceElement: Element) { + let attr; + const attributes = Array.prototype.slice.call(sourceElement.attributes); + while ((attr = attributes.pop())) { + destElement.setAttribute(attr.nodeName, attr.nodeValue); + } +} + +/** + * Take an XMLDocument and pretty-print, format it, attach it to a document link and then download it. + * @param doc - The XML document + * @param document - The element to attach to within the DOM + * @param filename - The filename to produce + * @returns The blob object that is serialised + */ +export function saveXmlBlob( + doc: XMLDocument, + document: Document, + filename: string +): void { + const blob = new Blob( + [formatXml(new XMLSerializer().serializeToString(doc))], + { + type: 'application/xml', + } + ); + + const a = document.createElement('a'); + a.download = filename; + a.href = URL.createObjectURL(blob); + a.dataset.downloadurl = ['application/xml', a.download, a.href].join(':'); + a.style.display = 'none'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + setTimeout(function () { + URL.revokeObjectURL(a.href); + }, 5000); +} + +/** + * Plug-in to allow exporting of the Communication SCL element as an XML file. + */ +export default class ExportCommunication extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + @property({ attribute: false }) doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + @property({ attribute: false }) docName!: string; + + /** Entry point for this plug-in */ + async run(): Promise { + // create document + const sclNamespace = 'http://www.iec.ch/61850/2003/SCL'; + const sclDoc = document.implementation.createDocument( + sclNamespace, + 'SCL', + null + ); + const pi = sclDoc.createProcessingInstruction( + 'xml', + 'version="1.0" encoding="UTF-8"' + ); + sclDoc.insertBefore(pi, sclDoc.firstChild); + + // ensure schema revision and namespace definitions are transferred + cloneAttributes(sclDoc.documentElement, this.doc.documentElement); + + const communicationSection = this.doc.querySelector( + ':root > Communication' + ); + + if (communicationSection) { + const header = this.doc.querySelector(':root > Header')?.cloneNode(true); + const communication = this.doc + .querySelector(':root > Communication') + ?.cloneNode(true); + + if (header) sclDoc.documentElement.appendChild(header); + sclDoc.documentElement.appendChild(communication); + + const ending = this.docName.slice(0, -4); + let docName = `${this.docName}-Communication.scd`; + // use filename extension if there seems to be one + if (ending.slice(0, 1) === '.') { + docName = `${this.docName.slice(0, -4)}-Communication${ending}`; + } + saveXmlBlob(sclDoc, document, docName); + } else { + this.dispatchEvent( + newLogEvent({ + kind: 'warning', + title: get('exportCommunication.noCommunicationSection'), + }) + ); + } + } +} diff --git a/packages/open-scd/src/menu/Help.ts b/packages/open-scd/src/menu/Help.ts new file mode 100644 index 0000000000..fee83f8e3d --- /dev/null +++ b/packages/open-scd/src/menu/Help.ts @@ -0,0 +1,81 @@ +import { html, LitElement } from 'lit-element'; +import { unsafeHTML } from 'lit-html/directives/unsafe-html'; +import * as marked from 'marked'; + +import '@material/mwc-icon'; + +import '../finder-list.js'; +import { newWizardEvent, Wizard } from '../foundation.js'; +import { openSCDIcon } from '../icons/icons.js'; +import { Directory } from '../finder-list.js'; + +function aboutBox(version: string) { + return html`
    +
    + ${openSCDIcon} +
    +

    OpenSCD

    + V${version} +
    +
    +
    +
    +

    Licences

    +

    + The IEC 61850 XSD and NSD code components used are distributed + under their + end user licence agreement.
    This + project's source code is licensed under the + Apache 2.0 license and available on + GitHub. +

    +

    © 2020-2021 OMICRON electronics GmbH

    +

    Help

    +
    `; +} + +async function getLinkedPages(path: string[]): Promise { + const edition = await (await fetch('/manifest.json')).json(); + if (path.length === 0) { + return { path, header: aboutBox(edition.version), entries: ['Home'] }; + } + + const page = path[path.length - 1].replace(/ /g, '-'); + const res = await fetch(`/public/md/${page}.md`); + const md = await res.text(); + const unlinkedMd = md.replace( + /\[([^\]]*)\]\(https:..github.com.openscd.open-scd.wiki.([^)]*)\)/g, + `$1` + ); + const header = html`
    + ${page === 'Home' ? aboutBox(edition.version) : html``} + ${unsafeHTML(marked.parse(unlinkedMd))} +
    `; + const entries = Array.from( + md.matchAll(/\(https:..github.com.openscd.open-scd.wiki.([^)]*)\)/g) + ).map(([_, child]) => child.replace(/-/g, ' ')); + + return { path, header, entries }; +} + +export function aboutBoxWizard(): Wizard { + return [ + { + title: 'Help', + content: [ + html``, + ], + }, + ]; +} + +export default class HelpPlugin extends LitElement { + async run(): Promise { + this.dispatchEvent(newWizardEvent(aboutBoxWizard())); + } +} diff --git a/packages/open-scd/src/menu/ImportIEDs.ts b/packages/open-scd/src/menu/ImportIEDs.ts new file mode 100644 index 0000000000..a0163951ec --- /dev/null +++ b/packages/open-scd/src/menu/ImportIEDs.ts @@ -0,0 +1,590 @@ +import { + css, + html, + LitElement, + property, + query, + state, + TemplateResult, +} from 'lit-element'; +import { get, translate } from 'lit-translate'; + +import '@material/mwc-list/mwc-check-list-item'; +import '@material/dialog'; +import '@material/mwc-button'; +import { Dialog } from '@material/mwc-dialog'; +import { List } from '@material/mwc-list'; +import { ListItemBase } from '@material/mwc-list/mwc-list-item-base'; + +import '../filtered-list.js'; +import { + createElement, + find, + identity, + isPublic, + newActionEvent, + newLogEvent, + SimpleAction, +} from '../foundation.js'; + +function uniqueTemplateIedName(doc: XMLDocument, ied: Element): string { + const [manufacturer, type] = ['manufacturer', 'type'].map(attr => + ied.getAttribute(attr)?.replace(/[^A-Za-z0-9_]/g, '') + ); + const nameCore = + manufacturer || type + ? `${manufacturer ?? ''}${type ? '_' + type : ''}` + : 'TEMPLATE_IED'; + + const siblingNames = Array.from(doc.querySelectorAll('IED')) + .filter(isPublic) + .map(child => child.getAttribute('name') ?? child.tagName); + if (!siblingNames.length) return nameCore + '_001'; + + let newName = ''; + for (let i = 0; i < siblingNames.length + 1; i++) { + const newDigit = (i + 1).toString().padStart(3, '0'); + newName = nameCore + '_' + newDigit; + + if (!siblingNames.includes(newName)) return newName; + } + + return newName; +} + +/** + * Transfer namespaces from one element to another + * @param destElement - Element to transfer namespaces to + * @param sourceElement - Element to transfer namespaces from + */ +function updateNamespaces(destElement: Element, sourceElement: Element) { + Array.prototype.slice + .call(sourceElement.attributes) + .filter(attr => attr.name.startsWith('xmlns:')) + .filter(attr => !destElement.hasAttribute(attr.name)) + .forEach(attr => { + destElement.setAttributeNS( + 'http://www.w3.org/2000/xmlns/', + attr.name, + attr.value + ); + }); +} + +function getSubNetwork(elements: Element[], element: Element): Element { + const existElement = elements.find( + item => item.getAttribute('name') === element.getAttribute('name') + ); + return existElement ? existElement : element.cloneNode(false); +} + +function addCommunicationElements( + ied: Element, + doc: XMLDocument +): SimpleAction[] { + const actions = []; + + const oldCommunicationElement = doc.querySelector(':root > Communication'); + + const communication = oldCommunicationElement + ? oldCommunicationElement + : createElement(doc, 'Communication', {}); + + if (!oldCommunicationElement) + actions.push({ + new: { + parent: doc.querySelector(':root')!, + element: communication, + }, + }); + + const connectedAPs = Array.from( + ied.ownerDocument.querySelectorAll( + `:root > Communication > SubNetwork > ConnectedAP[iedName="${ied.getAttribute( + 'name' + )}"]` + ) + ); + + const createdSubNetworks: Element[] = []; + + connectedAPs.forEach(connectedAP => { + const newSubNetwork = connectedAP.parentElement!; + const oldSubNetworkMatch = communication.querySelector( + `:root > Communication > SubNetwork[name="${newSubNetwork.getAttribute( + 'name' + )}"]` + ); + + const subNetwork = oldSubNetworkMatch + ? oldSubNetworkMatch + : getSubNetwork(createdSubNetworks, newSubNetwork); + const element = connectedAP.cloneNode(true); + + if (!oldSubNetworkMatch && !createdSubNetworks.includes(subNetwork)) { + actions.push({ + new: { + parent: communication, + element: subNetwork, + }, + }); + createdSubNetworks.push(subNetwork); + } + + actions.push({ + new: { + parent: subNetwork, + element, + }, + }); + }); + + return actions; +} + +function hasConnectionToIed(type: Element, ied: Element): boolean { + const data: Element = type.parentElement!; + const id = type.getAttribute('id'); + + if (!data || !id) return false; + + if (type.tagName === 'EnumType') + return Array.from( + data.querySelectorAll( + `DOType > DA[type="${id}"],DAType > BDA[type="${id}"]` + ) + ).some(typeChild => hasConnectionToIed(typeChild.parentElement!, ied)); + + if (type.tagName === 'DAType') + return Array.from( + data.querySelectorAll( + `DOType > DA[type="${id}"],DAType > BDA[type="${id}"]` + ) + ).some(typeChild => hasConnectionToIed(typeChild.parentElement!, ied)); + + if (type.tagName === 'DOType') + return Array.from( + data.querySelectorAll( + `LNodeType > DO[type="${id}"], DOType > SDO[type="${id}"]` + ) + ).some(typeChild => hasConnectionToIed(typeChild.parentElement!, ied)); + + return Array.from(ied.getElementsByTagName('LN0')) + .concat(Array.from(ied.getElementsByTagName('LN'))) + .some(anyln => anyln.getAttribute('lnType') === id); +} + +function addEnumType( + ied: Element, + enumType: Element, + parent: Element +): SimpleAction | undefined { + if (!hasConnectionToIed(enumType, ied)) return; + + const existEnumType = parent.querySelector( + `EnumType[id="${enumType.getAttribute('id')}"]` + ); + if (existEnumType && enumType.isEqualNode(existEnumType)) return; + + if (existEnumType) { + // There is an `id` conflict in the project that must be resolved by + // concatenating the IED name with the id + const data: Element = enumType.parentElement!; + const idOld = enumType.getAttribute('id'); + const idNew = ied.getAttribute('name')! + idOld; + enumType.setAttribute('id', idNew); + + data + .querySelectorAll( + `DOType > DA[type="${idOld}"],DAType > BDA[type="${idOld}"]` + ) + .forEach(type => type.setAttribute('type', idNew)); + } + + return { + new: { + parent, + element: enumType, + }, + }; +} + +function addDAType( + ied: Element, + daType: Element, + parent: Element +): SimpleAction | undefined { + if (!hasConnectionToIed(daType, ied)) return; + + const existDAType = parent.querySelector( + `DAType[id="${daType.getAttribute('id')}"]` + ); + if (existDAType && daType.isEqualNode(existDAType)) return; + + if (existDAType) { + // There is an `id` conflict in the project that must be resolved by + // concatenating the IED name with the id + const data: Element | null = daType.parentElement!; + const idOld = daType.getAttribute('id'); + const idNew = ied.getAttribute('name')! + idOld; + daType.setAttribute('id', idNew); + + data + .querySelectorAll( + `DOType > DA[type="${idOld}"],DAType > BDA[type="${idOld}"]` + ) + .forEach(type => type.setAttribute('type', idNew)); + } + + return { + new: { + parent, + element: daType, + }, + }; +} + +function addDOType( + ied: Element, + doType: Element, + parent: Element +): SimpleAction | undefined { + if (!hasConnectionToIed(doType, ied)) return; + + const existDOType = parent.querySelector( + `DOType[id="${doType.getAttribute('id')}"]` + ); + if (existDOType && doType.isEqualNode(existDOType)) return; + + if (existDOType) { + // There is an `id` conflict in the project that must be resolved by + // concatenating the IED name with the id + const data: Element = doType.parentElement!; + const idOld = doType.getAttribute('id'); + const idNew = ied.getAttribute('name')! + idOld; + doType.setAttribute('id', idNew); + + data + .querySelectorAll( + `LNodeType > DO[type="${idOld}"], DOType > SDO[type="${idOld}"]` + ) + .forEach(type => type.setAttribute('type', idNew)); + } + + return { + new: { + parent, + element: doType, + }, + }; +} + +function addLNodeType( + ied: Element, + lNodeType: Element, + parent: Element +): SimpleAction | undefined { + if (!hasConnectionToIed(lNodeType, ied)) return; + + const existLNodeType = parent.querySelector( + `LNodeType[id="${lNodeType.getAttribute('id')}"]` + ); + if (existLNodeType && lNodeType.isEqualNode(existLNodeType)) return; + + if (existLNodeType) { + // There is an `id` conflict in the project that must be resolved by + // concatenating the IED name with the id + const idOld = lNodeType.getAttribute('id')!; + const idNew = ied.getAttribute('name')!.concat(idOld); + lNodeType.setAttribute('id', idNew); + + Array.from( + ied.querySelectorAll(`LN0[lnType="${idOld}"],LN[lnType="${idOld}"]`) + ) + .filter(isPublic) + .forEach(ln => ln.setAttribute('lnType', idNew)); + } + + return { + new: { + parent, + element: lNodeType, + }, + }; +} + +function addDataTypeTemplates(ied: Element, doc: XMLDocument): SimpleAction[] { + const actions: (SimpleAction | undefined)[] = []; + + const dataTypeTemplates = doc.querySelector(':root > DataTypeTemplates') + ? doc.querySelector(':root > DataTypeTemplates')! + : createElement(doc, 'DataTypeTemplates', {}); + + if (!dataTypeTemplates.parentElement) { + actions.push({ + new: { + parent: doc.querySelector('SCL')!, + element: dataTypeTemplates, + }, + }); + } + + ied.ownerDocument + .querySelectorAll(':root > DataTypeTemplates > LNodeType') + .forEach(lNodeType => + actions.push(addLNodeType(ied, lNodeType, dataTypeTemplates!)) + ); + + ied.ownerDocument + .querySelectorAll(':root > DataTypeTemplates > DOType') + .forEach(doType => + actions.push(addDOType(ied, doType, dataTypeTemplates!)) + ); + + ied.ownerDocument + .querySelectorAll(':root > DataTypeTemplates > DAType') + .forEach(daType => + actions.push(addDAType(ied, daType, dataTypeTemplates!)) + ); + + ied.ownerDocument + .querySelectorAll(':root > DataTypeTemplates > EnumType') + .forEach(enumType => + actions.push(addEnumType(ied, enumType, dataTypeTemplates!)) + ); + + return actions.filter(item => item !== undefined); +} + +function isIedNameUnique(ied: Element, doc: Document): boolean { + const existingIedNames = Array.from(doc.querySelectorAll(':root > IED')).map( + ied => ied.getAttribute('name')! + ); + const importedIedName = ied.getAttribute('name')!; + + if (existingIedNames.includes(importedIedName)) return false; + + return true; +} + +export default class ImportingIedPlugin extends LitElement { + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + @state() + iedSelection: TemplateResult[] = []; + + @query('#importied-plugin-input') pluginFileUI!: HTMLInputElement; + @query('mwc-dialog') dialog!: Dialog; + + async run(): Promise { + this.iedSelection = []; + this.pluginFileUI.click(); + } + + async docUpdate(): Promise { + await ((this.getRootNode() as ShadowRoot).host as LitElement) + .updateComplete; + } + + private importIED(ied: Element): void { + if (ied.getAttribute('name') === 'TEMPLATE') { + const newIedName = uniqueTemplateIedName(this.doc, ied); + + ied.setAttribute('name', newIedName); + + Array.from( + ied.ownerDocument.querySelectorAll( + ':root > Communication > SubNetwork > ConnectedAP[iedName="TEMPLATE"]' + ) + ).forEach(connectedAp => connectedAp.setAttribute('iedName', newIedName)); + } + + if (!isIedNameUnique(ied, this.doc)) { + this.dispatchEvent( + newLogEvent({ + kind: 'error', + title: get('import.log.nouniqueied', { + name: ied.getAttribute('name')!, + }), + }) + ); + return; + } + + // This doesn't provide redo/undo capability as it is not using the Editing + // action API. To use it would require us to cache the full SCL file in + // OpenSCD as it is now which could use significant memory. + + // TODO: In open-scd core update this to allow including in undo/redo. + updateNamespaces( + this.doc.documentElement, + ied.ownerDocument.documentElement + ); + + const dataTypeTemplateActions = addDataTypeTemplates(ied, this.doc); + const communicationActions = addCommunicationElements(ied, this.doc); + const actions = communicationActions.concat(dataTypeTemplateActions); + actions.push({ + new: { + parent: this.doc!.querySelector(':root')!, + element: ied, + }, + }); + + this.dispatchEvent( + newActionEvent({ + title: get('editing.import', { name: ied.getAttribute('name')! }), + actions, + }) + ); + } + + private async importIEDs( + importDoc: XMLDocument, + fileName: string + ): Promise { + const documentDialog: Dialog = this.shadowRoot!.querySelector( + `mwc-dialog[data-file="${fileName}"]` + )!; + + const selectedItems = ( + (documentDialog.querySelector('filtered-list')).selected + ); + + const ieds = selectedItems + .map(item => { + return find(importDoc, 'IED', item.value); + }) + .filter(ied => ied) as Element[]; + + documentDialog.close(); + + for (const ied of ieds) { + this.importIED(ied); + await this.docUpdate(); + } + } + + async prepareImport(importDoc: XMLDocument, fileName: string): Promise { + if (!importDoc) { + this.dispatchEvent( + newLogEvent({ + kind: 'error', + title: get('import.log.loaderror'), + }) + ); + return; + } + + if (importDoc.querySelector('parsererror')) { + this.dispatchEvent( + newLogEvent({ + kind: 'error', + title: get('import.log.parsererror'), + }) + ); + return; + } + + const ieds = Array.from(importDoc.querySelectorAll(':root > IED')); + if (ieds.length === 0) { + this.dispatchEvent( + newLogEvent({ + kind: 'error', + title: get('import.log.missingied'), + }) + ); + return; + } + + if (ieds.length === 1) { + this.importIED(ieds[0]); + return await this.docUpdate(); + } + + this.buildIedSelection(importDoc, fileName); + await this.requestUpdate(); + const dialog = ( + this.shadowRoot!.querySelector(`mwc-dialog[data-file="${fileName}"]`) + ); + dialog.show(); + + // await closing of dialog + await new Promise(resolve => { + dialog.addEventListener('closed', function onClosed(evt) { + evt.target?.removeEventListener('closed', onClosed); + resolve(); + }); + }); + } + + /** Loads the file `event.target.files[0]` into [[`src`]] as a `blob:...`. */ + protected async onLoadFiles(event: Event): Promise { + const files = Array.from( + (event.target)?.files ?? [] + ); + + const promises = files.map(file => { + return { + text: file + .text() + .then(text => + new DOMParser().parseFromString(text, 'application/xml') + ), + name: file.name, + }; + }); + + for await (const file of promises) { + await this.prepareImport(await file.text, file.name); + } + } + + protected renderInput(): TemplateResult { + return html` { + this.onLoadFiles(event); + (event.target).value = ''; + }} id="importied-plugin-input" accept=".sed,.scd,.ssd,.isd,.iid,.cid,.icd" type="file">`; + } + + protected buildIedSelection(importDoc: XMLDocument, fileName: string): void { + this.iedSelection.push(html` + + ${Array.from(importDoc?.querySelectorAll(':root > IED') ?? []).map( + ied => + html`${ied.getAttribute('name')}` + )} + + + + this.importIEDs(importDoc, fileName)} + > + `); + } + + render(): TemplateResult { + return html`${this.iedSelection}${this.renderInput()}`; + } + + static styles = css` + input { + width: 0; + height: 0; + opacity: 0; + } + `; +} diff --git a/packages/open-scd/src/menu/Merge.ts b/packages/open-scd/src/menu/Merge.ts new file mode 100644 index 0000000000..b5c3afa91f --- /dev/null +++ b/packages/open-scd/src/menu/Merge.ts @@ -0,0 +1,44 @@ +import { css, html, LitElement, query, TemplateResult } from 'lit-element'; + +import { newWizardEvent } from '../foundation.js'; +import { mergeWizard } from '../wizards.js'; + +export default class MergePlugin extends LitElement { + doc!: XMLDocument; + + @query('#merge-plugin-input') pluginFileUI!: HTMLInputElement; + + mergeDoc(event: Event): void { + const file = + (event.target)?.files?.item(0) ?? false; + if (file) + file.text().then(text => { + const doc = new DOMParser().parseFromString(text, 'application/xml'); + this.dispatchEvent( + newWizardEvent( + mergeWizard(this.doc.documentElement, doc.documentElement) + ) + ); + }); + this.pluginFileUI.onchange = null; + } + + async run(): Promise { + this.pluginFileUI.click(); + } + + render(): TemplateResult { + return html` + ((event.target).value = '')} @change=${ + this.mergeDoc + } id="merge-plugin-input" accept=".sed,.scd,.ssd,.isd,.iid,.cid,.icd" type="file">`; + } + + static styles = css` + input { + width: 0; + height: 0; + opacity: 0; + } + `; +} diff --git a/packages/open-scd/src/menu/NewProject.ts b/packages/open-scd/src/menu/NewProject.ts new file mode 100644 index 0000000000..5abfa42b42 --- /dev/null +++ b/packages/open-scd/src/menu/NewProject.ts @@ -0,0 +1,76 @@ +import { html, LitElement } from 'lit-element'; +import { get } from 'lit-translate'; + +import '@material/mwc-list'; +import '@material/mwc-list/mwc-radio-list-item'; +import { ListItemBase } from '@material/mwc-list/mwc-list-item-base'; + +import '../wizard-textfield.js'; +import { + EditorAction, + newLogEvent, + newOpenDocEvent, + newWizardEvent, + Wizard, + WizardInputElement, +} from '../foundation.js'; +import { newEmptySCD, SupportedVersion } from '../schemas.js'; + +export default class NewProjectPlugin extends LitElement { + private createNewProject( + inputs: WizardInputElement[], + wizard: Element + ): EditorAction[] { + const docName = inputs[0].value?.match(/\.s[sc]d$/i) + ? inputs[0].value + : inputs[0].value + '.scd'; + const version = ( + (wizard.shadowRoot!.querySelector('mwc-list')!.selected) + .value + ); + + this.dispatchEvent(newLogEvent({ kind: 'reset' })); + this.dispatchEvent( + newOpenDocEvent(newEmptySCD(docName.slice(0, -4), version), docName) + ); + + return [{ actions: [], title: '', derived: true }]; + } + + private newProjectWizard(): Wizard { + return [ + { + title: get('menu.new'), + primary: { + icon: 'create_new_folder', + label: get('create'), + action: (inputs, wizard) => this.createNewProject(inputs, wizard), + }, + content: [ + html` + + Edition 1 (Schema 1.7) + Edition 2 (Schema 3.1) + Edition 2.1 (2007B4) + `, + ], + }, + ]; + } + + async run(): Promise { + this.dispatchEvent(newWizardEvent(this.newProjectWizard())); + } +} diff --git a/packages/open-scd/src/menu/OpenProject.ts b/packages/open-scd/src/menu/OpenProject.ts new file mode 100644 index 0000000000..915ae50a2a --- /dev/null +++ b/packages/open-scd/src/menu/OpenProject.ts @@ -0,0 +1,50 @@ +import { css, html, LitElement, query, TemplateResult } from 'lit-element'; + +import { newLogEvent, newOpenDocEvent } from '../foundation.js'; + +export default class OpenProjectPlugin extends LitElement { + @query('#open-plugin-input') pluginFileUI!: HTMLInputElement; + + async openDoc(event: Event): Promise { + const file = + (event.target)?.files?.item(0) ?? false; + if (!file) return; + + const text = await file.text(); + const docName = file.name; + const doc = new DOMParser().parseFromString(text, 'application/xml'); + + this.dispatchEvent(newLogEvent({ kind: 'reset' })); + this.dispatchEvent(newOpenDocEvent(doc, docName)); + this.pluginFileUI.onchange = null; + this.closeMenu(); + } + + private async closeMenu() { + this.dispatchEvent( + new CustomEvent('close-drawer', { + bubbles: true, + composed: true, // to traverse shadow DOM boundaries src: https://pm.dartus.fr/blog/a-complete-guide-on-shadow-dom-and-event-propagation/ + }) + ); + } + + async run(): Promise { + this.pluginFileUI.click(); + } + + render(): TemplateResult { + return html` + ((event.target).value = '')} @change=${ + this.openDoc + } id="open-plugin-input" accept=".sed,.scd,.ssd,.isd,.iid,.cid,.icd" type="file">`; + } + + static styles = css` + input { + width: 0; + height: 0; + opacity: 0; + } + `; +} diff --git a/packages/open-scd/src/menu/SaveProject.ts b/packages/open-scd/src/menu/SaveProject.ts new file mode 100644 index 0000000000..505e2e7388 --- /dev/null +++ b/packages/open-scd/src/menu/SaveProject.ts @@ -0,0 +1,49 @@ +import { LitElement, property } from 'lit-element'; + +function formatXml(xml: string, tab?: string) { + let formatted = '', + indent = ''; + + if (!tab) tab = '\t'; + xml.split(/>\s*\r\n'; + if (node.match(/^]*[^/]$/)) indent += tab; + }); + return formatted.substring(1, formatted.length - 3); +} + +export default class SaveProjectPlugin extends LitElement { + @property() doc!: XMLDocument; + @property() docName!: string; + + async run(): Promise { + if (this.doc) { + let documentAsString = formatXml( + new XMLSerializer().serializeToString(this.doc) + ); + + // Add XML declaration/prolog if it's been stripped + // TODO: This can be removed once the improved OpenSCD core edit API is present + documentAsString = documentAsString.startsWith('' + '\n' + documentAsString; + + const blob = new Blob([documentAsString], { + type: 'application/xml', + }); + + const a = document.createElement('a'); + a.download = this.docName; + a.href = URL.createObjectURL(blob); + a.dataset.downloadurl = ['application/xml', a.download, a.href].join(':'); + a.style.display = 'none'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + setTimeout(function () { + URL.revokeObjectURL(a.href); + }, 5000); + } + } +} diff --git a/packages/open-scd/src/menu/SclHistory.ts b/packages/open-scd/src/menu/SclHistory.ts new file mode 100644 index 0000000000..6797b9f54d --- /dev/null +++ b/packages/open-scd/src/menu/SclHistory.ts @@ -0,0 +1,105 @@ +import { + html, + css, + property, + query, + TemplateResult, + LitElement, +} from 'lit-element'; +import { translate } from 'lit-translate'; + +import '@material/mwc-button'; +import '@material/mwc-dialog'; +import '@material/mwc-list'; +import '@material/mwc-list/mwc-list-item'; +import { Dialog } from '@material/mwc-dialog'; + +export default class SclHistoryPlugin extends LitElement { + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + + @query('#historyLog') historyLog!: Dialog; + + private createMessage( + who: string | null, + why: string | null + ): string | undefined { + let message = who; + if (message !== null && why !== null) { + message += ' : ' + why; + } else if (why !== null) { + message = why; + } + return message ?? undefined; + } + + get sclHistory(): Element[] { + if (this.doc) { + return Array.from( + this.doc.querySelectorAll(':root > Header > History > Hitem') + ); + } + return []; + } + + async run(): Promise { + this.historyLog.open = true; + } + + renderSclHistoryEntry(element: Element): TemplateResult { + const message = this.createMessage( + element.getAttribute('who'), + element.getAttribute('why') + ); + const title = element.getAttribute('what'); + return html` + + + ${element.getAttribute('when')} + ${title} + ${message} + `; + } + + private renderSclHistory(): TemplateResult[] | TemplateResult { + if (this.sclHistory.length > 0) + return this.sclHistory + .slice() + .reverse() + .map(this.renderSclHistoryEntry, this); + else + return html` + ${translate('history.noEntries')} + `; + } + + render(): TemplateResult { + return html` + ${this.renderSclHistory()} + ${translate('close')} + `; + } + + static styles = css` + .sclHistory { + display: flex; + } + #historyLog { + --mdc-dialog-min-width: 92vw; + } + abbr { + text-decoration: none; + } + `; +} diff --git a/packages/open-scd/src/menu/SubscriberInfo.ts b/packages/open-scd/src/menu/SubscriberInfo.ts new file mode 100644 index 0000000000..537472c210 --- /dev/null +++ b/packages/open-scd/src/menu/SubscriberInfo.ts @@ -0,0 +1,175 @@ +import { LitElement } from 'lit-element'; +import { get } from 'lit-translate'; +import { + createElement, + getVersion, + newActionEvent, + SimpleAction, +} from '../foundation.js'; + +function getElementIndexOf(list: (Element | null)[], match: Element): number { + for (let i = 0; list.length; i++) if (list[i]?.isEqualNode(match)) return i; + + return -1; +} + +function addIEDName(extRef: Element, gseControl: Element): Element | null { + const [ied, accPoint, lDevice, ln, ln0] = [ + 'IED', + 'AccessPoint', + 'LDevice', + 'LN', + 'LN0', + ].map(element => extRef.closest(element)); + const anyln = ln ? ln : ln0; + + if ( + getVersion(extRef) === '2007' && + Array.from(gseControl.getElementsByTagName('IEDName')) + .filter(item => !item.closest('Private')) + .filter( + iedName => + iedName.innerHTML === ied.getAttribute('name') && + (iedName.getAttribute('apRef') ?? '') === + (accPoint.getAttribute('name') ?? '') && + (iedName.getAttribute('ldInst') ?? '') === + (lDevice.getAttribute('inst') ?? '') && + (iedName.getAttribute('prefix') ?? '') === + (anyln.getAttribute('prefix') ?? '') && + (iedName.getAttribute('lnClass') ?? '') === + (anyln.getAttribute('lnClass') ?? '') && + (iedName.getAttribute('lnInst') ?? '') === + (anyln.getAttribute('inst') ?? '') + ).length === 0 + ) { + const iedName: Element = createElement( + gseControl.ownerDocument, + 'IEDName', + { + apRef: accPoint.getAttribute('name') ?? '', + ldInst: lDevice.getAttribute('inst') ?? '', + prefix: anyln.getAttribute('prefix') ?? '', + lnClass: anyln.getAttribute('lnClass') ?? '', + lnInst: anyln.getAttribute('inst') || null, + } + ); + iedName.innerHTML = ied.getAttribute('name')!; + + return iedName; + } + + if ( + Array.from(gseControl.getElementsByTagName('IEDName')) + .filter(item => !item.closest('Private')) + .filter(iedName => iedName.innerHTML === ied.getAttribute('name')) + .length === 0 + ) { + const iedName: Element = createElement( + gseControl.ownerDocument, + 'IEDName', + {} + ); + iedName.innerHTML = ied.getAttribute('name')!; + + return iedName; + } + + return null; +} + +function getDestination(data: Element, doc: Document): Element[] { + return Array.from(doc.getElementsByTagName('ExtRef')) + .filter(item => !item.closest('Private')) + .filter( + extRef => + (extRef.getAttribute('iedName') ?? '') === + (data.closest('IED')?.getAttribute('name') ?? '') && + (extRef.getAttribute('ldInst') ?? '') === + (data.getAttribute('ldInst') ?? '') && + (extRef.getAttribute('prefix') ?? '') === + (data.getAttribute('prefix') ?? '') && + (extRef.getAttribute('lnClass') ?? '') === + (data.getAttribute('lnClass') ?? '') && + (extRef.getAttribute('lnInst') ?? '') === + (data.getAttribute('lnInst') ?? '') && + (extRef.getAttribute('doName') ?? '') === + (data.getAttribute('doName') ?? '') && + (extRef.getAttribute('daName') ?? '') === + (data.getAttribute('daName') ?? '') + ); +} + +export function createMissingIEDNameSubscriberInfo( + doc: Document +): SimpleAction[] { + const controlList = Array.from( + doc.querySelectorAll( + ':root > IED > AccessPoint > Server > LDevice > LN0 > GSEControl,' + + ':root > IED > AccessPoint > Server > LDevice > LN0 > SampledValueControl' + ) + ); + + const simpleAction: SimpleAction[] = []; + controlList.forEach(controlBlock => { + if (!controlBlock.getAttribute('datSet') || !controlBlock.parentElement) + return simpleAction; + + const ln0: Element = controlBlock.parentElement; + const dataList: Element[] = Array.from( + ln0.querySelectorAll( + `:root > IED > AccessPoint > Server > LDevice > LN0 > DataSet[name="${controlBlock.getAttribute( + 'datSet' + )}"] > FCDA` + ) + ); + + const destList: Element[] = dataList + .flatMap(data => getDestination(data, doc)) + .filter(dest => dest !== null) + .filter((v, i, a) => a.indexOf(v) === i); + + const iedNameList: (Element | null)[] = destList + .map(dest => addIEDName(dest, controlBlock)) + .filter(iedName => iedName !== null) + .filter((v, i, a) => getElementIndexOf(a, v!) === i); + + iedNameList.forEach(iedName => { + simpleAction.push({ + new: { + parent: controlBlock, + element: iedName!, + }, + }); + }); + }); + + return simpleAction; +} + +export default class SubscriberInfoPlugin extends LitElement { + doc!: XMLDocument; + + async run(): Promise { + const actions: SimpleAction[] = createMissingIEDNameSubscriberInfo( + this.doc! + ); + + if (!actions.length) + throw new Error( + get('subscriber.description') + get('subscriber.nonewitems') + ); + + this.dispatchEvent( + newActionEvent({ + title: + get('subscriber.description') + + get('subscriber.message', { + updatenumber: actions.length, + }), + actions: actions, + }) + ); + + return; + } +} diff --git a/packages/open-scd/src/menu/UpdateDescriptionABB.ts b/packages/open-scd/src/menu/UpdateDescriptionABB.ts new file mode 100644 index 0000000000..3a2db629b7 --- /dev/null +++ b/packages/open-scd/src/menu/UpdateDescriptionABB.ts @@ -0,0 +1,118 @@ +import { html, LitElement } from 'lit-element'; +import { get } from 'lit-translate'; + +import '@material/mwc-list/mwc-check-list-item'; +import { List } from '@material/mwc-list'; +import { ListItemBase } from '@material/mwc-list/mwc-list-item-base'; + +import '../filtered-list.js'; +import { + cloneElement, + find, + identity, + isPublic, + newWizardEvent, + SCLTag, + Wizard, + WizardAction, + WizardActor, + WizardInputElement, +} from '../foundation.js'; + +interface addDescItem { + desc: string; + tag: SCLTag; + identity: string | number; +} + +function addDescriptionAction(doc: XMLDocument): WizardActor { + return ( + _: WizardInputElement[], + wizard: Element, + list: List | null | undefined + ): WizardAction[] => { + const selectedItems = list!.selected; + + const actions = selectedItems.map(item => { + const desc = (item.querySelector('span')).textContent; + const [tag, identity] = item.value.split(' | '); + + const oldElement = find(doc, tag, identity)!; + const newElement = cloneElement(oldElement, { desc }); + return { old: { element: oldElement }, new: { element: newElement } }; + }); + + return [ + { + title: get('updatedesc.abb'), + actions, + }, + ]; + }; +} + +function createLogWizard(doc: XMLDocument, items: addDescItem[]): Wizard { + return [ + { + title: get('wizard.title.add', { tagName: 'desc' }), + primary: { + label: get('save'), + icon: 'save', + action: addDescriptionAction(doc), + }, + content: [ + html`${Array.from( + items.map( + item => + html`${item.desc}${item.tag + ' | ' + item.identity}` + ) + )}`, + ], + }, + ]; +} + +function addDescriptionToABB(ied: Element): addDescItem[] { + return Array.from(ied.getElementsByTagName('ExtRef')) + .filter(element => isPublic(element)) + .filter(extRef => extRef.getAttribute('intAddr')) + .map(extRef => { + const intAddr = extRef.getAttribute('intAddr')!; + const internalMapping = intAddr.split(',')[3]; //this might change as is vendor dependant!! + const oldDesc = extRef.getAttribute('desc'); + const newDesc = oldDesc + ? oldDesc + '-' + internalMapping + : internalMapping; + + return { + desc: newDesc, + tag: 'ExtRef', + identity: identity(extRef), + }; + }); +} + +/** Plug-in that enriched ExtRefs desc attribute based on intAddr attribute (ABB)*/ +export default class UpdateDescriptionAbb extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + doc!: XMLDocument; + + /** Entry point for this plug-in */ + async run(): Promise { + const items = Array.from(this.doc.querySelectorAll(':root > IED')).flatMap( + ied => addDescriptionToABB(ied) + ); + + this.dispatchEvent(newWizardEvent(createLogWizard(this.doc, items))); + } +} diff --git a/packages/open-scd/src/menu/UpdateDescriptionSEL.ts b/packages/open-scd/src/menu/UpdateDescriptionSEL.ts new file mode 100644 index 0000000000..1918a5337d --- /dev/null +++ b/packages/open-scd/src/menu/UpdateDescriptionSEL.ts @@ -0,0 +1,253 @@ +import { css, html, LitElement, query, TemplateResult } from 'lit-element'; +import { get } from 'lit-translate'; + +import '@material/mwc-list/mwc-check-list-item'; +import { List } from '@material/mwc-list'; +import { ListItemBase } from '@material/mwc-list/mwc-list-item-base'; + +import '../filtered-list.js'; +import { + cloneElement, + find, + identity, + isPublic, + newWizardEvent, + SCLTag, + Wizard, + WizardAction, + WizardActor, + WizardInputElement, +} from '../foundation.js'; + +interface SignalDescription { + desc: string; + tag: SCLTag; + identity: string | number; +} + +function addDescriptionToSEL( + ied: Element, + signalList: string[][] +): SignalDescription[] { + const iedName = ied.getAttribute('name'); + const manufacturer = ied.getAttribute('manufacturer'); + if (!iedName || manufacturer !== 'SEL') return []; + + return Array.from(ied.getElementsByTagName('DAI')) + .filter(element => isPublic(element)) + .filter(dai => { + const datasrc = dai.getAttributeNS( + 'http://www.selinc.com/2006/61850', + 'datasrc' + ); + return datasrc?.startsWith('db:'); + }) + .map(dai => { + //the next lines are vendor dependant!! + const datasrc = dai.getAttributeNS( + 'http://www.selinc.com/2006/61850', + 'datasrc' + ); + + const tag = datasrc ? datasrc.replace('db:', '') : null; + const desc = + signalList.find(row => row[2] === tag && row[1] === iedName)?.[0] ?? + null; + + return desc ? { desc, tag: 'DAI', identity: identity(dai) } : null; + }) + .filter(signalDescription => signalDescription); +} + +function addDescriptionAction(doc: XMLDocument): WizardActor { + return ( + _: WizardInputElement[], + wizard: Element, + list: List | null | undefined + ): WizardAction[] => { + const selectedItems = list!.selected; + + const actions = selectedItems.map(item => { + const desc = (item.querySelector('span')).textContent; + const [tag, identity] = item.value.split(' | '); + + const oldElement = find(doc, tag, identity)!; + const newElement = cloneElement(oldElement, { desc }); + return { old: { element: oldElement }, new: { element: newElement } }; + }); + + return [ + { + title: get('updatedesc.sel'), + actions, + }, + ]; + }; +} + +function createLogWizard(doc: XMLDocument, items: SignalDescription[]): Wizard { + return [ + { + title: get('wizard.title.add', { tagName: 'desc' }), + primary: { + label: get('save'), + icon: 'save', + action: addDescriptionAction(doc), + }, + content: [ + html`${Array.from( + items.map( + item => + html`${item.desc}${item.tag + ' | ' + item.identity}` + ) + )}`, + ], + }, + ]; +} + +function parseCsv(str: string, delimiter: ',' | ';'): string[][] { + // predefined for later use + const quoteChar = '"', + escapeChar = '\\'; + + const entries: string[][] = []; + let isInsideQuote = false; + + // Iterate over each character, keep track of current row and column (of the returned array) + for (let row = 0, col = 0, char = 0; char < str.length; char++) { + const currentChar = str[char]; + const nextChar = str[char + 1]; + + entries[row] = entries[row] || []; + entries[row][col] = entries[row][col] || ''; + + //Ignore escape character + if (currentChar === escapeChar) { + entries[row][col] += nextChar; + ++char; + continue; + } + + // Check for quoted characters. Do not miss-interpret delimiter within field + if (currentChar === quoteChar) { + isInsideQuote = !isInsideQuote; + continue; + } + + if (!isInsideQuote) { + if (currentChar === delimiter) { + ++col; + entries[row][col] = ''; + continue; + } + + if (currentChar === '\n' || currentChar === '\r') { + ++row; + col = 0; + + // Skip the next character for CRLF + if (currentChar === '\r' && nextChar === '\n') ++char; + + continue; + } + } + + entries[row][col] += currentChar; + } + + return entries; +} + +function getGuessDelimiter(csvString: string): ';' | ',' { + let numberComma = 0, + numberSemicolon = 0; + + const quoteChar = '"'; + + let isInsideQuote = false; + for (const currentChar of csvString) { + // Check for quoted characters. Do not miss-interpret delimiter within field + if (currentChar === quoteChar) { + isInsideQuote = !isInsideQuote; + continue; + } + + if (!isInsideQuote) { + if (currentChar === ';') { + numberSemicolon++; + continue; + } + + if (currentChar === ',') { + numberComma++; + continue; + } + } + } + + return numberComma > numberSemicolon ? ',' : ';'; +} + +/** + * Plug-in that enriches the desc attribute in SEL type IED elements based on a signal list + * The signal list must be a ; or , separated CSV file with 3 columns. + * 1st column: signal name + * 2nd column: IED name + * 3rd column: identifier from the SEL namespace excluding the prefix of "db:", + * similar to relay word bit name (RWB), e.g. SV24T, 51P1T, IN203 + */ +export default class UpdateDescriptionSel extends LitElement { + /** The document being edited as provided to plugins by [[`OpenSCD`]]. */ + doc!: XMLDocument; + + @query('#plugin-input') pluginFileUI!: HTMLInputElement; + + processSignalList(csvString: string): void { + const signalList = parseCsv(csvString, getGuessDelimiter(csvString)); + + const items = Array.from(this.doc.querySelectorAll('IED')) + .filter(ied => isPublic(ied)) + .flatMap(ied => addDescriptionToSEL(ied, signalList)); + + this.dispatchEvent(newWizardEvent(createLogWizard(this.doc, items))); + } + + private async onFileInput(e: Event): Promise { + const file = (e.target)?.files?.item(0) ?? false; + if (!file) return; + + this.processSignalList(await file.text()); + } + + /** Entry point for this plug-in */ + async run(): Promise { + this.pluginFileUI.click(); + } + + render(): TemplateResult { + return html` + ((event.target).value = '')} @change=${(e: Event) => + this.onFileInput( + e + )} id="plugin-input" accept=".csv" type="file">`; + } + + static styles = css` + input { + width: 0; + height: 0; + opacity: 0; + } + `; +} diff --git a/packages/open-scd/src/menu/UpdateSubstation.ts b/packages/open-scd/src/menu/UpdateSubstation.ts new file mode 100644 index 0000000000..f05bfb53e5 --- /dev/null +++ b/packages/open-scd/src/menu/UpdateSubstation.ts @@ -0,0 +1,151 @@ +import { css, html, LitElement, query, TemplateResult } from 'lit-element'; +import { get } from 'lit-translate'; + +import { + crossProduct, + find, + identity, + newWizardEvent, + SCLTag, + tags, +} from '../foundation.js'; +import { Diff, mergeWizard } from '../wizards.js'; + +export function isValidReference( + doc: XMLDocument, + identity: string | number +): boolean { + if (typeof identity !== 'string') return false; + const [iedName, ldInst, prefix, lnClass, lnInst] = identity.split(/[ /]/); + + if (!iedName || !lnClass) return false; + + if (ldInst === '(Client)') { + const [ + iedNameSelectors, + prefixSelectors, + lnClassSelectors, + lnInstSelectors, + ] = [ + [`IED[name="${iedName}"]`], + prefix ? [`[prefix="${prefix}"]`] : [':not([prefix])', '[prefix=""]'], + [`LN[lnClass="${lnClass}"]`], + lnInst ? [`[inst="${lnInst}"]`] : [':not([inst])', '[inst=""]'], + ]; + + return ( + doc.querySelector( + crossProduct( + iedNameSelectors, + ['>AccessPoint>'], + lnClassSelectors, + prefixSelectors, + lnInstSelectors + ) + .map(strings => strings.join('')) + .join(',') + ) !== null + ); + } + + const [ + iedNameSelectors, + ldInstSelectors, + prefixSelectors, + lnClassSelectors, + lnInstSelectors, + ] = [ + [`IED[name="${iedName}"]`], + [`LDevice[inst="${ldInst}"]`], + prefix ? [`[prefix="${prefix}"]`] : [':not([prefix])', '[prefix=""]'], + lnClass === 'LLN0' ? [`LN0`] : [`LN[lnClass="${lnClass}"]`], + lnInst ? [`[inst="${lnInst}"]`] : [':not([inst])', '[inst=""]'], + ]; + + return ( + doc.querySelector( + crossProduct( + iedNameSelectors, + [' '], + ldInstSelectors, + ['>'], + lnClassSelectors, + prefixSelectors, + lnInstSelectors + ) + .map(strings => strings.join('')) + .join(',') + ) !== null + ); +} + +export function mergeSubstation( + element: Element, + currentDoc: Document, + docWithSubstation: Document +): void { + element.dispatchEvent( + newWizardEvent( + mergeWizard( + // FIXME: doesn't work with multiple Substations! + currentDoc.documentElement, + docWithSubstation.documentElement, + { + title: get('updatesubstation.title'), + selected: (diff: Diff): boolean => + diff.theirs instanceof Element + ? diff.theirs.tagName === 'LNode' + ? find(currentDoc, 'LNode', identity(diff.theirs)) === null && + isValidReference(docWithSubstation, identity(diff.theirs)) + : diff.theirs.tagName === 'Substation' || + !tags['SCL'].children.includes(diff.theirs.tagName) + : diff.theirs !== null, + disabled: (diff: Diff): boolean => + diff.theirs instanceof Element && + diff.theirs.tagName === 'LNode' && + (find(currentDoc, 'LNode', identity(diff.theirs)) !== null || + !isValidReference(docWithSubstation, identity(diff.theirs))), + auto: (): boolean => true, + } + ) + ) + ); +} + +export default class UpdateSubstationPlugin extends LitElement { + doc!: XMLDocument; + + @query('#update-substation-plugin-input') pluginFileUI!: HTMLInputElement; + + async updateSubstation(event: Event): Promise { + const file = + (event.target)?.files?.item(0) ?? false; + if (!file) { + return; + } + const text = await file.text(); + const doc = new DOMParser().parseFromString(text, 'application/xml'); + + mergeSubstation(this, this.doc, doc); + this.pluginFileUI.onchange = null; + } + + async run(): Promise { + this.pluginFileUI.click(); + } + + render(): TemplateResult { + return html` + ((event.target).value = '')} + @change=${this.updateSubstation} + id="update-substation-plugin-input" accept=".sed,.scd,.ssd,.iid,.cid" type="file">`; + } + + static styles = css` + input { + width: 0; + height: 0; + opacity: 0; + } + `; +} diff --git a/packages/open-scd/src/menu/VirtualTemplateIED.ts b/packages/open-scd/src/menu/VirtualTemplateIED.ts new file mode 100644 index 0000000000..dd25019244 --- /dev/null +++ b/packages/open-scd/src/menu/VirtualTemplateIED.ts @@ -0,0 +1,340 @@ +import { + css, + html, + LitElement, + property, + query, + queryAll, + state, + TemplateResult, +} from 'lit-element'; +import { translate } from 'lit-translate'; + +import '@material/mwc-dialog'; +import '@material/mwc-list'; +import '@material/mwc-list/mwc-list-item'; +import '@material/mwc-list/mwc-check-list-item'; +import '@material/mwc-list/mwc-radio-list-item'; +import { Dialog } from '@material/mwc-dialog'; +import { CheckListItem } from '@material/mwc-list/mwc-check-list-item'; +import { Select } from '@material/mwc-select'; + +import '../filtered-list.js'; +import { + find, + getChildElementsByTagName, + identity, + newActionEvent, +} from '../foundation.js'; +import { WizardTextField } from '../wizard-textfield.js'; +import { + getFunctionNamingPrefix, + getNonLeafParent, + getSpecificationIED, + getUniqueFunctionName, + LDeviceDescription, +} from './virtualtemplateied/foundation.js'; + +export type FunctionElementDescription = { + uniqueName: string; + lNodes: Element[]; + lln0?: Element; +}; + +/** converts FunctionElementDescription's to LDeviceDescription's */ +function getLDeviceDescriptions( + functions: Record, + selectedLNodes: Element[], + selectedLLN0s: string[] +): LDeviceDescription[] { + const lDeviceDescriptions: LDeviceDescription[] = []; + + Object.values(functions).forEach(functionDescription => { + if ( + functionDescription.lNodes.some(lNode => selectedLNodes.includes(lNode)) + ) { + const lLN0 = selectedLLN0s.find(selectedLLN0 => + selectedLLN0.includes(functionDescription.uniqueName) + )!; + const lnType = lLN0?.split(': ')[1]; + + lDeviceDescriptions.push({ + validLdInst: functionDescription.uniqueName, + anyLNs: [ + { prefix: null, lnClass: 'LLN0', inst: '', lnType }, + ...functionDescription.lNodes + .filter(lNode => selectedLNodes.includes(lNode)) + .map(lNode => { + return { + prefix: getFunctionNamingPrefix(lNode), + lnClass: lNode.getAttribute('lnClass')!, + inst: lNode.getAttribute('lnInst')!, + lnType: lNode.getAttribute('lnType')!, + }; + }), + ], + }); + } + }); + + return lDeviceDescriptions; +} + +/** Groups all incomming LNode's with non-leaf parent function type elements */ +function groupLNodesToFunctions( + lNodes: Element[] +): Record { + const functionElements: Record = {}; + + lNodes.forEach(lNode => { + const parentFunction = getNonLeafParent(lNode); + if (!parentFunction) return; + + if (functionElements[identity(parentFunction)]) + functionElements[identity(parentFunction)].lNodes.push(lNode); + else { + functionElements[identity(parentFunction)] = { + uniqueName: getUniqueFunctionName(parentFunction), + lNodes: [lNode], + lln0: getChildElementsByTagName(parentFunction, 'LNode').find( + lNode => lNode.getAttribute('lnClass') === 'LLN0' + ), + }; + } + }); + + return functionElements; +} + +export default class VirtualTemplateIED extends LitElement { + @property({ attribute: false }) + doc!: XMLDocument; + @property({ type: Number }) + editCount = -1; + @state() + get isValidManufacturer(): boolean { + const manufacturer = this.dialog?.querySelector( + 'wizard-textfield[label="manufacturer"]' + )!.value; + + return (manufacturer && manufacturer !== '') || false; + } + @state() + get isValidApName(): boolean { + const apName = this.dialog?.querySelector( + 'wizard-textfield[label="AccessPoint name"]' + )!.value; + + return (apName && apName !== '') || false; + } + @state() + get someItemsSelected(): boolean { + if (!this.selectedLNodeItems) return false; + return !!this.selectedLNodeItems.length; + } + @state() + get validPriparyAction(): boolean { + return ( + this.someItemsSelected && this.isValidManufacturer && this.isValidApName + ); + } + + get unreferencedLNodes(): Element[] { + return Array.from( + this.doc.querySelectorAll('LNode[iedName="None"]') + ).filter(lNode => lNode.getAttribute('lnClass') !== 'LLN0'); + } + + get lLN0s(): Element[] { + return Array.from(this.doc.querySelectorAll('LNodeType[lnClass="LLN0"]')); + } + + @query('mwc-dialog') dialog!: Dialog; + @queryAll('mwc-check-list-item[selected]') + selectedLNodeItems?: CheckListItem[]; + + async run(): Promise { + this.dialog.open = true; + } + + private onPrimaryAction( + functions: Record + ): void { + const selectedLNode = Array.from( + this.dialog.querySelectorAll( + 'mwc-check-list-item[selected]:not([disabled])' + ) ?? [] + ).map(selectedItem => find(this.doc, 'LNode', selectedItem.value)!); + if (!selectedLNode.length) return; + + const selectedLLN0s = Array.from( + this.dialog.querySelectorAlle.target).selected?.value; + const selectedBType = (( + (e.target).parentElement!.querySelector( + 'wizard-select[label="Val"]' + )! + ); + render(html`${enumVals}`, selectValOptionUI); + selectValOptionUI.requestUpdate(); +} + +function selectBType( + e: SelectedEvent, + bType: string | null, + type: string | null +): void { + const bTypeSelected = (( + (e.target).parentElement!.querySelector( + 'wizard-select[label="Val"]' + )! + ); + if (bTypeSelected === 'Enum') selectValOptionUI.style.display = ''; + else selectValOptionUI.style.display = 'none'; + + const textfieldValOptionUI = ( + ( + + + + + + + IEC 61850-7-2 + + + 2007B3 + + + done + + + delete + + + + + IEC 61850-7-3 + + + close + + + + + IEC 61850-7-4 + + + close + + + + + IEC 61850-8-1 + + + close + + + + + Cancel + + + Reset + + + Save + + +`; +/* end snapshot Setting upload .nsdoc file using event and looks like latest snapshot */ + diff --git a/packages/open-scd/test/integration/__snapshots__/open-scd.test.snap.js b/packages/open-scd/test/integration/__snapshots__/open-scd.test.snap.js new file mode 100644 index 0000000000..ea1848c844 --- /dev/null +++ b/packages/open-scd/test/integration/__snapshots__/open-scd.test.snap.js @@ -0,0 +1,1414 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["open-scd looks like its snapshot"] = +` + + Menu + + +
  • +
  • + + + folder_open + + + Open project + + + + + + + create_new_folder + + + New project + + + + + + + save + + + Save project + + + + +
  • +
  • + + + rule_folder + + + Validate Schema + + + + + + + rule_folder + + + Validate Templates + + + + +
  • +
  • + + + snippet_folder + + + Import IEDs + + + + + + + play_circle + + + Subscriber Update + + + + + + + merge_type + + + Merge Project + + + + + + + merge_type + + + Update Substation + + + + + + + compare_arrows + + + Compare IED + + + + +
  • +
  • + + + settings + + + Settings + + + + + help + + + Help + + + + + + + history_toggle_off + + + Show SCL History + + + + +
  • +
  • + + + extension + + + Extensions + + +
    + + + +
    +
    + + + + + + + + + + +
    +
    +
    + +
    + Open project +
    +
    + +
    + New project +
    +
    +
    + + + + + + + + + + + Errors, warnings and other notifications will show up here. + + + info + + + + + Close + + + + + + + Edits will show up here + + + info + + + + + + + + + Close + + + + + + + Issues found during validation will show up here + + + info + + + + + Close + + + + + + + + + Show + + + + + + + Show + + + + + + + Show + + + + + + + + + Editor tab + + + tab + + +
  • +
  • + + + developer_board + + IED + + + + margin + + Substation + + + + edit + + Single Line Diagram + + + + link + + Subscriber Message Binding (GOOSE) + + + + link + + Subscriber Data Binding (GOOSE) + + + + link + + Subscriber Later Binding (GOOSE) + + + + link + + Subscriber Message Binding (SMV) + + + + link + + Subscriber Data Binding (SMV) + + + + link + + Subscriber Later Binding (SMV) + + + + settings_ethernet + + Communication + + + + settings_ethernet + + 104 + + + + copy_all + + Templates + + + + publish + + Publisher + + + + cleaning_services + + Cleanup + + + + Menu entry + + + + play_circle + + + +
  • +
  • + + + folder_open + + Open project + + + + create_new_folder + + New project + + + + save + + Save project + +
  • +
  • + + + rule_folder + + Validate Schema + + + + rule_folder + + Validate Templates + +
  • +
  • + + + snippet_folder + + Import IEDs + + + + developer_board + + Create Virtual IED + + + + play_circle + + Subscriber Update + + + + play_circle + + Update desc (ABB) + + + + play_circle + + Update desc (SEL) + + + + merge_type + + Merge Project + + + + merge_type + + Update Substation + + + + compare_arrows + + Compare IED + + + + sim_card_download + + Export Communication Section + +
  • +
  • + + + help + + Help + + + + history_toggle_off + + Show SCL History + +
    + + + + + + +
    + +
    +

    + Here you may add remote extensions directly from a custom URL. + You do this at your own risk. +

    + + + + + Editor tab + + tab + + + + Menu entry + + play_circle + + + + + Validator + + rule_folder + + + + + +
    + + + + +
    + + + +
    + + + English + + + German (Deutsch) + + + + + + + + + + + + + + +
    + + +
    +

    + Uploaded NSDoc files +

    + + + +
    + + + + IEC 61850-7-2 + + + close + + + + + IEC 61850-7-3 + + + close + + + + + IEC 61850-7-4 + + + close + + + + + IEC 61850-8-1 + + + close + + + + + Cancel + + + Reset + + + Save + +
    + + +`; +/* end snapshot open-scd looks like its snapshot */ + diff --git a/packages/open-scd/test/integration/editors/GooseSubscriberDataBinding.test.ts b/packages/open-scd/test/integration/editors/GooseSubscriberDataBinding.test.ts new file mode 100644 index 0000000000..33825d49e3 --- /dev/null +++ b/packages/open-scd/test/integration/editors/GooseSubscriberDataBinding.test.ts @@ -0,0 +1,177 @@ +import { expect, fixture, html } from '@open-wc/testing'; +import { Wizarding } from '../../../src/Wizarding.js'; +import { Editing } from '../../../src/Editing.js'; +import { Historing } from '../../../src/Historing.js'; +import { initializeNsdoc } from '../../../src/foundation/nsdoc.js'; + +import GooseSubscriberDataBinding from '../../../src/editors/GooseSubscriberDataBinding.js'; + +import { + getExtrefDataBindingList, + getFCDABindingList, + getSelectedSubItemValue, + selectFCDAItem, +} from './test-support.js'; + +describe('GOOSE Subscribe Data Binding Plugin', async () => { + customElements.define( + 'goose-subscriber-data-binding-plugin', + Wizarding(Editing(Historing(GooseSubscriberDataBinding))) + ); + + let element: GooseSubscriberDataBinding; + let doc: XMLDocument; + + const nsdoc = await initializeNsdoc(); + + beforeEach(async () => { + doc = await fetch('/test/testfiles/editors/DataBindingGOOSE2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + element = await fixture( + html` ` + ); + }); + + it('when subscribing an available ExtRef then the lists are changed and first ExtRef is added to the LN', async () => { + const fcdaListElement = getFCDABindingList(element); + const extRefListElement = getExtrefDataBindingList(element); + + selectFCDAItem( + fcdaListElement, + 'GOOSE_Publisher>>QB2_Disconnector>GOOSE1', + 'GOOSE_Publisher>>QB2_Disconnector>GOOSE1sDataSet>QB1_Disconnector/ CSWI 1.Pos q (ST)' + ); + await element.updateComplete; + await extRefListElement.updateComplete; + await fcdaListElement.updateComplete; + + expect(extRefListElement['getSubscribedLNElements']().length).to.be.equal( + 0 + ); + expect(getSelectedSubItemValue(fcdaListElement)).to.be.null; + expect(extRefListElement['getAvailableLNElements']().length).to.be.equal(8); + expect( + element.doc.querySelectorAll( + 'IED[name="GOOSE_Subscriber2"] LN[lnClass="XSWI"][inst="1"] > Inputs > ExtRef[iedName="GOOSE_Publisher"]' + ).length + ).to.be.equal(0); + + (( + extRefListElement.shadowRoot!.querySelector( + 'mwc-list-item[value="GOOSE_Subscriber2>>Earth_Switch> XSWI 1"]' + ) + )).click(); + await element.updateComplete; + await extRefListElement.updateComplete; + await fcdaListElement.updateComplete; + + expect(extRefListElement['getSubscribedLNElements']().length).to.be.equal( + 1 + ); + expect(getSelectedSubItemValue(fcdaListElement)).to.exist.and.have.text( + '1' + ); + expect(extRefListElement['getAvailableLNElements']().length).to.be.equal(7); + expect( + element.doc.querySelectorAll( + 'IED[name="GOOSE_Subscriber2"] LN[lnClass="XSWI"][inst="1"] > Inputs > ExtRef[iedName="GOOSE_Publisher"]' + ).length + ).to.be.equal(1); + }); + + it('when unsubscribing a subscribed ExtRef then the lists are changed', async () => { + const fcdaListElement = getFCDABindingList(element); + const extRefListElement = getExtrefDataBindingList(element); + + selectFCDAItem( + fcdaListElement, + 'GOOSE_Publisher>>QB2_Disconnector>GOOSE2', + 'GOOSE_Publisher>>QB2_Disconnector>GOOSE2sDataSet>QB2_Disconnector/ CSWI 1.Pos q (ST)' + ); + await element.updateComplete; + await extRefListElement.updateComplete; + + expect(extRefListElement['getSubscribedLNElements']().length).to.be.equal( + 1 + ); + expect(getSelectedSubItemValue(fcdaListElement)).to.have.text('1'); + expect(extRefListElement['getAvailableLNElements']().length).to.be.equal(7); + + expect( + element.doc.querySelectorAll( + 'IED[name="GOOSE_Subscriber2"] LN0[lnClass="LLN0"] > Inputs > ExtRef[iedName="GOOSE_Publisher"]' + ).length + ).to.be.equal(2); + + (( + extRefListElement.shadowRoot!.querySelector( + 'mwc-list-item[value="GOOSE_Subscriber2>>Earth_Switch"]' + ) + )).click(); + await element.updateComplete; + + expect(extRefListElement['getSubscribedLNElements']().length).to.be.equal( + 0 + ); + expect(getSelectedSubItemValue(fcdaListElement)).to.be.null; + expect(extRefListElement['getAvailableLNElements']().length).to.be.equal(8); + + expect( + element.doc.querySelectorAll( + 'IED[name="GOOSE_Subscriber2"] LN0[lnClass="LLN0"] > Inputs > ExtRef[iedName="GOOSE_Publisher"]' + ).length + ).to.be.equal(1); + }); + + it('when unsubscribing all subscribed ExtRef then the inputs element is also removed', async () => { + const fcdaListElement = getFCDABindingList(element); + const extRefListElement = getExtrefDataBindingList(element); + + expect( + element.doc.querySelectorAll( + 'IED[name="GOOSE_Subscriber2"] LN0[lnClass="LLN0"] > Inputs' + ).length + ).to.be.equal(1); + + selectFCDAItem( + fcdaListElement, + 'GOOSE_Publisher>>QB2_Disconnector>GOOSE2', + 'GOOSE_Publisher>>QB2_Disconnector>GOOSE2sDataSet>QB2_Disconnector/ CSWI 1.Pos q (ST)' + ); + await element.updateComplete; + await extRefListElement.updateComplete; + + (( + extRefListElement.shadowRoot!.querySelector( + 'mwc-list-item[value="GOOSE_Subscriber2>>Earth_Switch"]' + ) + )).click(); + await element.updateComplete; + + selectFCDAItem( + fcdaListElement, + 'GOOSE_Publisher>>QB2_Disconnector>GOOSE2', + 'GOOSE_Publisher>>QB2_Disconnector>GOOSE2sDataSet>QB2_Disconnector/ CSWI 1.Pos stVal (ST)' + ); + await element.updateComplete; + await extRefListElement.updateComplete; + + (( + extRefListElement.shadowRoot!.querySelector( + 'mwc-list-item[value="GOOSE_Subscriber2>>Earth_Switch"]' + ) + )).click(); + await element.updateComplete; + + expect( + element.doc.querySelectorAll( + 'IED[name="GOOSE_Subscriber2"] LN0[lnClass="LLN0"] > Inputs' + ).length + ).to.be.equal(0); + }); +}); diff --git a/packages/open-scd/test/integration/editors/GooseSubscriberLaterBinding.test.ts b/packages/open-scd/test/integration/editors/GooseSubscriberLaterBinding.test.ts new file mode 100644 index 0000000000..9528cb4e06 --- /dev/null +++ b/packages/open-scd/test/integration/editors/GooseSubscriberLaterBinding.test.ts @@ -0,0 +1,175 @@ +import { expect, fixture, html } from '@open-wc/testing'; +import { Wizarding } from '../../../src/Wizarding.js'; +import { Editing } from '../../../src/Editing.js'; +import { Historing } from '../../../src/Historing.js'; + +import GooseSubscriberLaterBinding from '../../../src/editors/GooseSubscriberLaterBinding.js'; +import { + getExtrefLaterBindingList, + getFCDABindingList, + getSelectedSubItemValue, + selectFCDAItem, +} from './test-support.js'; +import { ExtRefLaterBindingList } from '../../../src/editors/subscription/later-binding/ext-ref-later-binding-list.js'; + +describe('GOOSE Subscribe Later Binding Plugin', () => { + customElements.define( + 'goose-subscriber-later-binding-plugin', + Wizarding(Editing(Historing(GooseSubscriberLaterBinding))) + ); + + let element: GooseSubscriberLaterBinding; + let doc: XMLDocument; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/editors/LaterBindingGOOSE2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + element = await fixture( + html`` + ); + }); + + it('when selecting an FCDA element with subscriptions it looks like the latest snapshot', async () => { + doc = await fetch('/test/testfiles/editors/LaterBindingGOOSE-LGOS.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + element = await fixture( + html`` + ); + + const fcdaListElement = getFCDABindingList(element); + selectFCDAItem( + fcdaListElement, + 'GOOSE_Publisher>>QB2_Disconnector>GOOSE2', + 'GOOSE_Publisher>>QB2_Disconnector>GOOSE2sDataSet>QB2_Disconnector/ CSWI 1.Pos stVal (ST)' + ); + await element.requestUpdate(); + + const extRefListElement = ( + element.shadowRoot?.querySelector('extref-later-binding-list') + ); + await extRefListElement.requestUpdate(); + + await expect(extRefListElement).shadowDom.to.equalSnapshot(); + }); + + it('when subscribing an available ExtRef then the lists are changed', async () => { + const fcdaListElement = getFCDABindingList(element); + const extRefListElement = getExtrefLaterBindingList(element); + + selectFCDAItem( + fcdaListElement, + 'GOOSE_Publisher>>QB2_Disconnector>GOOSE1', + 'GOOSE_Publisher>>QB2_Disconnector>GOOSE1sDataSet>QB1_Disconnector/ CSWI 1.Pos q (ST)' + ); + await element.requestUpdate(); + await extRefListElement.requestUpdate(); + + expect( + extRefListElement['getSubscribedExtRefElements']().length + ).to.be.equal(0); + expect(getSelectedSubItemValue(fcdaListElement)).to.be.null; + expect( + extRefListElement['getAvailableExtRefElements']().length + ).to.be.equal(5); + + (( + extRefListElement.shadowRoot!.querySelector( + 'mwc-list-item[value="GOOSE_Subscriber>>Earth_Switch> CILO 1>Pos;CSWI1/Pos/stVal[0]"]' + ) + )).click(); + await element.requestUpdate(); + + expect( + extRefListElement['getSubscribedExtRefElements']().length + ).to.be.equal(1); + expect(getSelectedSubItemValue(fcdaListElement)).to.have.text('1'); + expect( + extRefListElement['getAvailableExtRefElements']().length + ).to.be.equal(4); + }); + + it('when subscribing an available ExtRef then a supervision instance is created', async () => { + doc = await fetch('/test/testfiles/editors/LaterBindingGOOSE-LGOS.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + element = await fixture( + html`` + ); + + const extRefListElement = getExtrefLaterBindingList(element); + + const fcdaListElement = getFCDABindingList(element); + selectFCDAItem( + fcdaListElement, + 'GOOSE_Publisher2>>QB2_Disconnector>GOOSE1', + 'GOOSE_Publisher2>>QB2_Disconnector>GOOSE1sDataSet>QB1_Disconnector/ CSWI 1.Pos stVal (ST)' + ); + await element.requestUpdate(); + await extRefListElement.requestUpdate(); + + (( + extRefListElement.shadowRoot!.querySelector( + 'mwc-list-item[value="GOOSE_Subscriber1>>Earth_Switch> CILO 1>Pos;CSWI1/Pos/stVal[0]"]' + ) + )).click(); + await element.requestUpdate(); + + const supervisionInstance = element.doc.querySelector( + 'IED[name="GOOSE_Subscriber1"] LN[lnClass="LGOS"][inst="4"]' + ); + expect(supervisionInstance).to.exist; + expect( + supervisionInstance?.previousElementSibling?.getAttribute('lnClass') + ).to.equal('LGOS'); + expect( + supervisionInstance?.previousElementSibling?.getAttribute('inst') + ).to.equal('3'); + }); + + it('when unsubscribing a subscribed ExtRef then the lists are changed', async () => { + const fcdaListElement = getFCDABindingList(element); + const extRefListElement = getExtrefLaterBindingList(element); + + selectFCDAItem( + fcdaListElement, + 'GOOSE_Publisher>>QB2_Disconnector>GOOSE2', + 'GOOSE_Publisher>>QB2_Disconnector>GOOSE2sDataSet>QB2_Disconnector/ CSWI 1.Pos q (ST)' + ); + await element.requestUpdate(); + await extRefListElement.requestUpdate(); + + expect( + extRefListElement['getSubscribedExtRefElements']().length + ).to.be.equal(2); + expect(getSelectedSubItemValue(fcdaListElement)).to.have.text('2'); + expect( + extRefListElement['getAvailableExtRefElements']().length + ).to.be.equal(5); + + (( + extRefListElement.shadowRoot!.querySelector( + 'mwc-list-item[value="GOOSE_Subscriber>>Earth_Switch> CSWI 1>Pos;CSWI1/Pos/q[0]"]' + ) + )).click(); + await element.requestUpdate(); + + expect( + extRefListElement['getSubscribedExtRefElements']().length + ).to.be.equal(1); + expect(getSelectedSubItemValue(fcdaListElement)).to.have.text('1'); + expect( + extRefListElement['getAvailableExtRefElements']().length + ).to.be.equal(6); + }); +}); diff --git a/packages/open-scd/test/integration/editors/GooseSubscriberMessageBinding.test.ts b/packages/open-scd/test/integration/editors/GooseSubscriberMessageBinding.test.ts new file mode 100644 index 0000000000..f047e3335d --- /dev/null +++ b/packages/open-scd/test/integration/editors/GooseSubscriberMessageBinding.test.ts @@ -0,0 +1,429 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import '../../mock-wizard.js'; + +import { ListItem } from '@material/mwc-list/mwc-list-item.js'; + +import { Editing } from '../../../src/Editing.js'; +import { Wizarding } from '../../../src/Wizarding.js'; +import { Historing } from '../../../src/Historing.js'; +import GooseSubscriberMessageBindingPlugin from '../../../src/editors/GooseSubscriberMessageBinding.js'; + +describe('GOOSE subscriber plugin', () => { + customElements.define( + 'subscription-plugin', + Wizarding(Editing(Historing(GooseSubscriberMessageBindingPlugin))) + ); + let element: GooseSubscriberMessageBindingPlugin; + let doc: XMLDocument; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/editors/MessageBindingGOOSE2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + element = await fixture( + html`` + ); + }); + + describe('in Publisher view', () => { + describe('per default', () => { + describe('the plugin itself', () => { + it('looks like the latest snapshot', async () => { + await expect(element).shadowDom.to.equalSnapshot(); + }); + }); + + describe('the right hand side GSEControl list', () => { + it('looks like the latest snapshot', async () => { + await expect( + element.shadowRoot?.querySelector('goose-list') + ).shadowDom.to.equalSnapshot(); + }); + }); + + describe('the left hand side subscriber IED list', () => { + it('looks like the latest snapshot', async () => { + await expect(getSubscriberList()).shadowDom.to.equalSnapshot(); + }); + }); + }); + + describe('with a selected GOOSE message', () => { + const nthGSEControl = 1; + let fCDAs: Element[]; + let gseControlBlock: Element; + + let goose: HTMLElement; + + beforeEach(async () => { + gseControlBlock = + doc.querySelectorAll('GSEControl[datSet]')[nthGSEControl]; + fCDAs = Array.from( + gseControlBlock.parentElement?.querySelectorAll( + `DataSet[name="${gseControlBlock.getAttribute('datSet')}"] > FCDA` + ) ?? [] + ); + + goose = Array.from( + element.shadowRoot + ?.querySelector('goose-list') + ?.shadowRoot?.querySelectorAll('mwc-list-item') ?? [] + ).filter(item => !item.noninteractive)[nthGSEControl]; + + (goose).click(); + await element.updateComplete; + }); + + describe('the left hand side subscriber IED list', () => { + it('looks like the latest snapshot', async () => { + await expect(getSubscriberList()).shadowDom.to.equalSnapshot(); + }); + }); + + describe('for unsubscribed IEDs', () => { + it('ExtRefs are not present in the IED', async () => { + expect( + element.doc.querySelectorAll( + 'IED[name="IED3"] ExtRef[iedName="IED2"]' + ).length + ).to.eql(0); + }); + + describe('after clicking on the IEDs list element', () => { + beforeEach(async () => { + (getItemFromSubscriberList('IED3')).click(); + await element.requestUpdate(); + }); + + describe('the left hand side subscriber IED list', () => { + it('looks like the latest snapshot', async () => + await expect(getSubscriberList()).shadowDom.to.equalSnapshot()); + }); + + it('as many ExtRefs are added to the IED as there are FCDAs', async () => { + expect( + element.doc.querySelectorAll( + 'IED[name="IED3"] ExtRef[iedName="IED2"]' + ).length + ).to.eql(fCDAs.length); + }); + + it('all Ed1 attributes are added', async () => { + fCDAs.forEach( + fcda => + expect( + element.doc.querySelector( + `IED[name="IED3"] ExtRef[iedName="IED2"][ldInst="${fcda.getAttribute( + 'ldInst' + )}"][prefix="${fcda.getAttribute( + 'prefix' + )}"][lnClass="${fcda.getAttribute( + 'lnClass' + )}"][lnInst="${fcda.getAttribute( + 'lnInst' + )}"][doName="${fcda.getAttribute( + 'doName' + )}"][daName="${fcda.getAttribute('daName')}"]` + ) + ).to.exist + ); + }); + + it('all Ed2 attributes are added properly', async () => { + fCDAs.forEach( + fcda => + expect( + element.doc.querySelector( + `IED[name="IED3"] ExtRef[iedName="IED2"][srcLDInst="${fcda + .closest('LDevice') + ?.getAttribute('inst')}"][srcPrefix="${ + fcda.closest('LN0')?.getAttribute('prefix') ?? '' //prefix is mendatory in ExtRef!! + }"][srcLNClass="${fcda + .closest('LN0') + ?.getAttribute( + 'lnClass' + )}"][srcCBName="${gseControlBlock.getAttribute( + 'name' + )}"][serviceType="GOOSE"]` + ) + ).to.exist + ); + }); + }); + }); + + describe('for subscribed IEDs', () => { + it('all ExtRefs are available', async () => { + expect( + element.doc.querySelectorAll( + 'IED[name="IED1"] ExtRef[iedName="IED2"]' + ).length + ).to.eql(3); + }); + + describe('after clicking on the IEDs list element', () => { + beforeEach(async () => { + (getItemFromSubscriberList('IED1')).click(); + await element.requestUpdate(); + }); + + it('looks like the latest snapshot', async () => { + await expect(getSubscriberList()).shadowDom.to.equalSnapshot(); + }); + + it('all ExtRefs are removed from the subscriber IED', async () => { + expect( + element.doc.querySelectorAll( + 'IED[name="IED1"] ExtRef[iedName="IED2"]' + ).length + ).to.eql(0); + }); + }); + }); + + describe('for partially subscribed IEDs', () => { + it('some ExtRefs are available in the subscriber IED', async () => { + const extRefs = element.doc.querySelectorAll( + 'IED[name="IED4"] > AccessPoint > Server > LDevice > LN0 > Inputs > ExtRef[iedName="IED2"],' + + 'IED[name="IED4"] > AccessPoint > Server > LDevice > LN > Inputs > ExtRef[iedName="IED2"]' + ); + expect(extRefs.length).to.eql(2); + }); + + describe('after clicking on the IEDs list element', () => { + beforeEach(async () => { + (getItemFromSubscriberList('IED4')).click(); + await element.requestUpdate(); + }); + + it('it looks like the latest snapshot', async () => + await expect(getSubscriberList()).shadowDom.to.equalSnapshot()); + + it('adds the required ExtRefs to the subscriber IED', async () => + expect( + element.doc.querySelectorAll( + 'IED[name="IED4"] ExtRef[iedName="IED2"]' + ).length + ).to.eql(5)); + }); + }); + }); + }); + + describe('in Subscriber view', () => { + beforeEach(async () => { + (( + element.shadowRoot?.querySelector('#gooseSubscriberView') + )).click(); + await element.updateComplete; + }); + + describe('per default', () => { + describe('the plugin itsself', () => { + it('looks like the latest snapshot', async () => { + await expect(element).shadowDom.to.equalSnapshot(); + }); + }); + + describe('the right hand side IEDs list', () => { + it('looks like the latest snapshot', async () => { + await expect( + element.shadowRoot?.querySelector('ied-list') + ).shadowDom.to.equalSnapshot(); + }); + }); + + describe('the left hand side subscriber IED list', () => { + it('looks like the latest snapshot', async () => { + await expect(getSubscriberList()).shadowDom.to.equalSnapshot(); + }); + }); + }); + + describe('with a selected IED', () => { + let ied: HTMLElement; + + beforeEach(async () => { + ied = Array.from( + element.shadowRoot + ?.querySelector('ied-list') + ?.shadowRoot?.querySelectorAll('mwc-list-item') ?? [] + ).filter(item => !item.noninteractive)[1]; + + (ied).click(); + await element.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + }); + + describe('the left hand side subscriber IED list', () => { + it('looks like the latest snapshot', async () => { + await expect(getSubscriberList()).shadowDom.to.equalSnapshot(); + }); + }); + + describe('for unsubscribed GSEControl s', () => { + it('ExtRefs are not present in the subscriber IED', async () => { + expect( + element.doc.querySelectorAll( + 'IED[name="IED2"] ExtRef[iedName="IED4"]' + ).length + ).to.eql(0); + }); + + describe('clicking on a GSEControl list item', () => { + let fCDAs: Element[]; + let gseControlBlock: Element; + + beforeEach(async () => { + gseControlBlock = doc.querySelector('IED[name="IED4"] GSEControl')!; + fCDAs = Array.from( + gseControlBlock.parentElement?.querySelectorAll( + `DataSet[name="${gseControlBlock.getAttribute( + 'datSet' + )}"] > FCDA` + ) ?? [] + ); + + (getItemFromSubscriberList('IED4')).click(); + await element.requestUpdate(); + }); + + describe('the left hand side subscriber IED list', () => { + it('looks like the latest snapshot', async () => + await expect(getSubscriberList()).shadowDom.to.equalSnapshot()); + }); + + it('all ExtRefs are present in the subscriber IED', async () => { + expect( + element.doc.querySelectorAll( + 'IED[name="IED2"] ExtRef[iedName="IED4"]' + ).length + ).to.eql(fCDAs.length); + }); + + it('all Ed1 attributes are added', async () => { + fCDAs.forEach( + fcda => + expect( + element.doc.querySelector( + `IED[name="IED2"] ExtRef[iedName="IED4"][ldInst="${fcda.getAttribute( + 'ldInst' + )}"][prefix="${fcda.getAttribute( + 'prefix' + )}"][lnClass="${fcda.getAttribute( + 'lnClass' + )}"][lnInst="${fcda.getAttribute( + 'lnInst' + )}"][doName="${fcda.getAttribute( + 'doName' + )}"][daName="${fcda.getAttribute('daName')}"]` + ) + ).to.exist + ); + }); + + it('all Ed2 attributes are added properly', async () => { + fCDAs.forEach( + fcda => + expect( + element.doc.querySelector( + `IED[name="IED2"] ExtRef[iedName="IED4"][srcLDInst="${fcda + .closest('LDevice') + ?.getAttribute('inst')}"][srcPrefix="${ + fcda.closest('LN0')?.getAttribute('prefix') ?? '' //prefix is mendatory in ExtRef!! + }"][srcLNClass="${fcda + .closest('LN0') + ?.getAttribute( + 'lnClass' + )}"][srcCBName="${gseControlBlock.getAttribute( + 'name' + )}"][serviceType="GOOSE"]` + ) + ).to.exist + ); + }); + }); + }); + + describe('for subscribed GSEControl s', () => { + beforeEach(async () => { + (getItemFromSubscriberList('IED4')).click(); + await element.requestUpdate(); + }); + + it('all ExtRefs are available in the subscriber IED', async () => { + expect( + element.doc.querySelectorAll( + 'IED[name="IED2"] ExtRef[iedName="IED4"]' + ).length + ).to.eql(5); + }); + + describe('clicking on the GSEControl list item', () => { + beforeEach(async () => { + (getItemFromSubscriberList('IED4')).click(); + await element.requestUpdate(); + }); + + describe('the left hand side subscriber IED list', () => { + it('looks like the latest snapshot', async () => + await expect(getSubscriberList()).shadowDom.to.equalSnapshot()); + }); + + it('ExtRefs to the subscriber IED are removed', async () => + expect( + element.doc.querySelectorAll( + 'IED[name="IED2"] ExtRef[iedName="IED4"]' + ).length + ).to.eql(0)); + }); + }); + + describe('for partially subscribed GSEControl s', () => { + it('some ExtRefs are available in the subscriber IED', async () => { + const extRefs = doc.querySelectorAll( + 'IED[name="IED2"] ExtRef[iedName="IED1"]' + ); + expect(extRefs.length).to.eql(4); + }); + + describe('clicking on the GSEControl list item', () => { + beforeEach(async () => { + (getItemFromSubscriberList('IED1')).click(); + await element.requestUpdate(); + }); + + describe('the left hand side subscriber IED list', () => { + it('looks like the latest snapshot', async () => + await expect(getSubscriberList()).shadowDom.to.equalSnapshot()); + }); + + it('the missing ExtRefs are added to the subscriber IED', async () => { + expect( + element.doc.querySelectorAll( + 'IED[name="IED2"] ExtRef[iedName="IED1"]' + ).length + ).to.eql(9); + }); + }); + }); + }); + }); + + function getSubscriberList() { + return element.shadowRoot?.querySelector('subscriber-list-goose'); + } + + function getItemFromSubscriberList( + textInListItem: string + ): ListItem | undefined { + return ( + Array.from( + getSubscriberList()!.shadowRoot?.querySelectorAll('mwc-list-item') ?? [] + ).filter(listItem => listItem.innerHTML.includes(textInListItem))[0] ?? + undefined + ); + } +}); diff --git a/packages/open-scd/test/integration/editors/IED.test.ts b/packages/open-scd/test/integration/editors/IED.test.ts new file mode 100644 index 0000000000..e8c7f47cea --- /dev/null +++ b/packages/open-scd/test/integration/editors/IED.test.ts @@ -0,0 +1,385 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import '../../mock-wizard.js'; + +import { LitElement } from 'lit-element'; + +import '../../../src/editors/IED.js'; + +import { Editing } from '../../../src/Editing.js'; +import { Wizarding, WizardingElement } from '../../../src/Wizarding.js'; +import { initializeNsdoc, Nsdoc } from '../../../src/foundation/nsdoc.js'; +import { FilterButton } from '../../../src/oscd-filter-button.js'; + +import IED from '../../../src/editors/IED.js'; +import { LDeviceContainer } from '../../../src/editors/ied/ldevice-container.js'; +import { LNContainer } from '../../../src/editors/ied/ln-container.js'; +import { DOContainer } from '../../../src/editors/ied/do-container.js'; +import { DAContainer } from '../../../src/editors/ied/da-container.js'; + +describe('IED Plugin', () => { + if (customElements.get('ied-plugin') === undefined) + customElements.define('ied-plugin', Wizarding(Editing(IED))); + let element: IED; + let nsdoc: Nsdoc; + + describe('without a doc loaded', () => { + beforeEach(async () => { + element = await fixture(html``); + await element.requestUpdate(); + await element.updateComplete; + }); + + it('looks like the latest snapshot', async () => { + await expect(element).shadowDom.to.equalSnapshot(); + }); + }); + + describe('with a doc loaded', () => { + let doc: XMLDocument; + + describe('containing no IEDs', () => { + beforeEach(async () => { + doc = await fetch('/test/testfiles/editors/iedEditorWithoutIEDs.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + nsdoc = await initializeNsdoc(); + element = await fixture( + html` ` + ); + await element.requestUpdate(); + await element.updateComplete; + }); + + it('looks like the latest snapshot', async () => { + await expect(element).shadowDom.to.equalSnapshot(); + }); + }); + + describe('Open Services Wizard', () => { + beforeEach(async () => { + doc = await fetch('/test/testfiles/Services.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + nsdoc = await initializeNsdoc(); + + element = await fixture( + html`` + ); + + await element.requestUpdate(); + await element.updateComplete; + + await selectIed('WithServices'); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + }); + + it('Should open Services wizard', async () => { + element + .shadowRoot!.querySelector('ied-container')! + .shadowRoot!.querySelector( + 'mwc-icon-button[icon="settings"]' + )! + .click(); + + await element.requestUpdate(); + + expect((element as any as WizardingElement).wizardUI).to.exist; + }); + }); + + describe('containing IEDs', () => { + beforeEach(async () => { + doc = await fetch('/test/testfiles/editors/iedEditorWithIEDs.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + nsdoc = await initializeNsdoc(); + element = await fixture( + html`` + ); + await element.requestUpdate(); + await element.updateComplete; + }); + + it('looks like the latest snapshot', async () => { + await expect(element).shadowDom.to.equalSnapshot(); + }); + + it('then initially the first IED is selected and rendered', () => { + expect( + element.shadowRoot?.querySelectorAll('ied-container').length + ).to.eql(1); + expect( + element.shadowRoot + ?.querySelector('ied-container')! + .shadowRoot?.querySelector('action-pane')!.shadowRoot?.innerHTML + ).to.include('IED1'); + }); + + it('when other IED selected then IED Container contains the correct IED', async () => { + expect( + element.shadowRoot?.querySelectorAll('ied-container').length + ).to.eql(1); + expect( + getIedContainer().shadowRoot?.querySelector('action-pane')!.shadowRoot + ?.innerHTML + ).to.include('IED1'); + + await selectIed('IED3'); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + expect( + element.shadowRoot?.querySelectorAll('ied-container').length + ).to.eql(1); + expect( + getIedContainer().shadowRoot?.querySelector('action-pane')!.shadowRoot + ?.innerHTML + ).to.include('IED3'); + }); + + it('when filtering LN Classes then correct number of LN Containers are rendered', async () => { + expect( + getLDeviceContainer(getIedContainer()).shadowRoot!.querySelectorAll( + 'ln-container' + ).length + ).to.eql(5); + + await selectLNClasses('CSWI'); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + expect( + getLDeviceContainer(getIedContainer()).shadowRoot!.querySelectorAll( + 'ln-container' + ).length + ).to.eql(2); + }); + + it('when other IED selected, all LNs are selected by default', async () => { + await selectLNClasses('XCBR'); + + await selectIed('IED3'); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + expect( + element.shadowRoot?.querySelectorAll('ied-container').length + ).to.eql(1); + expect( + getIedContainer().shadowRoot?.querySelector('action-pane')!.shadowRoot + ?.innerHTML + ).to.include('IED3'); + + expect( + getLDeviceContainer(getIedContainer()).shadowRoot!.querySelectorAll( + 'ln-container' + ).length + ).to.eql(9); + }); + + it('when filtering LNs, if none are selected, all are selected', async () => { + await selectIed('IED3'); + + const oscdFilterButton = ( + element.shadowRoot!.querySelector( + 'oscd-filter-button[id="lnClassesFilter"]' + ) + ); + const filterButton = ( + oscdFilterButton!.shadowRoot!.querySelector('mwc-icon-button') + ); + filterButton.click(); + await element.updateComplete; + + const primaryButton = ( + oscdFilterButton!.shadowRoot!.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + primaryButton.click(); + await element.updateComplete; + + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + expect( + getLDeviceContainer(getIedContainer()).shadowRoot!.querySelectorAll( + 'ln-container' + ).length + ).to.eql(9); + }); + + it('then renders the path of elements correctly', async () => { + const iedContainer = getIedContainer(); + + // Initially there won't be a path shown. + expect(getElementPathValue()).to.be.empty; + + // After setting the focus on the IED Container + iedContainer.dispatchEvent(new Event('focus')); + await element.updateComplete; + expect(getElementPathValue()).to.eql('IED1'); + + // After setting the focus on the Server Container below the IED Container + const lDeviceContainer = getLDeviceContainer(iedContainer); + lDeviceContainer!.dispatchEvent(new Event('focus')); + await element.updateComplete; + expect(getElementPathValue()).to.eql( + 'IED1 / P1 / Server / CircuitBreaker_CB1' + ); + + // After removing the focus on the IED Container, it will be empty again. + iedContainer!.dispatchEvent(new Event('blur')); + await element.updateComplete; + expect(getElementPathValue()).to.be.empty; + }); + + // Add test for create wizard DAI when clicking add icon in DA Container (see issue #1139) + describe('when DA allows for multiple Val', () => { + beforeEach(async () => { + doc = await fetch('/test/testfiles/wizards/settingGroups.scd') + .then(response => response.text()) + .then(str => + new DOMParser().parseFromString(str, 'application/xml') + ); + nsdoc = await initializeNsdoc(); + element = await fixture( + html`` + ); + await element.requestUpdate(); + await element.updateComplete; + }); + it('shows correct wizard when navigating to the DA container that allows for multiple Val and clicking Add', async () => { + const lnContainer: LNContainer = getLDeviceContainerByInst( + getIedContainer(), + 'stage1' + )!.shadowRoot!.querySelectorAll('ln-container')[1] as LNContainer; + + lnContainer.shadowRoot!.querySelector('mwc-icon-button-toggle')!.on = + true; + await lnContainer.requestUpdate(); + + // await new Promise(resolve => setTimeout(resolve, 100)); // await animation + const doContainer: DOContainer = lnContainer + .shadowRoot!.querySelector('action-pane')! + .querySelector('do-container')!; + + doContainer.shadowRoot!.querySelector('mwc-icon-button-toggle')!.on = + true; + await doContainer.requestUpdate(); + + // await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + const daContainer: DAContainer = + doContainer.shadowRoot!.querySelector('da-container')!; + daContainer + .shadowRoot!.querySelector('action-pane')! + .querySelector('mwc-icon-button-toggle')!.on = true; + await daContainer.requestUpdate(); + + // await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + (daContainer + .shadowRoot!.querySelector('da-container')! + .shadowRoot!.querySelector( + 'mwc-icon-button[icon="add"]' + ) as HTMLElement)!.click(); + + await element.updateComplete; + + expect( + (element as any as WizardingElement).wizardUI.dialogs.length + ).to.equal(1); + expect( + ( + element as any as WizardingElement + ).wizardUI.dialogs[0]!.querySelectorAll('wizard-textfield').length + ).to.equal(3); + }); + }); + + function getIedContainer(): Element { + return element.shadowRoot!.querySelector('ied-container')!; + } + + function getLDeviceContainer(iedContainer: Element): Element { + return iedContainer + .shadowRoot!.querySelector('access-point-container')! + .shadowRoot!.querySelector('server-container')! + .shadowRoot!.querySelector('ldevice-container')!; + } + + function getLDeviceContainerByInst( + iedContainer: Element, + instName: string + ): Element | undefined { + return ( + Array.from( + iedContainer! + .shadowRoot!.querySelector('access-point-container')! + .shadowRoot!.querySelector('server-container')! + .shadowRoot!.querySelectorAll('ldevice-container') + ) as LDeviceContainer[] + ).find(lDevice => lDevice.element.getAttribute('inst') === instName); + } + + function getElementPathValue(): string { + return ( + element.shadowRoot + ?.querySelector('element-path') + ?.shadowRoot?.querySelector('h3')?.textContent ?? '' + ); + } + + async function selectLNClasses(lnClass: string): Promise { + const oscdFilterButton = ( + element.shadowRoot!.querySelector( + 'oscd-filter-button[id="lnClassesFilter"]' + ) + ); + const filterButton = ( + oscdFilterButton!.shadowRoot!.querySelector('mwc-icon-button') + ); + filterButton.click(); + await element.updateComplete; + + (( + oscdFilterButton!.querySelector( + `mwc-check-list-item[value="${lnClass}"]` + ) + )).click(); + + const primaryButton = ( + oscdFilterButton!.shadowRoot!.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + primaryButton.click(); + await element.updateComplete; + } + }); + }); + + async function selectIed(name: string): Promise { + const oscdFilterButton = element.shadowRoot!.querySelector( + 'oscd-filter-button[id="iedFilter"]' + ); + const filterButton = ( + oscdFilterButton!.shadowRoot!.querySelector('mwc-icon-button') + ); + filterButton.click(); + await element.updateComplete; + + const selectItem = ( + oscdFilterButton!.querySelector(`mwc-radio-list-item[value="${name}"]`) + ); + selectItem.click(); + + const primaryButton = ( + oscdFilterButton!.shadowRoot!.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + primaryButton.click(); + + await element.updateComplete; + } +}); diff --git a/packages/open-scd/test/integration/editors/Protocol104.test.ts b/packages/open-scd/test/integration/editors/Protocol104.test.ts new file mode 100644 index 0000000000..4b27c64ae8 --- /dev/null +++ b/packages/open-scd/test/integration/editors/Protocol104.test.ts @@ -0,0 +1,44 @@ +import { html, fixture, expect } from '@open-wc/testing'; + +import '../../mock-wizard.js'; + +import Protocol104 from '../../../src/editors/Protocol104.js'; +import { Editing } from '../../../src/Editing.js'; +import { Wizarding } from '../../../src/Wizarding.js'; + +describe('Protocol 104 Plugin', () => { + customElements.define( + 'protocol104-plugin', + Wizarding(Editing(Protocol104)) + ); + let element: Protocol104; + let doc: XMLDocument; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/104/valid-subnetwork.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + element = await fixture( + html`` + ); + }); + + describe('in Values view', () => { + it('the plugin looks like the latest snapshot', async () => { + await expect(element).shadowDom.to.equalSnapshot(); + }); + }); + + describe('in Network view', () => { + beforeEach(async () => { + const radioButton = element.shadowRoot?.querySelector('#byNetworkRadio'); + (radioButton).click(); + await element.updateComplete; + }); + + it('the plugin looks like the latest snapshot', async () => { + await expect(element).shadowDom.to.equalSnapshot(); + }); + }); +}); diff --git a/packages/open-scd/test/integration/editors/SMVSubscriberDataBinding.test.ts b/packages/open-scd/test/integration/editors/SMVSubscriberDataBinding.test.ts new file mode 100644 index 0000000000..1410840532 --- /dev/null +++ b/packages/open-scd/test/integration/editors/SMVSubscriberDataBinding.test.ts @@ -0,0 +1,184 @@ +import { expect, fixture, html } from '@open-wc/testing'; +import { Wizarding } from '../../../src/Wizarding.js'; +import { Editing } from '../../../src/Editing.js'; +import { initializeNsdoc } from '../../../src/foundation/nsdoc.js'; + +import SMVSubscriberDataBinding from '../../../src/editors/SMVSubscriberDataBinding.js'; + +import { + getExtrefDataBindingList, + getFCDABindingList, + getSelectedSubItemValue, + selectFCDAItem, +} from './test-support.js'; +import { Historing } from '../../../src/Historing.js'; +describe('SMV Subscribe Data Binding Plugin', async () => { + customElements.define( + 'smv-subscriber-data-binding-plugin', + Wizarding(Editing(Historing(SMVSubscriberDataBinding))) + ); + + let element: SMVSubscriberDataBinding; + let doc: XMLDocument; + + const nsdoc = await initializeNsdoc(); + + beforeEach(async () => { + doc = await fetch('/test/testfiles/editors/DataBindingSMV2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + element = await fixture( + html` ` + ); + }); + + it('when subscribing an available ExtRef then the lists are changed', async () => { + const fcdaListElement = getFCDABindingList(element); + const extRefListElement = getExtrefDataBindingList(element); + + selectFCDAItem( + fcdaListElement, + 'SMV_Publisher>>CurrentTransformer>fullSmv', + 'SMV_Publisher>>CurrentTransformer>fullSmvsDataSet>CurrentTransformer/L2 TCTR 1.AmpSv q (MX)' + ); + await element.requestUpdate(); + await extRefListElement.requestUpdate(); + + expect(extRefListElement['getSubscribedLNElements']().length).to.be.equal( + 1 + ); + expect(getSelectedSubItemValue(fcdaListElement)).to.have.text('1'); + expect(extRefListElement['getAvailableLNElements']().length).to.be.equal(7); + expect( + element.doc.querySelectorAll( + 'IED[name="SMV_Subscriber1"] LDevice[inst="Overcurrent"] > LN0[lnClass="LLN0"] > Inputs > ExtRef[iedName="SMV_Publisher"]' + ).length + ).to.be.equal(0); + + (( + extRefListElement.shadowRoot!.querySelector( + 'mwc-list-item[value="SMV_Subscriber1>>Overcurrent"]' + ) + )).click(); + await element.requestUpdate(); + + expect(extRefListElement['getSubscribedLNElements']().length).to.be.equal( + 2 + ); + expect(getSelectedSubItemValue(fcdaListElement)).to.have.text('2'); + expect(extRefListElement['getAvailableLNElements']().length).to.be.equal(6); + expect( + element.doc.querySelectorAll( + 'IED[name="SMV_Subscriber1"] LDevice[inst="Overcurrent"] > LN0[lnClass="LLN0"] > Inputs > ExtRef[iedName="SMV_Publisher"]' + ).length + ).to.be.equal(1); + }); + + it('when unsubscribing a subscribed ExtRef then the lists are changed', async () => { + const fcdaListElement = getFCDABindingList(element); + const extRefListElement = getExtrefDataBindingList(element); + + selectFCDAItem( + fcdaListElement, + 'SMV_Publisher>>CurrentTransformer>fullSmv', + 'SMV_Publisher>>CurrentTransformer>fullSmvsDataSet>CurrentTransformer/L3 TCTR 1.AmpSv instMag.i (MX)' + ); + await element.requestUpdate(); + await extRefListElement.requestUpdate(); + + expect(extRefListElement['getSubscribedLNElements']().length).to.be.equal( + 2 + ); + expect(getSelectedSubItemValue(fcdaListElement)).to.have.text('2'); + expect(extRefListElement['getAvailableLNElements']().length).to.be.equal(6); + expect( + element.doc.querySelectorAll( + 'IED[name="SMV_Subscriber1"] LDevice[inst="Overvoltage"] > LN0[lnClass="LLN0"] > Inputs > ExtRef[iedName="SMV_Publisher"]' + ).length + ).to.be.equal(3); + + (( + extRefListElement.shadowRoot!.querySelector( + 'mwc-list-item[value="SMV_Subscriber1>>Overvoltage"]' + ) + )).click(); + await element.requestUpdate(); + + expect(extRefListElement['getSubscribedLNElements']().length).to.be.equal( + 1 + ); + expect(getSelectedSubItemValue(fcdaListElement)).to.have.text('1'); + expect(extRefListElement['getAvailableLNElements']().length).to.be.equal(7); + expect( + element.doc.querySelectorAll( + 'IED[name="SMV_Subscriber1"] LDevice[inst="Overvoltage"] > LN0[lnClass="LLN0"] > Inputs > ExtRef[iedName="SMV_Publisher"]' + ).length + ).to.be.equal(2); + }); + + it('when unsubscribing all subscribed ExtRef then the inputs element is also removed', async () => { + const fcdaListElement = getFCDABindingList(element); + const extRefListElement = getExtrefDataBindingList(element); + + expect( + element.doc.querySelectorAll( + 'IED[name="SMV_Subscriber1"] LDevice[inst="Overvoltage"] > LN0[lnClass="LLN0"] > Inputs' + ).length + ).to.be.equal(1); + + selectFCDAItem( + fcdaListElement, + 'SMV_Publisher>>CurrentTransformer>fullSmv', + 'SMV_Publisher>>CurrentTransformer>fullSmvsDataSet>CurrentTransformer/L2 TCTR 1.AmpSv q (MX)' + ); + await element.requestUpdate(); + await extRefListElement.requestUpdate(); + + (( + extRefListElement.shadowRoot!.querySelector( + 'mwc-list-item[value="SMV_Subscriber1>>Overvoltage"]' + ) + )).click(); + await element.requestUpdate(); + + selectFCDAItem( + fcdaListElement, + 'SMV_Publisher>>CurrentTransformer>fullSmv', + 'SMV_Publisher>>CurrentTransformer>fullSmvsDataSet>CurrentTransformer/L3 TCTR 1.AmpSv instMag.i (MX)' + ); + await element.requestUpdate(); + await extRefListElement.requestUpdate(); + + (( + extRefListElement.shadowRoot!.querySelector( + 'mwc-list-item[value="SMV_Subscriber1>>Overvoltage"]' + ) + )).click(); + await element.requestUpdate(); + + selectFCDAItem( + fcdaListElement, + 'SMV_Publisher>>CurrentTransformer>fullSmv', + 'SMV_Publisher>>CurrentTransformer>fullSmvsDataSet>CurrentTransformer/L3 TCTR 1.AmpSv q (MX)' + ); + await element.requestUpdate(); + await extRefListElement.requestUpdate(); + + (( + extRefListElement.shadowRoot!.querySelector( + 'mwc-list-item[value="SMV_Subscriber1>>Overvoltage"]' + ) + )).click(); + await element.requestUpdate(); + + expect( + element.doc.querySelectorAll( + 'IED[name="SMV_Subscriber1"] LDevice[inst="Overvoltage"] > LN0[lnClass="LLN0"] > Inputs' + ).length + ).to.be.equal(0); + }); +}); diff --git a/packages/open-scd/test/integration/editors/SMVSubscriberLaterBinding.test.ts b/packages/open-scd/test/integration/editors/SMVSubscriberLaterBinding.test.ts new file mode 100644 index 0000000000..40e8b7e5dd --- /dev/null +++ b/packages/open-scd/test/integration/editors/SMVSubscriberLaterBinding.test.ts @@ -0,0 +1,176 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import { Wizarding } from '../../../src/Wizarding.js'; +import { Editing } from '../../../src/Editing.js'; +import { Historing } from '../../../src/Historing.js'; + +import SMVSubscribeLaterBindingPlugin from '../../../src/editors/SMVSubscriberLaterBinding.js'; +import { + getExtrefLaterBindingList, + getFCDABindingList, + getSelectedSubItemValue, + selectFCDAItem, +} from './test-support.js'; +import { ExtRefLaterBindingList } from '../../../src/editors/subscription/later-binding/ext-ref-later-binding-list.js'; + +describe('SMV Subscribe Later Binding plugin', () => { + customElements.define( + 'smv-subscribe-later-binding-plugin', + Wizarding(Editing(Historing(SMVSubscribeLaterBindingPlugin))) + ); + let element: SMVSubscribeLaterBindingPlugin; + let doc: XMLDocument; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/editors/LaterBindingSMV2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + element = await fixture( + html` ` + ); + await element.requestUpdate(); + }); + + it('when selecting an FCDA element with subscriptions it looks like the latest snapshot', async () => { + doc = await fetch('/test/testfiles/editors/LaterBindingSMV-LSVS.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + element = await fixture( + html`` + ); + + const fcdaListElement = getFCDABindingList(element); + selectFCDAItem( + fcdaListElement, + 'SMV_Publisher>>CurrentTransformer>currrentOnly', + 'SMV_Publisher>>CurrentTransformer>currrentOnlysDataSet>CurrentTransformer/L1 TCTR 1.AmpSv instMag.i (MX)' + ); + await element.requestUpdate(); + + const extRefListElement = ( + element.shadowRoot?.querySelector('extref-later-binding-list') + ); + await extRefListElement.requestUpdate(); + + await expect(extRefListElement).shadowDom.to.equalSnapshot(); + }); + + it('when subscribing an available ExtRef then the lists are changed', async () => { + const fcdaListElement = getFCDABindingList(element); + const extRefListElement = getExtrefLaterBindingList(element); + + selectFCDAItem( + fcdaListElement, + 'SMV_Publisher>>CurrentTransformer>currentOnly', + 'SMV_Publisher>>CurrentTransformer>currentOnlysDataSet>CurrentTransformer/L2 TCTR 1.AmpSv instMag.i (MX)' + ); + await element.requestUpdate(); + await extRefListElement.requestUpdate(); + + expect( + extRefListElement['getSubscribedExtRefElements']().length + ).to.be.equal(0); + expect(getSelectedSubItemValue(fcdaListElement)).to.be.null; + expect( + extRefListElement['getAvailableExtRefElements']().length + ).to.be.equal(9); + + (( + extRefListElement.shadowRoot!.querySelector( + 'mwc-list-item[value="SMV_Subscriber>>Overvoltage> PTRC 1>AmpSv;TCTR2/AmpSv/instMag.i[0]"]' + ) + )).click(); + await element.requestUpdate(); + + expect( + extRefListElement['getSubscribedExtRefElements']().length + ).to.be.equal(1); + expect(getSelectedSubItemValue(fcdaListElement)).to.have.text('1'); + expect( + extRefListElement['getAvailableExtRefElements']().length + ).to.be.equal(8); + }); + + it('when subscribing an available ExtRef then a supervision instance is created', async () => { + doc = await fetch('/test/testfiles/editors/LaterBindingSMV-LSVS.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + element = await fixture( + html`` + ); + + const fcdaListElement = getFCDABindingList(element); + const extRefListElement = getExtrefLaterBindingList(element); + + selectFCDAItem( + fcdaListElement, + 'SMV_Publisher>>CurrentTransformer>fullSmv', + 'SMV_Publisher>>CurrentTransformer>fullSmvsDataSet>CurrentTransformer/L2 TCTR 2.AmpSv instMag.i (MX)' + ); + await element.requestUpdate(); + await extRefListElement.requestUpdate(); + + (( + extRefListElement.shadowRoot!.querySelector( + 'mwc-list-item[value="SMV_Subscriber>>Overvoltage> PTRC 1>AmpSv;TCTR1/AmpSv/instMag.i[0]"]' + ) + )).click(); + await element.requestUpdate(); + + const supervisionInstance = element.doc.querySelector( + 'IED[name="SMV_Subscriber"] LN[lnClass="LSVS"][inst="3"]' + ); + expect(supervisionInstance).to.exist; + expect( + supervisionInstance?.previousElementSibling?.getAttribute('lnClass') + ).to.equal('LSVS'); + expect( + supervisionInstance?.previousElementSibling?.getAttribute('inst') + ).to.equal('2'); + }); + + it('when unsubscribing a subscribed ExtRef then the lists are changed', async () => { + const fcdaListElement = getFCDABindingList(element); + const extRefListElement = getExtrefLaterBindingList(element); + + selectFCDAItem( + fcdaListElement, + 'SMV_Publisher>>CurrentTransformer>currentOnly', + 'SMV_Publisher>>CurrentTransformer>currentOnlysDataSet>CurrentTransformer/L1 TCTR 1.AmpSv q (MX)' + ); + await element.requestUpdate(); + await extRefListElement.requestUpdate(); + + expect( + extRefListElement['getSubscribedExtRefElements']().length + ).to.be.equal(3); + expect(getSelectedSubItemValue(fcdaListElement)).to.have.text('3'); + expect( + extRefListElement['getAvailableExtRefElements']().length + ).to.be.equal(9); + + (( + extRefListElement.shadowRoot!.querySelector( + 'mwc-list-item[value="SMV_Subscriber>>Overvoltage> PTRC 1>AmpSv;TCTR1/AmpSv/q[0]"]' + ) + )).click(); + await element.requestUpdate(); + + expect( + extRefListElement['getSubscribedExtRefElements']().length + ).to.be.equal(2); + expect(getSelectedSubItemValue(fcdaListElement)).to.have.text('2'); + expect( + extRefListElement['getAvailableExtRefElements']().length + ).to.be.equal(10); + }); +}); diff --git a/packages/open-scd/test/integration/editors/SMVSubscriberMessageBinding.test.ts b/packages/open-scd/test/integration/editors/SMVSubscriberMessageBinding.test.ts new file mode 100644 index 0000000000..e6f9f1d225 --- /dev/null +++ b/packages/open-scd/test/integration/editors/SMVSubscriberMessageBinding.test.ts @@ -0,0 +1,424 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import '../../mock-wizard.js'; + +import SMVSubscriberMessageBindingPlugin from '../../../src/editors/SMVSubscriberMessageBinding.js'; +import { Editing } from '../../../src/Editing.js'; +import { Historing } from '../../../src/Historing.js'; +import { Wizarding } from '../../../src/Wizarding.js'; +import { ListItem } from '@material/mwc-list/mwc-list-item.js'; + +describe('Sampled Values Plugin', () => { + customElements.define( + 'smv-plugin', + Wizarding(Editing(Historing(SMVSubscriberMessageBindingPlugin))) + ); + let element: SMVSubscriberMessageBindingPlugin; + let doc: XMLDocument; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/editors/MessageBindingSMV2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + element = await fixture(html``); + }); + + describe('in Publisher view', () => { + describe('initially', () => { + it('the plugin looks like the latest snapshot', async () => { + await expect(element).shadowDom.to.equalSnapshot(); + }); + + it('the Sampled Values list looks like the latest snapshot', async () => { + await expect( + element.shadowRoot?.querySelector('smv-list') + ).shadowDom.to.equalSnapshot(); + }); + + it('the subscriber list looks like the latest snapshot', async () => { + await expect(getSubscriberList()).shadowDom.to.equalSnapshot(); + }); + }); + + describe('when selecting a Sampled Values message', () => { + const nthSampledValueStream = 0; + let fCDAs: Element[]; + let smvControlBlock: Element; + + let smv: HTMLElement; + + beforeEach(async () => { + smvControlBlock = doc.querySelectorAll('SampledValueControl')[ + nthSampledValueStream + ]; + fCDAs = Array.from( + smvControlBlock.parentElement?.querySelectorAll( + `DataSet[name="${smvControlBlock.getAttribute('datSet')}"] > FCDA` + ) ?? [] + ); + + smv = Array.from( + element.shadowRoot + ?.querySelector('smv-list') + ?.shadowRoot?.querySelectorAll('mwc-list-item') ?? [] + ).filter(item => !item.noninteractive)[nthSampledValueStream]; + + (smv).click(); + await element.updateComplete; + }); + + it('the list on the right will initially show the subscribed / partially subscribed / not subscribed IEDs', async () => { + await expect(getSubscriberList()).shadowDom.to.equalSnapshot(); + }); + + describe('and subscribing an unsubscribed IED', () => { + it('initially no ExtRefs are available in the subscriber IED', async () => { + expect( + element.doc.querySelectorAll( + 'IED[name="IED2"] > AccessPoint > Server > LDevice > LN0 > Inputs > ExtRef[iedName="IED3"], ' + + 'IED[name="IED2"] > AccessPoint > Server > LDevice > LN > Inputs > ExtRef[iedName="IED3"]' + ).length + ).to.eql(0); + }); + + it('it looks like the latest snapshot', async () => { + (getItemFromSubscriberList('IED2')).click(); + await element.updateComplete; + + await expect(getSubscriberList()).shadowDom.to.equalSnapshot(); + }); + + it('adds the required ExtRefs to the subscriber IED', async () => { + (getItemFromSubscriberList('IED2')).click(); + await element.updateComplete; + + expect( + element.doc.querySelectorAll( + 'IED[name="IED2"] > AccessPoint > Server > LDevice > LN0 > Inputs > ExtRef[iedName="IED3"], ' + + 'IED[name="IED2"] > AccessPoint > Server > LDevice > LN > Inputs > ExtRef[iedName="IED3"]' + ).length + ).to.eql(fCDAs.length); + }); + + it('makes sure that Ed1 attributes are added properly', async () => { + (getItemFromSubscriberList('IED2')).click(); + await element.requestUpdate(); + + fCDAs.forEach( + fcda => + expect( + element.doc.querySelector( + `IED[name="IED2"] ExtRef[iedName="IED3"][ldInst="${fcda.getAttribute( + 'ldInst' + )}"][prefix="${fcda.getAttribute( + 'prefix' + )}"][lnClass="${fcda.getAttribute( + 'lnClass' + )}"][lnInst="${fcda.getAttribute( + 'lnInst' + )}"][doName="${fcda.getAttribute( + 'doName' + )}"][daName="${fcda.getAttribute('daName')}"]` + ) + ).to.exist + ); + }); + + it('makes sure that Ed2 attributes are added properly', async () => { + (getItemFromSubscriberList('IED2')).click(); + await element.requestUpdate(); + + fCDAs.forEach( + fcda => + expect( + element.doc.querySelector( + `IED[name="IED2"] ExtRef[iedName="IED3"][srcLDInst="${fcda + .closest('LDevice') + ?.getAttribute('inst')}"][srcPrefix="${ + fcda.closest('LN0')?.getAttribute('prefix') ?? '' //prefix is mendatory in ExtRef!! + }"][srcLNClass="${fcda + .closest('LN0') + ?.getAttribute( + 'lnClass' + )}"][srcCBName="${smvControlBlock.getAttribute( + 'name' + )}"][serviceType="SMV"]` + ) + ).to.exist + ); + }); + }); + + describe('and you unsubscribe a subscribed IED', () => { + it('initially all the ExtRefs are available in the subscriber IED', async () => { + expect( + element.doc.querySelectorAll( + 'IED[name="IED1"] > AccessPoint > Server > LDevice > LN0 > Inputs > ExtRef[iedName="IED3"], ' + + 'IED[name="IED1"] > AccessPoint > Server > LDevice > LN > Inputs > ExtRef[iedName="IED3"]' + ).length + ).to.eql(16); + }); + + it('it looks like the latest snapshot', async () => { + (getItemFromSubscriberList('IED1')).click(); + await element.updateComplete; + + await expect(getSubscriberList()).shadowDom.to.equalSnapshot(); + }); + + it('removes the required ExtRefs from the subscriber IED', async () => { + (getItemFromSubscriberList('IED1')).click(); + await element.updateComplete; + + expect( + element.doc.querySelectorAll( + 'IED[name="IED1"] > AccessPoint > Server > LDevice > LN0 > Inputs > ExtRef[iedName="IED3"], ' + + 'IED[name="IED1"] > AccessPoint > Server > LDevice > LN > Inputs > ExtRef[iedName="IED3"]' + ).length + ).to.eql(0); + }); + }); + + describe('and you subscribe a partially subscribed IED', () => { + it('initially only 10 ExtRefs are available in the subscriber IED', async () => { + expect( + element.doc.querySelectorAll( + 'IED[name="IED4"] > AccessPoint > Server > LDevice > LN0 > Inputs > ExtRef[iedName="IED3"],' + + 'IED[name="IED4"] > AccessPoint > Server > LDevice > LN > Inputs > ExtRef[iedName="IED3"]' + ).length + ).to.eql(10); + }); + + it('it looks like the latest snapshot', async () => { + (getItemFromSubscriberList('IED4')).click(); + await element.updateComplete; + + await expect(getSubscriberList()).shadowDom.to.equalSnapshot(); + }); + + it('adds the required ExtRefs to the subscriber IED', async () => { + (getItemFromSubscriberList('IED4')).click(); + await element.updateComplete; + + expect( + element.doc.querySelectorAll( + 'IED[name="IED4"] > AccessPoint > Server > LDevice > LN0 > Inputs > ExtRef[iedName="IED3"],' + + 'IED[name="IED4"] > AccessPoint > Server > LDevice > LN > Inputs > ExtRef[iedName="IED3"]' + ).length + ).to.eql(16); + }); + }); + }); + }); + + describe('in Subscriber view', () => { + beforeEach(async () => { + (( + element.shadowRoot?.querySelector('#smvSubscriberView') + )).click(); + await element.updateComplete; + }); + + describe('initially', () => { + it('the plugin looks like the latest snapshot', async () => { + await expect(element).shadowDom.to.equalSnapshot(); + }); + + it('the IED list looks like the latest snapshot', async () => { + await expect( + element.shadowRoot?.querySelector('ied-list') + ).shadowDom.to.equalSnapshot(); + }); + + it('the subscriber list looks like the latest snapshot', async () => { + await expect(getSubscriberList()).shadowDom.to.equalSnapshot(); + }); + }); + + describe('when selecting an IED', () => { + let ied: HTMLElement; + + beforeEach(async () => { + ied = Array.from( + element.shadowRoot + ?.querySelector('ied-list') + ?.shadowRoot?.querySelectorAll('mwc-list-item') ?? [] + ).filter(item => !item.noninteractive)[1]; + + (ied).click(); + await element.updateComplete; + }); + + it('the subscriber list will initially show the subscribed / partially subscribed / not subscribed IEDs', async () => { + await expect(getSubscriberList()).shadowDom.to.equalSnapshot(); + }); + + describe('and subscribing a unsubscribed Sampled Value message', () => { + it('initially no ExtRefs are available in the subscriber IED', async () => { + expect( + element.doc.querySelectorAll( + 'IED[name="IED2"] > AccessPoint > Server > LDevice > LN0 > Inputs > ExtRef[iedName="IED3"], ' + + 'IED[name="IED2"] > AccessPoint > Server > LDevice > LN > Inputs > ExtRef[iedName="IED3"]' + ).length + ).to.eql(0); + }); + + describe('clicking on a SampledValueControl list item', () => { + let fCDAs: Element[]; + let smvControlBlock: Element; + + beforeEach(async () => { + smvControlBlock = element.doc.querySelector( + 'IED[name="IED3"] SampledValueControl[name="MSVCB01"]' + )!; + fCDAs = Array.from( + smvControlBlock.parentElement?.querySelectorAll( + `DataSet[name="${smvControlBlock.getAttribute( + 'datSet' + )}"] > FCDA` + ) ?? [] + ); + + (getItemFromSubscriberList('MSVCB01')).click(); + await element.requestUpdate(); + }); + + it('it looks like the latest snapshot', async () => + await expect(getSubscriberList()).shadowDom.to.equalSnapshot()); + + it('adds the required ExtRefs to the subscriber IED', async () => { + expect( + element.doc.querySelectorAll( + 'IED[name="IED2"] > AccessPoint > Server > LDevice > LN0 > Inputs > ExtRef[iedName="IED3"], ' + + 'IED[name="IED2"] > AccessPoint > Server > LDevice > LN > Inputs > ExtRef[iedName="IED3"]' + ).length + ).to.eql(fCDAs.length); + }); + + it('makes sure that Ed1 attributes are added properly', async () => { + fCDAs.forEach( + fcda => + expect( + element.doc.querySelector( + `IED[name="IED2"] ExtRef[iedName="IED3"][ldInst="${fcda.getAttribute( + 'ldInst' + )}"][prefix="${fcda.getAttribute( + 'prefix' + )}"][lnClass="${fcda.getAttribute( + 'lnClass' + )}"][lnInst="${fcda.getAttribute( + 'lnInst' + )}"][doName="${fcda.getAttribute( + 'doName' + )}"][daName="${fcda.getAttribute('daName')}"]` + ) + ).to.exist + ); + }); + + it('makes sure that Ed2 attributes are added properly', async () => { + fCDAs.forEach( + fcda => + expect( + element.doc.querySelector( + `IED[name="IED2"] ExtRef[iedName="IED3"][srcLDInst="${fcda + .closest('LDevice') + ?.getAttribute('inst')}"][srcPrefix="${ + fcda.closest('LN0')?.getAttribute('prefix') ?? '' //prefix is mendatory in ExtRef!! + }"][srcLNClass="${fcda + .closest('LN0') + ?.getAttribute( + 'lnClass' + )}"][srcCBName="${smvControlBlock.getAttribute( + 'name' + )}"][serviceType="SMV"]` + ) + ).to.exist + ); + }); + }); + }); + + describe('and unsubscribing a subscribed Sampled Value message', () => { + beforeEach(async () => { + (getItemFromSubscriberList('MSVCB01')).click(); + await element.updateComplete; + }); + + it('initially all ExtRefs are available in the subscriber IED', async () => { + expect( + element.doc.querySelectorAll( + 'IED[name="IED2"] > AccessPoint > Server > LDevice > LN0 > Inputs > ExtRef[iedName="IED3"], ' + + 'IED[name="IED2"] > AccessPoint > Server > LDevice > LN > Inputs > ExtRef[iedName="IED3"]' + ).length + ).to.eql(16); + }); + + it('it looks like the latest snapshot', async () => { + (getItemFromSubscriberList('MSVCB01')).click(); + await element.updateComplete; + + await expect(getSubscriberList()).shadowDom.to.equalSnapshot(); + }); + + it('removes the required ExtRefs to the subscriber IED', async () => { + (getItemFromSubscriberList('MSVCB01')).click(); + await element.updateComplete; + + expect( + element.doc.querySelectorAll( + 'IED[name="IED2"] > AccessPoint > Server > LDevice > LN0 > Inputs > ExtRef[iedName="IED3"], ' + + 'IED[name="IED2"] > AccessPoint > Server > LDevice > LN > Inputs > ExtRef[iedName="IED3"]' + ).length + ).to.eql(0); + }); + }); + + describe('and subscribing a partially subscribed Sampled Value message', () => { + it('initially some ExtRefs are available in the subscriber IED', async () => { + expect( + element.doc.querySelectorAll( + 'IED[name="IED2"] > AccessPoint > Server > LDevice > LN0 > Inputs > ExtRef[iedName="IED4"], ' + + 'IED[name="IED2"] > AccessPoint > Server > LDevice > LN > Inputs > ExtRef[iedName="IED4"]' + ).length + ).to.eql(2); + }); + + it('it looks like the latest snapshot', async () => { + (getItemFromSubscriberList('MSVCB02')).click(); + await element.updateComplete; + + await expect(getSubscriberList()).shadowDom.to.equalSnapshot(); + }); + + it('adds the required ExtRefs to the subscriber IED', async () => { + (getItemFromSubscriberList('MSVCB02')).click(); + await element.updateComplete; + + expect( + element.doc.querySelectorAll( + 'IED[name="IED2"] > AccessPoint > Server > LDevice > LN0 > Inputs > ExtRef[iedName="IED4"], ' + + 'IED[name="IED2"] > AccessPoint > Server > LDevice > LN > Inputs > ExtRef[iedName="IED4"]' + ).length + ).to.eql(16); + }); + }); + }); + }); + + function getSubscriberList() { + return element.shadowRoot?.querySelector('subscriber-list-smv'); + } + + function getItemFromSubscriberList( + textInListItem: string + ): ListItem | undefined { + return ( + Array.from( + getSubscriberList()!.shadowRoot?.querySelectorAll('mwc-list-item') ?? [] + ).filter(listItem => listItem.innerHTML.includes(textInListItem))[0] ?? + undefined + ); + } +}); diff --git a/packages/open-scd/test/integration/editors/Substation.test.ts b/packages/open-scd/test/integration/editors/Substation.test.ts new file mode 100644 index 0000000000..42e8715887 --- /dev/null +++ b/packages/open-scd/test/integration/editors/Substation.test.ts @@ -0,0 +1,70 @@ +import { html, fixture, expect } from '@open-wc/testing'; + +import '../../mock-wizard.js'; +import { MockWizard } from '../../mock-wizard.js'; + +import { Editing } from '../../../src/Editing.js'; +import Substation from '../../../src/editors/Substation.js'; +import { Wizarding } from '../../../src/Wizarding.js'; + +describe('Substation Plugin', () => { + customElements.define('substation-plugin', Wizarding(Editing(Substation))); + let element: Substation; + beforeEach(async () => { + element = await fixture(html``); + }); + + describe('without a doc loaded', () => { + it('looks like the latest snapshot', async () => { + await expect(element).shadowDom.to.equalSnapshot(); + }); + }); + + describe('with a doc loaded including substation section', () => { + let doc: XMLDocument; + let element: Substation; + beforeEach(async () => { + doc = await fetch('/test/testfiles/valid2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + element = await fixture( + html`` + ); + }); + it('constains a zeroline-pane rendering the substation sections', () => { + expect(element.shadowRoot?.querySelector('zeroline-pane')).to.exist; + }); + }); + + describe('with a doc loaded missing a substation section', () => { + let doc: XMLDocument; + let parent: MockWizard; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/missingSubstation.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + parent = ( + await fixture( + html`` + ) + ); + await element.updateComplete; + }); + it('has a mwc-fab', () => { + expect(element.shadowRoot?.querySelector('mwc-fab')).to.exist; + }); + it('that opens an add substation wizard on click', async () => { + expect(parent.wizardUI.dialogs.length).to.equal(0); + (( + parent + ?.querySelector('substation-plugin') + ?.shadowRoot?.querySelector('mwc-fab') + )).click(); + await parent.updateComplete; + expect(parent.wizardUI.dialogs.length).to.equal(1); + }); + }); +}); diff --git a/packages/open-scd/test/integration/editors/__snapshots__/Cleanup.test.snap.js b/packages/open-scd/test/integration/editors/__snapshots__/Cleanup.test.snap.js new file mode 100644 index 0000000000..fce194476a --- /dev/null +++ b/packages/open-scd/test/integration/editors/__snapshots__/Cleanup.test.snap.js @@ -0,0 +1,118 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["Cleanup without a doc loaded looks like the latest snapshot"] = +`
    +
    +
    +

    + [cleanup.unreferencedDataSets.title] + (0) + + + + +

    + + +
    +
    + + +
    +
    +
    +
    +

    + [cleanup.unreferencedControls.title] + (0) + + + + +

    + + +
    +
    + + + + + + +
    +
    +
    + + +`; +/* end snapshot Cleanup without a doc loaded looks like the latest snapshot */ + +snapshots["Cleanup Datasets without a doc loaded looks like the latest snapshot"] = +`
    +
    +

    + [cleanup.unreferencedDataSets.title] + (0) + + + + +

    + + +
    +
    + + +
    +
    + + +`; +/* end snapshot Cleanup Datasets without a doc loaded looks like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/editors/__snapshots__/GooseSubscriberLaterBinding.test.snap.js b/packages/open-scd/test/integration/editors/__snapshots__/GooseSubscriberLaterBinding.test.snap.js new file mode 100644 index 0000000000..e9da94df03 --- /dev/null +++ b/packages/open-scd/test/integration/editors/__snapshots__/GooseSubscriberLaterBinding.test.snap.js @@ -0,0 +1,359 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["GOOSE Subscribe Later Binding Plugin when selecting the first FCDA element it looks like the latest snapshot"] = +`
    +

    + [subscription.laterBinding.extRefList.title] +

    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + Pos;CSWI1/Pos/stVal + (Interlocking.Input2) + + + GOOSE_Subscriber>>Earth_Switch> CSWI 1 + + + swap_horiz + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + Pos;CSWI1/Pos/stVal + (Interlocking.Input) + + + GOOSE_Subscriber>>Earth_Switch> CILO 1 + + + arrow_back + + + + + Pos;CILO/EnaCls/stVal + (Interlocking.Input3) + + + GOOSE_Subscriber>>Earth_Switch> CILO 1 + + + arrow_back + + + + + Pos;CILO/EnaOpn2/stVal + (Interlocking.Input4) + + + GOOSE_Subscriber>>Earth_Switch> CILO 1 + + + arrow_back + + + + + someRestrictedExtRef + (Restricted To Pos) + + + GOOSE_Subscriber>>Earth_Switch> CSWI 1 + + + arrow_back + + + + + someRestrictedExtRef + (Restricted To Pos) + + + GOOSE_Subscriber>>Earth_Switch> CSWI 1 + + + arrow_back + + +
    +
    +`; +/* end snapshot GOOSE Subscribe Later Binding Plugin when selecting the first FCDA element it looks like the latest snapshot */ + +snapshots["GOOSE Subscribe Later Binding Plugin when selecting an FCDA element with subscriptions it looks like the latest snapshot"] = +`
    +

    + [subscription.laterBinding.extRefList.title] +

    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + Pos;CSWI1/Pos/stVal + (Interlocking.Input2) + + + GOOSE_Subscriber>>Earth_Switch> CSWI 1 + + + swap_horiz + + + + + Pos;CSWI1/Pos/stVal + (Interlocking.Input2) + + + GOOSE_Subscriber1>>Earth_Switch> CSWI 1 (GOOSE_Subscriber1>>SV_supervision> LGOS 1) + + + swap_horiz + + + monitor_heart + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + Pos;CSWI1/Pos/stVal + (Interlocking.Input) + + + GOOSE_Subscriber>>Earth_Switch> CILO 1 + + + arrow_back + + + + + Pos;CSWI1/Pos/q + (Interlocking.Input) + + + GOOSE_Subscriber>>Earth_Switch> CILO 1 + + + arrow_back + + + + + someRestrictedExtRef + (Restricted To Pos) + + + GOOSE_Subscriber>>Earth_Switch> CSWI 1 + + + arrow_back + + + + + Pos;CSWI1/Pos/stVal + (Interlocking.Input) + + + GOOSE_Subscriber1>>Earth_Switch> CILO 1 + + + arrow_back + + + + + Pos;CSWI1/Pos/q + (Interlocking.Input) + + + GOOSE_Subscriber1>>Earth_Switch> CILO 1 + + + arrow_back + + + + + someRestrictedExtRef + (Restricted To Pos) + + + GOOSE_Subscriber1>>Earth_Switch> CSWI 1 + + + arrow_back + + +
    +
    +`; +/* end snapshot GOOSE Subscribe Later Binding Plugin when selecting an FCDA element with subscriptions it looks like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/editors/__snapshots__/GooseSubscriberMessageBinding.test.snap.js b/packages/open-scd/test/integration/editors/__snapshots__/GooseSubscriberMessageBinding.test.snap.js new file mode 100644 index 0000000000..5b60496600 --- /dev/null +++ b/packages/open-scd/test/integration/editors/__snapshots__/GooseSubscriberMessageBinding.test.snap.js @@ -0,0 +1,1545 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["GOOSE subscriber plugin in Publisher view per default the plugin itself looks like the latest snapshot"] = +`
    + + + + + + + + +
    + + + + +
    +
    + + + + + + + + + + + [log.placeholder] + + + info + + + + + [close] + + + + + + + [history.placeholder] + + + info + + + + + + + + + [close] + + + + + + + [diag.placeholder] + + + info + + + + + [close] + + + + + + + + + [log.snackbar.show] + + + + + + + [log.snackbar.show] + + + + + + + [log.snackbar.show] + + + + + + +`; +/* end snapshot GOOSE subscriber plugin in Publisher view per default the plugin itself looks like the latest snapshot */ + +snapshots["GOOSE subscriber plugin in Publisher view per default the right hand side GSEControl list looks like the latest snapshot"] = +`
    +

    + [subscription.goose.publisher.title] +

    + + + + IED1 + + + developer_board + + +
  • +
  • + + + + + GCB + + + + + + IED2 + + + developer_board + + +
  • +
  • + + + + + GCB + + + + + + IED3 + + + developer_board + + +
  • +
  • + + + IED4 + + + developer_board + + +
  • +
  • + + + + + GCB + + + +
    +
    +`; +/* end snapshot GOOSE subscriber plugin in Publisher view per default the right hand side GSEControl list looks like the latest snapshot */ + +snapshots["GOOSE subscriber plugin in Publisher view per default the left hand side subscriber IED list looks like the latest snapshot"] = +`
    +

    + [subscription.goose.publisher.subscriberTitle] +

    + + + + [subscription.subscriber.noControlBlockSelected] + + + +
    +`; +/* end snapshot GOOSE subscriber plugin in Publisher view per default the left hand side subscriber IED list looks like the latest snapshot */ + +snapshots["GOOSE subscriber plugin in Publisher view with a selected GOOSE message the left hand side subscriber IED list looks like the latest snapshot"] = +`
    +

    + [subscription.goose.publisher.subscriberTitle] +

    +
    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + IED1 + + + clear + + + monitor_heart + + + + + [subscription.subscriber.partiallySubscribed] + + +
  • +
  • + + + [subscription.none] + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + IED3 + + + add + + + + + IED4 + + + add + + +
    +
    +
    +`; +/* end snapshot GOOSE subscriber plugin in Publisher view with a selected GOOSE message the left hand side subscriber IED list looks like the latest snapshot */ + +snapshots["GOOSE subscriber plugin in Publisher view with a selected GOOSE message for unsubscribed IEDs after clicking on the IEDs list element the left hand side subscriber IED list looks like the latest snapshot"] = +`
    +

    + [subscription.goose.publisher.subscriberTitle] +

    +
    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + IED1 + + + clear + + + monitor_heart + + + + + IED3 + + + clear + + + + + [subscription.subscriber.partiallySubscribed] + + +
  • +
  • + + + [subscription.none] + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + IED4 + + + add + + +
    +
    +
    +`; +/* end snapshot GOOSE subscriber plugin in Publisher view with a selected GOOSE message for unsubscribed IEDs after clicking on the IEDs list element the left hand side subscriber IED list looks like the latest snapshot */ + +snapshots["GOOSE subscriber plugin in Publisher view with a selected GOOSE message for subscribed IEDs after clicking on the IEDs list element looks like the latest snapshot"] = +`
    +

    + [subscription.goose.publisher.subscriberTitle] +

    +
    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + [subscription.none] + + + + + [subscription.subscriber.partiallySubscribed] + + +
  • +
  • + + + [subscription.none] + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + IED1 + + + add + + + + + IED3 + + + add + + + + + IED4 + + + add + + +
    +
    +
    +`; +/* end snapshot GOOSE subscriber plugin in Publisher view with a selected GOOSE message for subscribed IEDs after clicking on the IEDs list element looks like the latest snapshot */ + +snapshots["GOOSE subscriber plugin in Publisher view with a selected GOOSE message for partially subscribed IEDs after clicking on the IEDs list element it looks like the latest snapshot"] = +`
    +

    + [subscription.goose.publisher.subscriberTitle] +

    +
    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + IED1 + + + clear + + + monitor_heart + + + + + IED4 + + + clear + + + + + [subscription.subscriber.partiallySubscribed] + + +
  • +
  • + + + [subscription.none] + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + IED3 + + + add + + +
    +
    +
    +`; +/* end snapshot GOOSE subscriber plugin in Publisher view with a selected GOOSE message for partially subscribed IEDs after clicking on the IEDs list element it looks like the latest snapshot */ + +snapshots["GOOSE subscriber plugin in Subscriber view per default the plugin itsself looks like the latest snapshot"] = +`
    + + + + + + + + +
    + + + + +
    +
    + + + + + + + + + + + [log.placeholder] + + + info + + + + + [close] + + + + + + + [history.placeholder] + + + info + + + + + + + + + [close] + + + + + + + [diag.placeholder] + + + info + + + + + [close] + + + + + + + + + [log.snackbar.show] + + + + + + + [log.snackbar.show] + + + + + + + [log.snackbar.show] + + + + + + +`; +/* end snapshot GOOSE subscriber plugin in Subscriber view per default the plugin itsself looks like the latest snapshot */ + +snapshots["GOOSE subscriber plugin in Subscriber view per default the right hand side IEDs list looks like the latest snapshot"] = +`
    +

    + [subscription.goose.subscriber.iedListTitle] +

    + + + + IED1 + + + developer_board + + + + + IED2 + + + developer_board + + + + + IED3 + + + developer_board + + + + + IED4 + + + developer_board + + + +
    +`; +/* end snapshot GOOSE subscriber plugin in Subscriber view per default the right hand side IEDs list looks like the latest snapshot */ + +snapshots["GOOSE subscriber plugin in Subscriber view per default the left hand side subscriber IED list looks like the latest snapshot"] = +`
    +

    + [subscription.goose.subscriber.publisherTitle] +

    + + + + [subscription.subscriber.noIedSelected] + + + +
    +`; +/* end snapshot GOOSE subscriber plugin in Subscriber view per default the left hand side subscriber IED list looks like the latest snapshot */ + +snapshots["GOOSE subscriber plugin in Subscriber view with a selected IED the left hand side subscriber IED list looks like the latest snapshot"] = +`
    +

    + [subscription.goose.subscriber.publisherTitle] +

    +
    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + [subscription.none] + + + + + [subscription.subscriber.partiallySubscribed] + + +
  • +
  • + + + [subscription.none] + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + GCB (IED1) + + + add + + + + + GCB (IED4) + + + add + + +
    +
    +
    +`; +/* end snapshot GOOSE subscriber plugin in Subscriber view with a selected IED the left hand side subscriber IED list looks like the latest snapshot */ + +snapshots["GOOSE subscriber plugin in Subscriber view with a selected IED for unsubscribed GSEControl s clicking on a GSEControl list item the left hand side subscriber IED list looks like the latest snapshot"] = +`
    +

    + [subscription.goose.subscriber.publisherTitle] +

    +
    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + GCB (IED4) + + + clear + + + + + [subscription.subscriber.partiallySubscribed] + + +
  • +
  • + + + [subscription.none] + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + GCB (IED1) + + + add + + +
    +
    +
    +`; +/* end snapshot GOOSE subscriber plugin in Subscriber view with a selected IED for unsubscribed GSEControl s clicking on a GSEControl list item the left hand side subscriber IED list looks like the latest snapshot */ + +snapshots["GOOSE subscriber plugin in Subscriber view with a selected IED for subscribed GSEControl s clicking on the GSEControl list item the left hand side subscriber IED list looks like the latest snapshot"] = +`
    +

    + [subscription.goose.subscriber.publisherTitle] +

    +
    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + [subscription.none] + + + + + [subscription.subscriber.partiallySubscribed] + + +
  • +
  • + + + [subscription.none] + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + GCB (IED1) + + + add + + + + + GCB (IED4) + + + add + + +
    +
    +
    +`; +/* end snapshot GOOSE subscriber plugin in Subscriber view with a selected IED for subscribed GSEControl s clicking on the GSEControl list item the left hand side subscriber IED list looks like the latest snapshot */ + +snapshots["GOOSE subscriber plugin in Subscriber view with a selected IED for partially subscribed GSEControl s clicking on the GSEControl list item the left hand side subscriber IED list looks like the latest snapshot"] = +`
    +

    + [subscription.goose.subscriber.publisherTitle] +

    +
    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + GCB (IED1) + + + clear + + + + + [subscription.subscriber.partiallySubscribed] + + +
  • +
  • + + + [subscription.none] + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + GCB (IED4) + + + add + + +
    +
    +
    +`; +/* end snapshot GOOSE subscriber plugin in Subscriber view with a selected IED for partially subscribed GSEControl s clicking on the GSEControl list item the left hand side subscriber IED list looks like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/editors/__snapshots__/IED.test.snap.js b/packages/open-scd/test/integration/editors/__snapshots__/IED.test.snap.js new file mode 100644 index 0000000000..b07ca79296 --- /dev/null +++ b/packages/open-scd/test/integration/editors/__snapshots__/IED.test.snap.js @@ -0,0 +1,171 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["IED Plugin without a doc loaded looks like the latest snapshot"] = +`

    + + [iededitor.missing] + +

    + + +`; +/* end snapshot IED Plugin without a doc loaded looks like the latest snapshot */ + +snapshots["IED Plugin with a doc loaded containing no IEDs looks like the latest snapshot"] = +`

    + + [iededitor.missing] + +

    + + +`; +/* end snapshot IED Plugin with a doc loaded containing no IEDs looks like the latest snapshot */ + +snapshots["IED Plugin with a doc loaded containing IEDs looks like the latest snapshot"] = +`
    +
    +

    + [filters]: +

    + + + IED1 + + DummyIED — + DummyManufactorer + + + + IED2 + + DummyIED — + DummyManufactorer + + + + IED3 + + DummyIED — + DummyManufactorer + + + + IED4 + + DummyIED — + DummyManufactorer + + + + IED5 + + DummyIED — + DummyManufactorer + + + + + + + + CILO + + + CSWI + + + LLN0 + + + XCBR + + + XSWI + + + + +
    + + +
    + + +`; +/* end snapshot IED Plugin with a doc loaded containing IEDs looks like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/editors/__snapshots__/Protocol104.test.snap.js b/packages/open-scd/test/integration/editors/__snapshots__/Protocol104.test.snap.js new file mode 100644 index 0000000000..2e48e6a02d --- /dev/null +++ b/packages/open-scd/test/integration/editors/__snapshots__/Protocol104.test.snap.js @@ -0,0 +1,65 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["Protocol 104 Plugin in Values view the plugin looks like the latest snapshot"] = +`
    +
    + + + + + + + + +
    + + +
    +
    +
    + + +`; +/* end snapshot Protocol 104 Plugin in Values view the plugin looks like the latest snapshot */ + +snapshots["Protocol 104 Plugin in Network view the plugin looks like the latest snapshot"] = +`
    +
    + + + + + + + + +
    + + +
    +
    +
    + + +`; +/* end snapshot Protocol 104 Plugin in Network view the plugin looks like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/editors/__snapshots__/SMVSubscriberLaterBinding.test.snap.js b/packages/open-scd/test/integration/editors/__snapshots__/SMVSubscriberLaterBinding.test.snap.js new file mode 100644 index 0000000000..08489396a6 --- /dev/null +++ b/packages/open-scd/test/integration/editors/__snapshots__/SMVSubscriberLaterBinding.test.snap.js @@ -0,0 +1,2844 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["SMV Subscribe Later Binding plugin when selecting the first FCDA element it looks like the latest snapshot"] = +`
    +

    + [subscription.laterBinding.extRefList.title] +

    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + AmpSv;TCTR1/AmpSv/instMag.i + (MeasPoint.CT1) + + + SMV_Subscriber2>>Overvoltage> PTRC 1 (SMV_Subscriber2>>SV_supervision> LSVS 1) + + + swap_horiz + + + monitor_heart + + + + + AmpSv;TCTR1/AmpSv/instMag.i + (MeasPoint.CT1) + + + SMV_Subscriber4>>Overvoltage> PTRC 1 (SMV_Subscriber4>>SV_supervision> LSVS 1) + + + swap_horiz + + + monitor_heart + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + AmpSv;TCTR1/AmpSv/instMag.i + (MeasPoint.CT1) + + + SMV_Subscriber>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR1/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/instMag.i + (MeasPoint.CT2) + + + SMV_Subscriber>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/instMag.i + (MeasPoint.CT3) + + + SMV_Subscriber>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber>>Overvoltage> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/instMag.i + (MeasPoint.VT1) + + + SMV_Subscriber>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/instMag.i + (MeasPoint.VT2) + + + SMV_Subscriber>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/instMag.i + (MeasPoint.VT3) + + + SMV_Subscriber>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber>>Overcurrent> PTRC 1 + + + arrow_back + + + + + someRestrictedExtRef + (Restricted To AmpSV) + + + SMV_Subscriber>>Overcurrent> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR1/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber2>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/instMag.i + (MeasPoint.CT2) + + + SMV_Subscriber2>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber2>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/instMag.i + (MeasPoint.CT3) + + + SMV_Subscriber2>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber2>>Overvoltage> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/instMag.i + (MeasPoint.VT1) + + + SMV_Subscriber2>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber2>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/instMag.i + (MeasPoint.VT2) + + + SMV_Subscriber2>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber2>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/instMag.i + (MeasPoint.VT3) + + + SMV_Subscriber2>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber2>>Overcurrent> PTRC 1 + + + arrow_back + + + + + someRestrictedExtRef + (Restricted To AmpSV) + + + SMV_Subscriber2>>Overcurrent> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR1/AmpSv/instMag.i + (MeasPoint.CT1) + + + SMV_Subscriber3>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR1/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber3>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/instMag.i + (MeasPoint.CT2) + + + SMV_Subscriber3>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber3>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/instMag.i + (MeasPoint.CT3) + + + SMV_Subscriber3>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber3>>Overvoltage> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/instMag.i + (MeasPoint.VT1) + + + SMV_Subscriber3>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber3>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/instMag.i + (MeasPoint.VT2) + + + SMV_Subscriber3>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber3>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/instMag.i + (MeasPoint.VT3) + + + SMV_Subscriber3>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber3>>Overcurrent> PTRC 1 + + + arrow_back + + + + + someRestrictedExtRef + (Restricted To AmpSV) + + + SMV_Subscriber3>>Overcurrent> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR1/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber4>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/instMag.i + (MeasPoint.CT2) + + + SMV_Subscriber4>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber4>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/instMag.i + (MeasPoint.CT3) + + + SMV_Subscriber4>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber4>>Overvoltage> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/instMag.i + (MeasPoint.VT1) + + + SMV_Subscriber4>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber4>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/instMag.i + (MeasPoint.VT2) + + + SMV_Subscriber4>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber4>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/instMag.i + (MeasPoint.VT3) + + + SMV_Subscriber4>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber4>>Overcurrent> PTRC 1 + + + arrow_back + + + + + someRestrictedExtRef + (Restricted To AmpSV) + + + SMV_Subscriber4>>Overcurrent> PTRC 1 + + + arrow_back + + +
    +
    +`; +/* end snapshot SMV Subscribe Later Binding plugin when selecting the first FCDA element it looks like the latest snapshot */ + +snapshots["SMV Subscribe Later Binding plugin when selecting an FCDA element with subscriptions it looks like the latest snapshot"] = +`
    +

    + [subscription.laterBinding.extRefList.title] +

    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + AmpSv;TCTR1/AmpSv/instMag.i + (MeasPoint.CT1) + + + SMV_Subscriber2>>Overvoltage> PTRC 1 (SMV_Subscriber2>>SV_supervision> LSVS 1) + + + swap_horiz + + + monitor_heart + + + + + AmpSv;TCTR1/AmpSv/instMag.i + (MeasPoint.CT1) + + + SMV_Subscriber4>>Overvoltage> PTRC 1 (SMV_Subscriber4>>SV_supervision> LSVS 1) + + + swap_horiz + + + monitor_heart + + + + + AmpSv;TCTR1/AmpSv/instMag.i + (MeasPoint.CT1) + + + SMV_Subscriber5>>Overvoltage> PTRC 1 (SMV_Subscriber5>>SV_supervision> LSVS 1) + + + swap_horiz + + + monitor_heart + + + + + AmpSv;TCTR1/AmpSv/instMag.i + (MeasPoint.CT1) + + + SMV_Subscriber6>>Overvoltage> PTRC 1 (SMV_Subscriber6>>SV_supervision> LSVS 1) + + + swap_horiz + + + monitor_heart + + + + + AmpSv;TCTR1/AmpSv/instMag.i + (MeasPoint.CT1) + + + SMV_Subscriber7>>Overvoltage> PTRC 1 + + + swap_horiz + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + AmpSv;TCTR1/AmpSv/instMag.i + (MeasPoint.CT1) + + + SMV_Subscriber>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR1/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/instMag.i + (MeasPoint.CT2) + + + SMV_Subscriber>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/instMag.i + (MeasPoint.CT3) + + + SMV_Subscriber>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber>>Overvoltage> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/instMag.i + (MeasPoint.VT1) + + + SMV_Subscriber>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/instMag.i + (MeasPoint.VT2) + + + SMV_Subscriber>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/instMag.i + (MeasPoint.VT3) + + + SMV_Subscriber>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber>>Overcurrent> PTRC 1 + + + arrow_back + + + + + someRestrictedExtRef + (Restricted To AmpSV) + + + SMV_Subscriber>>Overcurrent> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR1/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber2>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/instMag.i + (MeasPoint.CT2) + + + SMV_Subscriber2>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber2>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/instMag.i + (MeasPoint.CT3) + + + SMV_Subscriber2>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber2>>Overvoltage> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/instMag.i + (MeasPoint.VT1) + + + SMV_Subscriber2>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber2>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/instMag.i + (MeasPoint.VT2) + + + SMV_Subscriber2>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber2>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/instMag.i + (MeasPoint.VT3) + + + SMV_Subscriber2>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber2>>Overcurrent> PTRC 1 + + + arrow_back + + + + + someRestrictedExtRef + (Restricted To AmpSV) + + + SMV_Subscriber2>>Overcurrent> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR1/AmpSv/instMag.i + (MeasPoint.CT1) + + + SMV_Subscriber3>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR1/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber3>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/instMag.i + (MeasPoint.CT2) + + + SMV_Subscriber3>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber3>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/instMag.i + (MeasPoint.CT3) + + + SMV_Subscriber3>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber3>>Overvoltage> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/instMag.i + (MeasPoint.VT1) + + + SMV_Subscriber3>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber3>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/instMag.i + (MeasPoint.VT2) + + + SMV_Subscriber3>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber3>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/instMag.i + (MeasPoint.VT3) + + + SMV_Subscriber3>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber3>>Overcurrent> PTRC 1 + + + arrow_back + + + + + someRestrictedExtRef + (Restricted To AmpSV) + + + SMV_Subscriber3>>Overcurrent> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR1/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber4>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/instMag.i + (MeasPoint.CT2) + + + SMV_Subscriber4>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber4>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/instMag.i + (MeasPoint.CT3) + + + SMV_Subscriber4>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber4>>Overvoltage> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/instMag.i + (MeasPoint.VT1) + + + SMV_Subscriber4>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber4>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/instMag.i + (MeasPoint.VT2) + + + SMV_Subscriber4>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber4>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/instMag.i + (MeasPoint.VT3) + + + SMV_Subscriber4>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber4>>Overcurrent> PTRC 1 + + + arrow_back + + + + + someRestrictedExtRef + (Restricted To AmpSV) + + + SMV_Subscriber4>>Overcurrent> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR1/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber5>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/instMag.i + (MeasPoint.CT2) + + + SMV_Subscriber5>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber5>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/instMag.i + (MeasPoint.CT3) + + + SMV_Subscriber5>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber5>>Overvoltage> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/instMag.i + (MeasPoint.VT1) + + + SMV_Subscriber5>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber5>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/instMag.i + (MeasPoint.VT2) + + + SMV_Subscriber5>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber5>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/instMag.i + (MeasPoint.VT3) + + + SMV_Subscriber5>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber5>>Overcurrent> PTRC 1 + + + arrow_back + + + + + someRestrictedExtRef + (Restricted To AmpSV) + + + SMV_Subscriber5>>Overcurrent> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR1/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber6>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/instMag.i + (MeasPoint.CT2) + + + SMV_Subscriber6>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber6>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/instMag.i + (MeasPoint.CT3) + + + SMV_Subscriber6>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber6>>Overvoltage> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/instMag.i + (MeasPoint.VT1) + + + SMV_Subscriber6>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber6>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/instMag.i + (MeasPoint.VT2) + + + SMV_Subscriber6>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber6>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/instMag.i + (MeasPoint.VT3) + + + SMV_Subscriber6>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber6>>Overcurrent> PTRC 1 + + + arrow_back + + + + + someRestrictedExtRef + (Restricted To AmpSV) + + + SMV_Subscriber6>>Overcurrent> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR1/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber7>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/instMag.i + (MeasPoint.CT2) + + + SMV_Subscriber7>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR2/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber7>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/instMag.i + (MeasPoint.CT3) + + + SMV_Subscriber7>>Overvoltage> PTRC 1 + + + arrow_back + + + + + AmpSv;TCTR3/AmpSv/q + (MeasPoint.CT1) + + + SMV_Subscriber7>>Overvoltage> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/instMag.i + (MeasPoint.VT1) + + + SMV_Subscriber7>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR1/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber7>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/instMag.i + (MeasPoint.VT2) + + + SMV_Subscriber7>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR2/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber7>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/instMag.i + (MeasPoint.VT3) + + + SMV_Subscriber7>>Overcurrent> PTRC 1 + + + arrow_back + + + + + VolSv;TVTR3/VolSv/q + (MeasPoint.VT1) + + + SMV_Subscriber7>>Overcurrent> PTRC 1 + + + arrow_back + + + + + someRestrictedExtRef + (Restricted To AmpSV) + + + SMV_Subscriber7>>Overcurrent> PTRC 1 + + + arrow_back + + +
    +
    +`; +/* end snapshot SMV Subscribe Later Binding plugin when selecting an FCDA element with subscriptions it looks like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/editors/__snapshots__/SMVSubscriberMessageBinding.test.snap.js b/packages/open-scd/test/integration/editors/__snapshots__/SMVSubscriberMessageBinding.test.snap.js new file mode 100644 index 0000000000..8fe2049817 --- /dev/null +++ b/packages/open-scd/test/integration/editors/__snapshots__/SMVSubscriberMessageBinding.test.snap.js @@ -0,0 +1,1520 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["Sampled Values Plugin in Publisher view initially the plugin looks like the latest snapshot"] = +`
    + + + + + + + + +
    + + + + +
    +
    + + + + + + + + + + + [log.placeholder] + + + info + + + + + [close] + + + + + + + [history.placeholder] + + + info + + + + + + + + + [close] + + + + + + + [diag.placeholder] + + + info + + + + + [close] + + + + + + + + + [log.snackbar.show] + + + + + + + [log.snackbar.show] + + + + + + + [log.snackbar.show] + + + + + + +`; +/* end snapshot Sampled Values Plugin in Publisher view initially the plugin looks like the latest snapshot */ + +snapshots["Sampled Values Plugin in Publisher view initially the Sampled Values list looks like the latest snapshot"] = +`
    +

    + [subscription.smv.publisher.title] +

    + + + + IED1 + + + developer_board + + +
  • +
  • + + + IED2 + + + developer_board + + +
  • +
  • + + + IED3 + + + developer_board + + +
  • +
  • + + + + + MSVCB01 + + + + + + IED4 + + + developer_board + + +
  • +
  • + + + + + MSVCB02 + + + +
    +
    +`; +/* end snapshot Sampled Values Plugin in Publisher view initially the Sampled Values list looks like the latest snapshot */ + +snapshots["Sampled Values Plugin in Publisher view initially the subscriber list looks like the latest snapshot"] = +`
    +

    + [subscription.smv.publisher.subscriberTitle] +

    + + + + [subscription.subscriber.noControlBlockSelected] + + + +
    +`; +/* end snapshot Sampled Values Plugin in Publisher view initially the subscriber list looks like the latest snapshot */ + +snapshots["Sampled Values Plugin in Publisher view when selecting a Sampled Values message the list on the right will initially show the subscribed / partially subscribed / not subscribed IEDs"] = +`
    +

    + [subscription.smv.publisher.subscriberTitle] +

    +
    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + IED1 + + + clear + + + monitor_heart + + + + + [subscription.subscriber.partiallySubscribed] + + +
  • +
  • + + + IED4 + + + add + + + monitor_heart + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + IED2 + + + add + + +
    +
    +
    +`; +/* end snapshot Sampled Values Plugin in Publisher view when selecting a Sampled Values message the list on the right will initially show the subscribed / partially subscribed / not subscribed IEDs */ + +snapshots["Sampled Values Plugin in Publisher view when selecting a Sampled Values message and subscribing an unsubscribed IED it looks like the latest snapshot"] = +`
    +

    + [subscription.smv.publisher.subscriberTitle] +

    +
    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + IED1 + + + clear + + + monitor_heart + + + + + IED2 + + + clear + + + + + [subscription.subscriber.partiallySubscribed] + + +
  • +
  • + + + IED4 + + + add + + + monitor_heart + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + [subscription.none] + + +
    +
    +
    +`; +/* end snapshot Sampled Values Plugin in Publisher view when selecting a Sampled Values message and subscribing an unsubscribed IED it looks like the latest snapshot */ + +snapshots["Sampled Values Plugin in Publisher view when selecting a Sampled Values message and you unsubscribe a subscribed IED it looks like the latest snapshot"] = +`
    +

    + [subscription.smv.publisher.subscriberTitle] +

    +
    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + [subscription.none] + + + + + [subscription.subscriber.partiallySubscribed] + + +
  • +
  • + + + IED4 + + + add + + + monitor_heart + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + IED1 + + + add + + + + + IED2 + + + add + + +
    +
    +
    +`; +/* end snapshot Sampled Values Plugin in Publisher view when selecting a Sampled Values message and you unsubscribe a subscribed IED it looks like the latest snapshot */ + +snapshots["Sampled Values Plugin in Publisher view when selecting a Sampled Values message and you subscribe a partially subscribed IED it looks like the latest snapshot"] = +`
    +

    + [subscription.smv.publisher.subscriberTitle] +

    +
    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + IED1 + + + clear + + + monitor_heart + + + + + IED4 + + + clear + + + monitor_heart + + + + + [subscription.subscriber.partiallySubscribed] + + +
  • +
  • + + + [subscription.none] + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + IED2 + + + add + + +
    +
    +
    +`; +/* end snapshot Sampled Values Plugin in Publisher view when selecting a Sampled Values message and you subscribe a partially subscribed IED it looks like the latest snapshot */ + +snapshots["Sampled Values Plugin in Subscriber view initially the plugin looks like the latest snapshot"] = +`
    + + + + + + + + +
    + + + + +
    +
    + + + + + + + + + + + [log.placeholder] + + + info + + + + + [close] + + + + + + + [history.placeholder] + + + info + + + + + + + + + [close] + + + + + + + [diag.placeholder] + + + info + + + + + [close] + + + + + + + + + [log.snackbar.show] + + + + + + + [log.snackbar.show] + + + + + + + [log.snackbar.show] + + + + + + +`; +/* end snapshot Sampled Values Plugin in Subscriber view initially the plugin looks like the latest snapshot */ + +snapshots["Sampled Values Plugin in Subscriber view initially the IED list looks like the latest snapshot"] = +`
    +

    + [subscription.smv.subscriber.iedListTitle] +

    + + + + IED1 + + + developer_board + + + + + IED2 + + + developer_board + + + + + IED3 + + + developer_board + + + + + IED4 + + + developer_board + + + +
    +`; +/* end snapshot Sampled Values Plugin in Subscriber view initially the IED list looks like the latest snapshot */ + +snapshots["Sampled Values Plugin in Subscriber view initially the subscriber list looks like the latest snapshot"] = +`
    +

    + [subscription.smv.subscriber.publisherTitle] +

    + + + + [subscription.subscriber.noIedSelected] + + + +
    +`; +/* end snapshot Sampled Values Plugin in Subscriber view initially the subscriber list looks like the latest snapshot */ + +snapshots["Sampled Values Plugin in Subscriber view when selecting an IED the subscriber list will initially show the subscribed / partially subscribed / not subscribed IEDs"] = +`
    +

    + [subscription.smv.subscriber.publisherTitle] +

    +
    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + [subscription.none] + + + + + [subscription.subscriber.partiallySubscribed] + + +
  • +
  • + + + MSVCB02 (IED4) + + + add + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + MSVCB01 (IED3) + + + add + + +
    +
    +
    +`; +/* end snapshot Sampled Values Plugin in Subscriber view when selecting an IED the subscriber list will initially show the subscribed / partially subscribed / not subscribed IEDs */ + +snapshots["Sampled Values Plugin in Subscriber view when selecting an IED and subscribing a unsubscribed Sampled Value message clicking on a SampledValueControl list item it looks like the latest snapshot"] = +`
    +

    + [subscription.smv.subscriber.publisherTitle] +

    +
    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + MSVCB01 (IED3) + + + clear + + + + + [subscription.subscriber.partiallySubscribed] + + +
  • +
  • + + + [subscription.none] + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + MSVCB02 (IED4) + + + add + + +
    +
    +
    +`; +/* end snapshot Sampled Values Plugin in Subscriber view when selecting an IED and subscribing a unsubscribed Sampled Value message clicking on a SampledValueControl list item it looks like the latest snapshot */ + +snapshots["Sampled Values Plugin in Subscriber view when selecting an IED and unsubscribing a subscribed Sampled Value message it looks like the latest snapshot"] = +`
    +

    + [subscription.smv.subscriber.publisherTitle] +

    +
    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + [subscription.none] + + + + + [subscription.subscriber.partiallySubscribed] + + +
  • +
  • + + + [subscription.none] + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + MSVCB01 (IED3) + + + add + + + + + MSVCB02 (IED4) + + + add + + +
    +
    +
    +`; +/* end snapshot Sampled Values Plugin in Subscriber view when selecting an IED and unsubscribing a subscribed Sampled Value message it looks like the latest snapshot */ + +snapshots["Sampled Values Plugin in Subscriber view when selecting an IED and subscribing a partially subscribed Sampled Value message it looks like the latest snapshot"] = +`
    +

    + [subscription.smv.subscriber.publisherTitle] +

    +
    + + + + [subscription.subscriber.subscribed] + + +
  • +
  • + + + MSVCB02 (IED4) + + + clear + + + + + [subscription.subscriber.partiallySubscribed] + + +
  • +
  • + + + [subscription.none] + + + + + [subscription.subscriber.availableToSubscribe] + + +
  • +
  • + + + MSVCB01 (IED3) + + + add + + +
    +
    +
    +`; +/* end snapshot Sampled Values Plugin in Subscriber view when selecting an IED and subscribing a partially subscribed Sampled Value message it looks like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/editors/__snapshots__/Substation.test.snap.js b/packages/open-scd/test/integration/editors/__snapshots__/Substation.test.snap.js new file mode 100644 index 0000000000..b385e4d863 --- /dev/null +++ b/packages/open-scd/test/integration/editors/__snapshots__/Substation.test.snap.js @@ -0,0 +1,19 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["Substation Plugin without a doc loaded looks like the latest snapshot"] = +` + +

    + + +

    + + +`; +/* end snapshot Substation Plugin without a doc loaded looks like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/editors/cleanup/__snapshots__/control-blocks-container.test.snap.js b/packages/open-scd/test/integration/editors/cleanup/__snapshots__/control-blocks-container.test.snap.js new file mode 100644 index 0000000000..c1d6cc71b5 --- /dev/null +++ b/packages/open-scd/test/integration/editors/cleanup/__snapshots__/control-blocks-container.test.snap.js @@ -0,0 +1,77 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["cleanup-editor integration: unreferenced control blocks without a doc loaded looks like the latest snapshot"] = +`
    +
    +

    + [cleanup.unreferencedControls.title] + (0) + + + + +

    + + + + + + + + + + +
    +
    + + + + + + +
    +
    + + +`; +/* end snapshot cleanup-editor integration: unreferenced control blocks without a doc loaded looks like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/editors/cleanup/__snapshots__/datasets-container.test.snap.js b/packages/open-scd/test/integration/editors/cleanup/__snapshots__/datasets-container.test.snap.js new file mode 100644 index 0000000000..e2a1410f95 --- /dev/null +++ b/packages/open-scd/test/integration/editors/cleanup/__snapshots__/datasets-container.test.snap.js @@ -0,0 +1,255 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["Cleanup: Datasets Container without a doc loaded looks like the latest snapshot"] = +`
    +
    +

    + [cleanup.unreferencedDataSets.title] + (0) + + + + +

    + + +
    +
    + + +
    +
    + + +`; +/* end snapshot Cleanup: Datasets Container without a doc loaded looks like the latest snapshot */ + +snapshots["Cleanup: Datasets Container With a test file loaded looks like the latest snapshot"] = +`
    +
    +

    + [cleanup.unreferencedDataSets.title] + (2) + + + + +

    + + + + GooseDataSet2 + + + + + + + IED1 + (DummyManufacturer) + - + DummyIED + + + + + PhsMeas2 + + + + + + + IED3 + (DummyManufacturer) + - + DummyIED + + + +
    +
    + + +
    +
    + + +`; +/* end snapshot Cleanup: Datasets Container With a test file loaded looks like the latest snapshot */ + +snapshots["cleanup-editor integration: dataset removal without a doc loaded looks like the latest snapshot"] = +`
    +
    +

    + [cleanup.unreferencedDataSets.title] + (0) + + + + +

    + + +
    +
    + + +
    +
    + + +`; +/* end snapshot cleanup-editor integration: dataset removal without a doc loaded looks like the latest snapshot */ + +snapshots["cleanup-editor integration: dataset removal With a test file loaded looks like the latest snapshot"] = +`
    +
    +

    + [cleanup.unreferencedDataSets.title] + (2) + + + + +

    + + + + GooseDataSet2 + + + + + + + IED1 + (DummyManufacturer) + - + DummyIED + + + + + PhsMeas2 + + + + + + + IED3 + (DummyManufacturer) + - + DummyIED + + + +
    +
    + + +
    +
    + + +`; +/* end snapshot cleanup-editor integration: dataset removal With a test file loaded looks like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/editors/cleanup/__snapshots__/datatypes-container.test.snap.js b/packages/open-scd/test/integration/editors/cleanup/__snapshots__/datatypes-container.test.snap.js new file mode 100644 index 0000000000..f0a9e4fd31 --- /dev/null +++ b/packages/open-scd/test/integration/editors/cleanup/__snapshots__/datatypes-container.test.snap.js @@ -0,0 +1,77 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["cleanup-editor integration: unreferenced control blocks without a doc loaded looks like the latest snapshot"] = +`
    +
    +

    + [cleanup.unreferencedDataTypes.title] + (0) + + + + +

    + + + + + + + + + + +
    +
    + + + + + + +
    +
    + + +`; +/* end snapshot cleanup-editor integration: unreferenced control blocks without a doc loaded looks like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/editors/cleanup/control-blocks-container.test.ts b/packages/open-scd/test/integration/editors/cleanup/control-blocks-container.test.ts new file mode 100644 index 0000000000..fde24a1008 --- /dev/null +++ b/packages/open-scd/test/integration/editors/cleanup/control-blocks-container.test.ts @@ -0,0 +1,267 @@ +'use strict'; +import { html, fixture, expect } from '@open-wc/testing'; + +import { Editing } from '../../../../src/Editing.js'; +import { Wizarding } from '../../../../src/Wizarding.js'; + +import { CleanupControlBlocks } from '../../../../src/editors/cleanup/control-blocks-container.js'; +import { cleanSCLItems } from '../../../../src/editors/cleanup/foundation.js'; + +describe('cleanup-editor integration: unreferenced control blocks', () => { + customElements.define( + 'cleanup-plugin-controlblocks', + Wizarding(Editing(CleanupControlBlocks)) + ); + let element: CleanupControlBlocks; + + describe('without a doc loaded', () => { + beforeEach(async () => { + element = await fixture( + html`` + ); + await element.updateComplete; + }); + + it('looks like the latest snapshot', async () => { + await expect(element).shadowDom.to.equalSnapshot(); + }); + }); + + describe('with a test file loaded', () => { + let doc: Document; + beforeEach(async () => { + doc = await fetch('/test/testfiles/cleanup.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + element = await fixture( + html`` + ); + await element.updateComplete; + }); + + it('correctly removes all LogControl entries from the SCL', async () => { + await element.cleanupGSEControlFilter.click(); + await element.cleanupSampledValueControlFilter.click(); + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.cleanupList')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + await element.cleanupList?.layout(); + + await element.cleanButton.click(); + + // the correct number of LogControls should remain + expect(element.doc.querySelectorAll('LogControl')).to.have.length(1); + expect( + element.doc.querySelectorAll('LogControl[name="LogNP"]') + ).to.have.length(0); + }); + + it('correctly removes all GSEControl entries and Address entries from the SCL', async () => { + await element.cleanupLogControlFilter.click(); + await element.cleanupSampledValueControlFilter.click(); + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.cleanupList')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + await element.cleanupList?.layout(); + + await element.cleanButton.click(); + + // the correct number of GSEControl should remain + expect(element.doc.querySelectorAll('GSEControl')).to.have.lengthOf(2); + expect( + element.doc.querySelectorAll( + 'GSEControl[name="GCB_NP"], GSEControl[name="GCB2_NP"]' + ) + ).to.have.lengthOf(0); + // Addresses removed + expect( + element.doc.querySelectorAll('GSE[cbName="GCB_NP"]') + ).to.have.lengthOf(0); + expect(element.doc.querySelectorAll('GSE')).to.have.lengthOf(1); + }); + + it('correctly removes all SampledValueControl and Address entries from the SCL', async () => { + await element.cleanupLogControlFilter.click(); + await element.cleanupGSEControlFilter.click(); + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.cleanupList')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + await element.cleanupList?.layout(); + + await element.cleanButton.click(); + + // the correct number of SampledValueControls should remain + expect( + element.doc.querySelectorAll('SampledValueControl') + ).to.have.lengthOf(1); + expect( + element.doc.querySelectorAll('SampledValueControl[name="MSVCB01_A"]') + ).to.have.lengthOf(0); + // Addresses removed + expect( + element.doc.querySelectorAll('SMV[cbName="MSVCB01_A"]') + ).to.have.lengthOf(0); + expect(element.doc.querySelectorAll('SMV')).to.have.lengthOf(1); + }); + + describe('if the Address checkbox is unchecked', () => { + beforeEach(async () => { + element.cleanupAddressCheckbox!.checked = false; + await element.cleanupAddressCheckbox!.requestUpdate(); + }); + + it('correctly removes all SampledValueControl but not Address entries from the SCL', async () => { + await element.cleanupLogControlFilter.click(); + await element.cleanupGSEControlFilter.click(); + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.cleanupList')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + await element.cleanupList?.layout(); + await element.cleanButton.click(); + + // the correct number of SampledValueControls should remain + expect( + element.doc.querySelectorAll('SampledValueControl') + ).to.have.lengthOf(1); + expect( + element.doc.querySelectorAll('SampledValueControl[name="MSVCB01_A"]') + ).to.have.lengthOf(0); + // Addresses unchanged + expect( + element.doc.querySelectorAll('SMV[cbName="MSVCB01_A"]') + ).to.have.lengthOf(1); + expect(element.doc.querySelectorAll('SMV')).to.have.lengthOf(2); + }); + + it('correctly removes all GSEControl entries but not Address entries from the SCL', async () => { + await element.cleanupLogControlFilter.click(); + await element.cleanupSampledValueControlFilter.click(); + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.cleanupList')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + await element.cleanupList?.layout(); + + element.cleanupAddressCheckbox!.checked = false; + await element.cleanupAddressCheckbox!.requestUpdate(); + + await element.cleanButton.click(); + + // the correct number of GSEControl should remain + expect(element.doc.querySelectorAll('GSEControl')).to.have.lengthOf(2); + expect( + doc.querySelectorAll( + 'GSEControl[name="GCB_NP"], GSEControl[name="GCB2_NP"]' + ) + ).to.have.lengthOf(0); + // Addresses unchanged + expect( + element.doc.querySelectorAll('GSE[cbName="GCB_NP"]') + ).to.have.lengthOf(1); + expect(element.doc.querySelectorAll('GSE')).to.have.lengthOf(2); + }); + }); + + describe('if the ReportControl filter is enabled', async () => { + beforeEach(async () => { + await element.cleanupReportControlFilter.click(); + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.cleanupList')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + element.cleanupList?.layout(); + }); + + it('creates 5 delete actions (ReportControl, GSEControl x 2, LogControl, SampledValueControl)', () => { + const cleanItems = Array.from( + (>element.cleanupList!.index).values() + ).map(index => element.unreferencedControls[index]); + const deleteActions = cleanSCLItems(cleanItems); + expect(deleteActions.length).to.equal(5); + }); + }); + + describe('if the LogControl filter is disabled', async () => { + beforeEach(async () => { + await element.cleanupLogControlFilter.click(); + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.cleanupList')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + element.cleanupList?.layout(); + }); + + it('creates 3 Delete Actions (GSEControl x 2, SampledValueControl)', async () => { + const cleanItems = Array.from( + (>element.cleanupList!.index).values() + ).map(index => element.unreferencedControls[index]); + const deleteActions = cleanSCLItems(cleanItems); + expect(deleteActions.length).to.equal(3); + }); + }); + + describe('if the GSEControl filter is disabled', async () => { + beforeEach(async () => { + await element.cleanupGSEControlFilter.click(); + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.cleanupList')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + element.cleanupList?.layout(); + }); + + it('creates 2 Delete Actions (LogControl, SampledValueControl)', async () => { + const cleanItems = Array.from( + (>element.cleanupList!.index).values() + ).map(index => element.unreferencedControls[index]); + const deleteActions = cleanSCLItems(cleanItems); + expect(deleteActions.length).to.equal(2); + }); + }); + + describe('if the SampledValueControl filter is disabled', async () => { + beforeEach(async () => { + await element.cleanupSampledValueControlFilter.click(); + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.cleanupList')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + element.cleanupList?.layout(); + }); + + it('creates 3 Delete Actions (GSEControl x 2, LogControl)', async () => { + const cleanItems = Array.from( + (>element.cleanupList!.index).values() + ).map(index => element.unreferencedControls[index]); + const deleteActions = cleanSCLItems(cleanItems); + expect(deleteActions.length).to.equal(3); + }); + }); + }); +}); diff --git a/packages/open-scd/test/integration/editors/cleanup/datasets-container.test.ts b/packages/open-scd/test/integration/editors/cleanup/datasets-container.test.ts new file mode 100644 index 0000000000..0dde819f9e --- /dev/null +++ b/packages/open-scd/test/integration/editors/cleanup/datasets-container.test.ts @@ -0,0 +1,86 @@ +'use strict'; +import { html, fixture, expect } from '@open-wc/testing'; + +import { Editing } from '../../../../src/Editing.js'; +import { Wizarding } from '../../../../src/Wizarding.js'; + +import { CleanupDatasets } from '../../../../src/editors/cleanup/datasets-container.js'; +import { cleanSCLItems } from '../../../../src/editors/cleanup/foundation.js'; + +describe('cleanup-editor integration: dataset removal', () => { + customElements.define( + 'cleanup-plugin-datasets', + Wizarding(Editing(CleanupDatasets)) + ); + let element: CleanupDatasets; + + describe('without a doc loaded', () => { + beforeEach(async () => { + const doc = null; + element = await fixture( + html`` + ); + await element.updateComplete; + }); + + it('looks like the latest snapshot', async () => { + await expect(element).shadowDom.to.equalSnapshot(); + }); + }); + + describe('With a test file loaded', () => { + let doc: Document; + beforeEach(async () => { + doc = await fetch('/test/testfiles/cleanup.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + element = await fixture( + html`` + ); + await element.updateComplete; + }); + + it('looks like the latest snapshot', async () => { + await expect(element).shadowDom.to.equalSnapshot(); + }); + + it('creates two delete actions', async () => { + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.dataSetList')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + element.dataSetList?.layout(); + const cleanItems = Array.from( + (>element.dataSetList!.index).values() + ).map(index => element.unreferencedDataSets[index]); + const deleteActions = cleanSCLItems(cleanItems); + expect(deleteActions.length).to.equal(2); + }); + + it('correctly removes the datasets from the SCL file', async () => { + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.dataSetList')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + element.dataSetList?.layout(); + await element.cleanupButton!.click(); + // the correct number of DataSets should remain + const remainingDataSetCountCheck = + element.doc.querySelectorAll( + ':root > IED > AccessPoint > Server > LDevice > LN0 > DataSet, :root > IED > AccessPoint > Server > LDevice > LN > DataSet' + ).length === 6; + // those DataSets selected had best be gone + const datasetsCorrectlyRemoved = + element.doc.querySelectorAll( + 'DataSet[name="GooseDataSet2"], DataSet[name="PhsMeas2"]' + ).length === 0; + expect(remainingDataSetCountCheck && datasetsCorrectlyRemoved).to.equal( + true + ); + }); + }); +}); diff --git a/packages/open-scd/test/integration/editors/cleanup/datatypes-container.test.ts b/packages/open-scd/test/integration/editors/cleanup/datatypes-container.test.ts new file mode 100644 index 0000000000..7964527239 --- /dev/null +++ b/packages/open-scd/test/integration/editors/cleanup/datatypes-container.test.ts @@ -0,0 +1,264 @@ +'use strict'; +import { html, fixture, expect } from '@open-wc/testing'; + +import { Editing } from '../../../../src/Editing.js'; +import { Wizarding } from '../../../../src/Wizarding.js'; + +import { CleanupDataTypes } from '../../../../src/editors/cleanup/datatypes-container.js'; +import { cleanSCLItems } from '../../../../src/editors/cleanup/foundation.js'; + +describe('cleanup-editor integration: unreferenced control blocks', () => { + customElements.define( + 'cleanup-plugin-data-types', + Wizarding(Editing(CleanupDataTypes)) + ); + let element: CleanupDataTypes; + + describe('without a doc loaded', () => { + beforeEach(async () => { + element = await fixture( + html`` + ); + await element.updateComplete; + }); + + it('looks like the latest snapshot', async () => { + await expect(element).shadowDom.to.equalSnapshot(); + }); + }); + + describe('with a test file loaded', () => { + let doc: Document; + beforeEach(async () => { + doc = await fetch('/test/testfiles/cleanup.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + element = await fixture( + html`` + ); + await element.updateComplete; + }); + + it('correctly removes a LNodeType entry from the SCL', async () => { + await element.cleanupDOTypeFilter.click(); + await element.cleanupDATypeFilter.click(); + await element.cleanupEnumTypeFilter.click(); + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.cleanup-list')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + await element.cleanupList?.layout(); + + await element.cleanButton.click(); + + // the correct number of LNodeTypes should remain + expect(element.doc.querySelectorAll('LNodeType')).to.have.length(12); + expect( + element.doc.querySelectorAll('LNodeType[id="NotUsedTVTR"]') + ).to.have.length(0); + }); + + it('correctly removes DOTypes and SDOs from the SCL', async () => { + await element.cleanupLNodeTypeFilter.click(); + await element.cleanupDATypeFilter.click(); + await element.cleanupEnumTypeFilter.click(); + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.cleanup-list')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + await element.cleanupList?.layout(); + + await element.cleanButton.click(); + + // the correct number of DOTypes should remain + expect(element.doc.querySelectorAll('DOType')).to.have.lengthOf(32); + expect( + element.doc.querySelectorAll( + 'DOType[id="NotUsedDummy.SPS"], DOType[name="WYE_2_3"], DOType[id="CMV_1"]' + ) + ).to.have.lengthOf(0); + }); + + it('correctly removes DATypes and those referenced via BDAs from the SCL', async () => { + await element.cleanupLNodeTypeFilter.click(); + await element.cleanupDOTypeFilter.click(); + await element.cleanupEnumTypeFilter.click(); + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.cleanup-list')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + await element.cleanupList?.layout(); + + await element.cleanButton.click(); + + expect(element.doc.querySelectorAll('DAType')).to.have.lengthOf(15); + expect( + element.doc.querySelectorAll( + 'DAType[id="NotUsedDummy.LPHD1.Sim.Cancel"], DAType[id="OnlySubUsedVector_0"], DAType[id="AnalogValue_0"]' + ) + ).to.have.lengthOf(0); + }); + + it('correctly removes EnumTypes', async () => { + await element.cleanupLNodeTypeFilter.click(); + await element.cleanupDOTypeFilter.click(); + await element.cleanupDATypeFilter.click(); + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.cleanup-list')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + await element.cleanupList?.layout(); + + await element.cleanButton.click(); + + expect(element.doc.querySelectorAll('EnumType')).to.have.lengthOf(11); + expect( + element.doc.querySelectorAll( + 'EnumType[id="NotUsedDir"]' + ) + ).to.have.lengthOf(0); + }); + + + describe('if the Remove subtypes checkbox is unchecked', () => { + beforeEach(async () => { + element.cleanSubTypesCheckbox!.checked = false; + await element.cleanSubTypesCheckbox!.requestUpdate(); + }); + + it('correctly removes two DOTypes and not those referenced via an SDO from the SCL', async () => { + await element.cleanupLNodeTypeFilter.click(); + await element.cleanupDATypeFilter.click(); + await element.cleanupEnumTypeFilter.click(); + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.cleanup-list')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + await element.cleanupList?.layout(); + + await element.cleanButton.click(); + + // the correct number of DOTypes should remain + expect(element.doc.querySelectorAll('DOType')).to.have.lengthOf(33); + expect( + element.doc.querySelectorAll( + 'DOType[id="NotUsedDummy.SPS"], DOType[id="WYE_2_3"], DOType[id="Dummy.LLN0.Health.Unused]' + ) + ).to.have.lengthOf(0); + expect(element.doc.querySelectorAll('DOType[id="CMV_1"]')).to.have.lengthOf(1); + }); + + it('correctly removes DATypes and _not_ those referenced via a BDA from the SCL', async () => { + await element.cleanupLNodeTypeFilter.click(); + await element.cleanupDOTypeFilter.click(); + await element.cleanupEnumTypeFilter.click(); + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.cleanup-list')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + await element.cleanupList?.layout(); + + await element.cleanButton.click(); + + // the correct number of DATypes should remain + expect(element.doc.querySelectorAll('DAType')).to.have.lengthOf(16); + expect( + element.doc.querySelectorAll( + 'DAType[id="NotUsedDummy.LPHD1.Sim.Cancel"], DAType[id="OnlySubUsedVector_0"]' + ) + ).to.have.lengthOf(0); + expect( + element.doc.querySelectorAll('DAType[id="AnalogValue_0"]') + ).to.have.lengthOf(1); + }); + }); + + describe('if the LN filter is disabled', async () => { + beforeEach(async () => { + await element.cleanupLNodeTypeFilter.click(); + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.cleanup-list')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + await element.cleanupList?.layout(); + }); + + it('creates the correct number of Delete actions', () => { + const deleteActions = cleanSCLItems(element.getCleanItems()); + expect(deleteActions.length).to.equal(14); + }); + }); + + describe('if the DO filter is disabled', async () => { + beforeEach(async () => { + await element.cleanupDOTypeFilter.click(); + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.cleanup-list')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + element.cleanupList?.layout(); + }); + + it('creates the correct number of Delete actions (LNx1, DAx3, ENx1)', () => { + const deleteActions = cleanSCLItems(element.getCleanItems()); + expect(deleteActions.length).to.equal(26); + }); + }); + + describe('if the DA filter is disabled', async () => { + beforeEach(async () => { + await element.cleanupDATypeFilter.click(); + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.cleanup-list')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + element.cleanupList?.layout(); + }); + + it('creates the correct number of Delete Actions', async () => { + const deleteActions = cleanSCLItems(element.getCleanItems()); + expect(deleteActions.length).to.equal(29); + }); + }); + + describe('if the EN filter is disabled', async () => { + beforeEach(async () => { + await element.cleanupEnumTypeFilter.click(); + // select all items and update list + const checkbox = element + .shadowRoot!.querySelector('.cleanup-list')! + .shadowRoot!.querySelector('mwc-formfield')! + .querySelector('mwc-checkbox')!; + await checkbox.click(); + element.cleanupList?.layout(); + }); + + it('creates the correct number of Delete Actions', async () => { + const deleteActions = cleanSCLItems(element.getCleanItems()); + expect(deleteActions.length).to.equal(33); + }); + }); + }); +}); diff --git a/packages/open-scd/test/integration/editors/communication/Communication.test.ts b/packages/open-scd/test/integration/editors/communication/Communication.test.ts new file mode 100644 index 0000000000..f3288693fb --- /dev/null +++ b/packages/open-scd/test/integration/editors/communication/Communication.test.ts @@ -0,0 +1,105 @@ +import { html, fixture, expect } from '@open-wc/testing'; + +import '../../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../../mock-wizard-editor.js'; + +import Communication from '../../../../src/editors/Communication.js'; +import { Dialog } from '@material/mwc-dialog'; +import { WizardTextField } from '../../../../src/wizard-textfield.js'; + +describe('Communication Plugin', () => { + customElements.define( + 'communication-plugin', + Communication + ); + let element: Communication; + beforeEach(async () => { + element = await fixture( + html`` + ); + }); + + describe('without a doc loaded', () => { + it('looks like the latest snapshot', async () => { + await expect(element).shadowDom.to.equalSnapshot(); + }); + }); + + describe('with a doc loaded including communication section', () => { + let doc: XMLDocument; + let element: Communication; + beforeEach(async () => { + doc = await fetch('/test/testfiles/valid2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + element = await fixture( + html`` + ); + }); + it('constains a subnetwork-editor rendering the communication section', () => { + expect(element.shadowRoot?.querySelector('subnetwork-editor')).to.exist; + }); + }); + + describe('with a doc loaded missing a communication section', () => { + let doc: XMLDocument; + let parent: MockWizardEditor; + let fab: HTMLElement; + let element: Communication; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/missingCommunication.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + element = await fixture( + html`` + ); + + parent = ( + await fixture( + html`${element}/mock-wizard-editor>` + ) + ); + await element.updateComplete; + fab = ( + parent + ?.querySelector('communication-plugin') + ?.shadowRoot?.querySelector('mwc-fab') + ); + }); + it('has a mwc-fab', () => { + expect(element.shadowRoot?.querySelector('mwc-fab')).to.exist; + }); + it('that opens a add subnetwork wizard on mwc-fab click', async () => { + expect(parent.wizardUI.dialogs.length).to.equal(0); + fab.click(); + await parent.updateComplete; + expect(parent.wizardUI.dialogs.length).to.equal(1); + }); + + it('Should create a Communication Element', async () => { + expect(parent.wizardUI.dialogs.length).to.equal(0); + expect(element.doc.querySelector('Communication')).is.null; + + await fab.click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + await parent.updateComplete; + + const dialog: Dialog = parent.wizardUI.dialog!; + expect(dialog).to.not.be.undefined; + + const nameInput: WizardTextField = dialog.querySelector('wizard-textfield[label="name"]')!; + nameInput.value = 'Test'; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + const saveButton: HTMLElement = dialog.querySelector('mwc-button[slot="primaryAction"]')!; + await saveButton.click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + expect(element.doc.querySelector('Communication')).not.is.null; + expect(element.doc.querySelector('Communication > SubNetwork[name="Test"]')).to.exist; + }); + }); +}); diff --git a/packages/open-scd/test/integration/editors/communication/__snapshots__/Communication.test.snap.js b/packages/open-scd/test/integration/editors/communication/__snapshots__/Communication.test.snap.js new file mode 100644 index 0000000000..f748c6ad15 --- /dev/null +++ b/packages/open-scd/test/integration/editors/communication/__snapshots__/Communication.test.snap.js @@ -0,0 +1,18 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["Communication Plugin without a doc loaded looks like the latest snapshot"] = +`

    + + [communication.missing] + + + +

    +`; +/* end snapshot Communication Plugin without a doc loaded looks like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/editors/communication/connectedap-editor-wizarding-editing.test.ts b/packages/open-scd/test/integration/editors/communication/connectedap-editor-wizarding-editing.test.ts new file mode 100644 index 0000000000..6602e8bc40 --- /dev/null +++ b/packages/open-scd/test/integration/editors/communication/connectedap-editor-wizarding-editing.test.ts @@ -0,0 +1,120 @@ +import { fixture, html, expect } from '@open-wc/testing'; + +import '../../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../../mock-wizard-editor.js'; + +import '../../../../src/editors/communication/connectedap-editor.js'; +import { ConnectedAPEditor } from '../../../../src/editors/communication/connectedap-editor.js'; +import { WizardTextField } from '../../../../src/wizard-textfield.js'; + +describe('connectedap-editor wizarding editing integration', () => { + describe('edit wizard', () => { + let doc: XMLDocument; + let parent: MockWizardEditor; + let element: ConnectedAPEditor | null; + let secondaryAction: HTMLElement; + let primaryAction: HTMLElement; + let ipField: WizardTextField; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/valid2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + parent = ( + await fixture( + html` ConnectedAP' + )} + > + >` + ) + ); + element = parent.querySelector('connectedap-editor'); + await (( + element?.shadowRoot?.querySelector('mwc-fab[icon="edit"]') + )).click(); + await parent.updateComplete; + ipField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="IP"]') + ); + secondaryAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="secondaryAction"]' + ) + ); + primaryAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + }); + + it('closes on secondary action', async () => { + expect(parent.wizardUI.dialog).to.exist; + secondaryAction.click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + expect(parent.wizardUI.dialog).to.not.exist; + }); + + it('changes name attribute on primary action', async () => { + expect( + doc.querySelector('ConnectedAP > Address > P[type="IP"]')?.textContent + ).to.equal('192.168.210.111'); + ipField.value = '192.168.210.116'; + await parent.requestUpdate(); + primaryAction.click(); + await parent.requestUpdate(); + expect( + doc.querySelector('ConnectedAP > Address > P[type="IP"]')?.textContent + ).to.equal('192.168.210.116'); + }); + + it('does not change Address if no changes have been made', async () => { + const reference = doc.querySelector('ConnectedAP'); + primaryAction.click(); + expect(doc.querySelector('ConnectedAP')?.isEqualNode(reference)).to.be + .true; + }); + }); + + describe('remove action', () => { + let doc: XMLDocument; + let parent: MockWizardEditor; + let element: ConnectedAPEditor | null; + let deleteButton: HTMLElement; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/valid2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + parent = ( + await fixture( + html` ConnectedAP' + )} + >` + ) + ); + element = parent.querySelector('connectedap-editor'); + await parent.updateComplete; + deleteButton = ( + element?.shadowRoot?.querySelector('mwc-fab[icon="delete"]') + ); + }); + + it('removes ConnectedAP on delete button click', async () => { + expect(doc.querySelector('SubNetwork[name="StationBus"] > ConnectedAP')) + .to.exist; + deleteButton.click(); + await parent.updateComplete; + expect(doc.querySelector('SubNetwork[name="StationBus"] > ConnectedAP')) + .to.not.exist; + }); + }); +}); diff --git a/packages/open-scd/test/integration/editors/communication/gse-editor-wizarding-editing.test.ts b/packages/open-scd/test/integration/editors/communication/gse-editor-wizarding-editing.test.ts new file mode 100644 index 0000000000..0c82407409 --- /dev/null +++ b/packages/open-scd/test/integration/editors/communication/gse-editor-wizarding-editing.test.ts @@ -0,0 +1,125 @@ +import { fixture, html, expect } from '@open-wc/testing'; + +import '../../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../../mock-wizard-editor.js'; + +import '../../../../src/editors/communication/gse-editor.js'; +import { GseEditor } from '../../../../src/editors/communication/gse-editor.js'; +import { WizardTextField } from '../../../../src/wizard-textfield.js'; + +describe('gse-editor wizarding editing integration', () => { + describe('edit wizard', () => { + let doc: XMLDocument; + let parent: MockWizardEditor; + let element: GseEditor | null; + let secondaryAction: HTMLElement; + let primaryAction: HTMLElement; + let macAddressField: WizardTextField; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/valid2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + parent = ( + await fixture( + html` GSE')} + > + >` + ) + ); + element = parent.querySelector('gse-editor'); + await (( + element?.shadowRoot?.querySelector('mwc-fab[icon="edit"]') + )).click(); + await parent.updateComplete; + + macAddressField = ( + parent.wizardUI.dialog?.querySelector( + 'wizard-textfield[label="MAC-Address"]' + ) + ); + secondaryAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="secondaryAction"]' + ) + ); + primaryAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + }); + + it('closes on secondary action', async () => { + expect(parent.wizardUI.dialog).to.exist; + secondaryAction.click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + expect(parent.wizardUI.dialog).to.not.exist; + }); + + it('changes MAC address attribute on primary action', async () => { + expect( + doc.querySelector( + 'ConnectedAP[iedName="IED1"] > GSE > Address > P[type="MAC-Address"]' + )?.textContent + ).to.equal('01-0C-CD-01-00-10'); + macAddressField.value = '01-0C-CD-01-0F-FF'; + await parent.requestUpdate(); + primaryAction.click(); + await parent.requestUpdate(); + expect( + doc.querySelector( + 'ConnectedAP[iedName="IED1"] > GSE > Address > P[type="MAC-Address"]' + )?.textContent + ).to.equal('01-0C-CD-01-0F-FF'); + }); + + it('does not change Address if no changes have been made', async () => { + const reference = doc.querySelector('ConnectedAP[iedName="IED1"] > GSE'); + primaryAction.click(); + expect( + doc + .querySelector('ConnectedAP[iedName="IED1"] > GSE') + ?.isEqualNode(reference) + ).to.be.true; + }); + }); + + describe('remove action', () => { + let doc: XMLDocument; + let parent: MockWizardEditor; + let element: GseEditor | null; + let deleteButton: HTMLElement; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/valid2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + parent = ( + await fixture( + html` GSE')} + >` + ) + ); + element = parent.querySelector('gse-editor'); + await parent.updateComplete; + deleteButton = ( + element?.shadowRoot?.querySelector('mwc-fab[icon="delete"]') + ); + }); + + it('removes GSE on delete button click', async () => { + expect(doc.querySelector('ConnectedAP[iedName="IED1"] > GSE')).to.exist; + deleteButton.click(); + await parent.updateComplete; + expect(doc.querySelector('ConnectedAP[iedName="IED1"] > GSE')).to.not + .exist; + }); + }); +}); diff --git a/packages/open-scd/test/integration/editors/communication/smv-editor-wizarding-editing.test.ts b/packages/open-scd/test/integration/editors/communication/smv-editor-wizarding-editing.test.ts new file mode 100644 index 0000000000..c082344d93 --- /dev/null +++ b/packages/open-scd/test/integration/editors/communication/smv-editor-wizarding-editing.test.ts @@ -0,0 +1,125 @@ +import { fixture, html, expect } from '@open-wc/testing'; + +import '../../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../../mock-wizard-editor.js'; + +import '../../../../src/editors/communication/smv-editor.js'; +import { SmvEditor } from '../../../../src/editors/communication/smv-editor.js'; +import { WizardTextField } from '../../../../src/wizard-textfield.js'; + +describe('smv-editor wizarding editing integration', () => { + describe('edit wizard', () => { + let doc: XMLDocument; + let parent: MockWizardEditor; + let element: SmvEditor | null; + let secondaryAction: HTMLElement; + let primaryAction: HTMLElement; + let macAddressField: WizardTextField; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/valid2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + parent = ( + await fixture( + html` SMV')} + > + >` + ) + ); + element = parent.querySelector('smv-editor'); + await (( + element?.shadowRoot?.querySelector('mwc-fab[icon="edit"]') + )).click(); + await parent.updateComplete; + + macAddressField = ( + parent.wizardUI.dialog?.querySelector( + 'wizard-textfield[label="MAC-Address"]' + ) + ); + secondaryAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="secondaryAction"]' + ) + ); + primaryAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + }); + + it('closes on secondary action', async () => { + expect(parent.wizardUI.dialog).to.exist; + secondaryAction.click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + expect(parent.wizardUI.dialog).to.not.exist; + }); + + it('changes MAC address attribute on primary action', async () => { + expect( + doc.querySelector( + 'ConnectedAP[iedName="IED3"] > SMV > Address > P[type="MAC-Address"]' + )?.textContent + ).to.equal('01-0C-CD-04-00-20'); + macAddressField.value = '01-0C-CD-04-0F-FF'; + await parent.requestUpdate(); + primaryAction.click(); + await parent.requestUpdate(); + expect( + doc.querySelector( + 'ConnectedAP[iedName="IED3"] > SMV > Address > P[type="MAC-Address"]' + )?.textContent + ).to.equal('01-0C-CD-04-0F-FF'); + }); + + it('does not change Address if no changes have been made', async () => { + const reference = doc.querySelector('ConnectedAP[iedName="IED3"] > SMV'); + primaryAction.click(); + expect( + doc + .querySelector('ConnectedAP[iedName="IED3"] > SMV') + ?.isEqualNode(reference) + ).to.be.true; + }); + }); + + describe('remove action', () => { + let doc: XMLDocument; + let parent: MockWizardEditor; + let element: SmvEditor | null; + let deleteButton: HTMLElement; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/valid2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + parent = ( + await fixture( + html` SMV')} + >` + ) + ); + element = parent.querySelector('smv-editor'); + await parent.updateComplete; + deleteButton = ( + element?.shadowRoot?.querySelector('mwc-fab[icon="delete"]') + ); + }); + + it('removes SMV on delete button click', async () => { + expect(doc.querySelector('ConnectedAP[iedName="IED3"] > SMV')).to.exist; + deleteButton.click(); + await parent.updateComplete; + expect(doc.querySelector('ConnectedAP[iedName="IED3"] > SMV')).to.not + .exist; + }); + }); +}); diff --git a/packages/open-scd/test/integration/editors/communication/subnetwork-editor-wizarding-editing.test.ts b/packages/open-scd/test/integration/editors/communication/subnetwork-editor-wizarding-editing.test.ts new file mode 100644 index 0000000000..cbe111534e --- /dev/null +++ b/packages/open-scd/test/integration/editors/communication/subnetwork-editor-wizarding-editing.test.ts @@ -0,0 +1,426 @@ +import { fixture, html, expect } from '@open-wc/testing'; + +import '../../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../../mock-wizard-editor.js'; + +import { ListItemBase } from '@material/mwc-list/mwc-list-item-base'; + +import '../../../../src/editors/communication/subnetwork-editor.js'; +import { SubNetworkEditor } from '../../../../src/editors/communication/subnetwork-editor.js'; +import { WizardTextField } from '../../../../src/wizard-textfield.js'; + +describe('subnetwork-editor wizarding editing integration', () => { + describe('edit wizard', () => { + let doc: XMLDocument; + let parent: MockWizardEditor; + let element: SubNetworkEditor | null; + let nameField: WizardTextField; + let descField: WizardTextField; + let typeField: WizardTextField; + let bitRateField: WizardTextField; + let primaryAction: HTMLElement; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/valid2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + parent = ( + await fixture( + html` + ` + ) + ); + element = parent.querySelector('subnetwork-editor'); + await (( + element?.shadowRoot?.querySelector('mwc-icon-button[icon="edit"]') + )).click(); + await parent.updateComplete; + nameField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="name"]') + ); + descField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="desc"]') + ); + typeField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="type"]') + ); + bitRateField = ( + parent.wizardUI.dialog?.querySelector( + 'wizard-textfield[label="BitRate"]' + ) + ); + primaryAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + }); + + it('closes on secondary action', async () => { + await (( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="secondaryAction"]' + ) + )).click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + expect(parent.wizardUI.dialog).to.not.exist; + }); + + it('does not change name attribute if not unique within parent element', async () => { + const oldName = nameField.value; + nameField.value = 'ProcessBus'; + primaryAction.click(); + await parent.updateComplete; + expect(doc.querySelector('SubNetwork')?.getAttribute('name')).to.equal( + oldName + ); + }); + + it('changes name attribute on primary action', async () => { + nameField.value = 'newSubNetwork'; + primaryAction.click(); + await parent.updateComplete; + expect(doc.querySelector('SubNetwork')?.getAttribute('name')).to.equal( + 'newSubNetwork' + ); + }); + + it('changes desc attribute on primary action', async () => { + descField.value = 'newDesc'; + primaryAction.click(); + await parent.updateComplete; + expect(doc.querySelector('SubNetwork')?.getAttribute('desc')).to.equal( + 'newDesc' + ); + }); + + it('deletes desc attribute if wizard-textfield is deactivated', async () => { + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + descField.nullSwitch!.click(); + await parent.updateComplete; + primaryAction.click(); + await parent.updateComplete; + expect(doc.querySelector('SubNetwork')?.getAttribute('desc')).to.be.null; + }); + + it('changes type attribute on primary action', async () => { + typeField.value = 'newType'; + primaryAction.click(); + await parent.updateComplete; + expect(doc.querySelector('SubNetwork')?.getAttribute('type')).to.equal( + 'newType' + ); + }); + + it('deletes type attribute if wizard-textfield is deactivated', async () => { + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + typeField.nullSwitch!.click(); + await parent.updateComplete; + primaryAction.click(); + await parent.updateComplete; + expect(doc.querySelector('SubNetwork')?.getAttribute('type')).to.be.null; + }); + + it('changes BitRate value on primary action', async () => { + bitRateField.value = '20.0'; + primaryAction.click(); + await parent.updateComplete; + expect(doc.querySelector('BitRate')?.innerHTML).to.equal('20.0'); + }); + + it('changes BitRate multiplier on primary action', async () => { + bitRateField.multiplier = 'M'; + primaryAction.click(); + await parent.updateComplete; + expect(doc.querySelector('BitRate')?.getAttribute('multiplier')).to.equal( + 'M' + ); + expect(doc.querySelector('BitRate')?.getAttribute('unit')).to.equal( + 'b/s' + ); + }); + + it('deletes BitRate element if voltage wizard-textfield is deactivated', async () => { + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + bitRateField.nullSwitch!.click(); + await parent.updateComplete; + primaryAction.click(); + await parent.updateComplete; + expect(doc.querySelector('SubNetwork')?.querySelector('BitRate')).to.be + .null; + }); + }); + + describe('remove action', () => { + let doc: XMLDocument; + let parent: MockWizardEditor; + let element: SubNetworkEditor | null; + let deleteButton: HTMLElement; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/valid2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + parent = ( + await fixture( + html`` + ) + ); + element = parent.querySelector('subnetwork-editor'); + await parent.updateComplete; + + deleteButton = ( + element?.shadowRoot?.querySelector('mwc-icon-button[icon="delete"]') + ); + }); + + it('removes SubNetwork on clicking delete button', async () => { + expect(doc.querySelector('SubNetwork[name="StationBus"]')).to.exist; + deleteButton.click(); + await parent.updateComplete; + expect(doc.querySelector('SubNetwork[name="StationBus"]')).to.not.exist; + }); + }); + + describe('add ConnectedAP action', () => { + let doc: XMLDocument; + let parent: MockWizardEditor; + let element: SubNetworkEditor | null; + let newConnectedAPItem: HTMLElement; + let primaryAction: HTMLElement; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/valid2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + parent = ( + await fixture( + html`` + ) + ); + element = parent.querySelector('subnetwork-editor'); + }); + + it('adds ConnectedAP on primary action', async () => { + (( + element?.shadowRoot?.querySelector( + 'mwc-icon-button[icon="playlist_add"]' + ) + )).click(); + await parent.updateComplete; + await element?.updateComplete; + + newConnectedAPItem = ( + parent.wizardUI.dialog!.querySelector( + 'mwc-check-list-item:nth-child(1)' + ) + ); + + primaryAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + + expect( + doc.querySelector( + ':root > Communication > SubNetwork[name="StationBus"] > ConnectedAP[iedName="IED3"][apName="P2"]' + ) + ).to.not.exist; + + newConnectedAPItem.click(); + primaryAction.click(); + await parent.updateComplete; + + expect( + doc.querySelector( + ':root > Communication > SubNetwork[name="StationBus"] > ConnectedAP[iedName="IED3"][apName="P2"]' + ) + ).to.exist; + }); + + it('add ConnectedAP with GSE and generates correct addresses', async () => { + doc = await fetch('/test/testfiles/editors/MessageBindingGOOSE2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + parent = ( + await fixture( + html`` + ) + ); + element = parent.querySelector('subnetwork-editor'); + await parent.updateComplete; + await element?.updateComplete; + + (( + element?.shadowRoot?.querySelector( + 'mwc-icon-button[icon="playlist_add"]' + ) + )).click(); + await parent.updateComplete; + await element?.updateComplete; + + expect( + doc.querySelector( + ':root > Communication > SubNetwork[name="StationBus"] > ConnectedAP[iedName="IED4"][apName="P1"]' + ) + ).to.not.exist; + + newConnectedAPItem = ( + parent.wizardUI.dialog!.querySelector( + 'mwc-check-list-item:nth-child(2)' + ) + ); + + primaryAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + + newConnectedAPItem.click(); + primaryAction.click(); + await parent.updateComplete; + + const connectedAp = doc.querySelector( + ':root > Communication > SubNetwork[name="StationBus"] > ConnectedAP[iedName="IED4"][apName="P1"]' + ); + + expect(connectedAp).to.exist; + const gse1 = connectedAp!.querySelector('GSE[cbName="GCB2"]'); + const gse2 = connectedAp!.querySelector('GSE[cbName="GCB2"]'); + expect(gse1).to.exist; + expect(gse2).to.exist; + + expect(gse1?.getAttribute('ldInst')).to.equal('CircuitBreaker_CB1'); + + const address1 = gse1?.querySelector('Address'); + expect(address1).to.exist; + + const vlanPriority = address1?.querySelector('P[type="VLAN-PRIORITY"]'); + expect(vlanPriority).to.exist; + expect(vlanPriority?.textContent).to.equal('4'); + + const vlanId = address1?.querySelector('P[type="VLAN-ID"]'); + expect(vlanId).to.exist; + expect(vlanId?.textContent).to.equal('000'); + + const appId = address1?.querySelector('P[type="APPID"]'); + expect(appId).to.exist; + expect(appId?.textContent).to.equal('0001'); + + const mac = address1?.querySelector('P[type="MAC-Address"]'); + expect(mac).to.exist; + expect(mac?.textContent).to.equal('01-0C-CD-01-00-01'); + + const minTime = gse1?.querySelector('MinTime'); + expect(minTime).to.exist; + expect(minTime?.getAttribute('unit')).to.equal('s'); + expect(minTime?.getAttribute('multiplier')).to.equal('m'); + expect(minTime?.textContent).to.equal('10'); + + const maxTime = gse1?.querySelector('MaxTime'); + expect(maxTime).to.exist; + expect(maxTime?.getAttribute('unit')).to.equal('s'); + expect(maxTime?.getAttribute('multiplier')).to.equal('m'); + expect(maxTime?.textContent).to.equal('10000'); + }); + + it('add ConnectedAP with SMV and generates correct addresses', async () => { + doc = await fetch('/test/testfiles/editors/MessageBindingSMV2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + parent = ( + await fixture( + html`` + ) + ); + element = parent.querySelector('subnetwork-editor'); + await parent.updateComplete; + await element?.updateComplete; + + (( + element?.shadowRoot?.querySelector( + 'mwc-icon-button[icon="playlist_add"]' + ) + )).click(); + await parent.updateComplete; + await element?.updateComplete; + + expect( + doc.querySelector( + ':root > Communication > SubNetwork[name="StationBus"] > ConnectedAP[iedName="IED4"][apName="P1"]' + ) + ).to.not.exist; + + newConnectedAPItem = ( + parent.wizardUI.dialog!.querySelector( + 'mwc-check-list-item:nth-child(2)' + ) + ); + + primaryAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + + newConnectedAPItem.click(); + primaryAction.click(); + await parent.updateComplete; + + const connectedAp = doc.querySelector( + ':root > Communication > SubNetwork[name="StationBus"] > ConnectedAP[iedName="IED4"][apName="P1"]' + ); + + expect(connectedAp).to.exist; + const smv1 = connectedAp!.querySelector('SMV[cbName="MSVCB02"]'); + expect(smv1).to.exist; + + expect(smv1?.getAttribute('ldInst')).to.equal('CircuitBreaker_CB1'); + + const address1 = smv1?.querySelector('Address'); + expect(address1).to.exist; + + const vlanPriority = address1?.querySelector('P[type="VLAN-PRIORITY"]'); + expect(vlanPriority).to.exist; + expect(vlanPriority?.textContent).to.equal('4'); + + const vlanId = address1?.querySelector('P[type="VLAN-ID"]'); + expect(vlanId).to.exist; + expect(vlanId?.textContent).to.equal('000'); + + const appId = address1?.querySelector('P[type="APPID"]'); + expect(appId).to.exist; + expect(appId?.textContent).to.equal('4000'); + + const mac = address1?.querySelector('P[type="MAC-Address"]'); + expect(mac).to.exist; + expect(mac?.textContent).to.equal('01-0C-CD-04-00-00'); + }); + }); +}); diff --git a/packages/open-scd/test/integration/editors/communication/subnetwork-editor-wizarding.test.ts b/packages/open-scd/test/integration/editors/communication/subnetwork-editor-wizarding.test.ts new file mode 100644 index 0000000000..ce29be94fe --- /dev/null +++ b/packages/open-scd/test/integration/editors/communication/subnetwork-editor-wizarding.test.ts @@ -0,0 +1,116 @@ +import { fixture, html, expect } from '@open-wc/testing'; +import fc from 'fast-check'; + +import '../../../mock-wizard.js'; +import { MockWizard } from '../../../mock-wizard.js'; + +import '../../../../src/editors/communication/subnetwork-editor.js'; +import { regexString, regExp, inverseRegExp } from '../../../foundation.js'; + +describe('subnetwork-editor wizarding integration', () => { + describe('edit/add Subnetwork wizard', () => { + let doc: XMLDocument; + let parent: MockWizard; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/valid2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + parent = ( + await fixture( + html`` + ) + ); + + (( + parent + ?.querySelector('subnetwork-editor') + ?.shadowRoot?.querySelector('mwc-icon-button[icon="edit"]') + )).click(); + await parent.updateComplete; + }); + + describe('the first input element', () => { + it('edits the attribute name', async () => { + expect(parent.wizardUI.inputs[0].label).to.equal('name'); + }); + + it('edits only for valid inputs', async () => { + await fc.assert( + fc.asyncProperty(regexString(regExp.tName, 1), async name => { + parent.wizardUI.inputs[0].value = name; + await parent.updateComplete; + expect(parent.wizardUI.inputs[0].checkValidity()).to.be.true; + }) + ); + }); + }); + + describe('the second input element', () => { + it('edits the attribute desc', async () => { + expect(parent.wizardUI.inputs[1].label).to.equal('desc'); + }); + + it('edits only for valid inputs', async () => { + await fc.assert( + fc.asyncProperty(regexString(regExp.desc), async desc => { + parent.wizardUI.inputs[1].value = desc; + await parent.updateComplete; + expect(parent.wizardUI.inputs[1].checkValidity()).to.be.true; + }) + ); + }); + }); + + describe('the third input element', () => { + it('edits the attribute type', async () => { + expect(parent.wizardUI.inputs[2].label).to.equal('type'); + }); + + it('edits only for valid inputs', async () => { + await fc.assert( + fc.asyncProperty(regexString(regExp.desc, 1), async type => { + parent.wizardUI.inputs[2].value = type; + await parent.updateComplete; + expect(parent.wizardUI.inputs[2].checkValidity()).to.be.true; + }) + ); + }); + }); + + describe('the fourth input element', () => { + it('edits the attribute ', async () => { + expect(parent.wizardUI.inputs[3].label).to.equal('BitRate'); + }); + + it('edits only for valid inputs', async () => { + await fc.assert( + fc.asyncProperty(regexString(regExp.decimal), async BitRate => { + parent.wizardUI.inputs[3].value = BitRate; + await parent.updateComplete; + expect(parent.wizardUI.inputs[3].checkValidity()).to.be.true; + }) + ); + }); + + it('rejects edition for invalid inputs', async () => { + await fc.assert( + fc.asyncProperty( + regexString(inverseRegExp.decimal, 1), + async BitRate => { + parent.wizardUI.inputs[3].value = BitRate; + await parent.updateComplete; + expect(parent.wizardUI.inputs[3].checkValidity()).to.be.false; + } + ) + ); + }); + }); + }); +}); diff --git a/packages/open-scd/test/integration/editors/substation/__snapshots__/bay-editor-wizarding.test.snap.js b/packages/open-scd/test/integration/editors/substation/__snapshots__/bay-editor-wizarding.test.snap.js new file mode 100644 index 0000000000..ffb5a453a1 --- /dev/null +++ b/packages/open-scd/test/integration/editors/substation/__snapshots__/bay-editor-wizarding.test.snap.js @@ -0,0 +1,44 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["bay-editor wizarding integration looks like the latest snapshot"] = +` +
    + + + + +
    + + + + +
    +`; +/* end snapshot bay-editor wizarding integration looks like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/editors/substation/__snapshots__/conducting-equipment-editor-wizarding.test.snap.js b/packages/open-scd/test/integration/editors/substation/__snapshots__/conducting-equipment-editor-wizarding.test.snap.js new file mode 100644 index 0000000000..584b21b101 --- /dev/null +++ b/packages/open-scd/test/integration/editors/substation/__snapshots__/conducting-equipment-editor-wizarding.test.snap.js @@ -0,0 +1,60 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["conducting-equipment-editor wizarding integration looks like the latest snapshot"] = +` +
    + + + Circuit Breaker + + + + + + +
    + + + + +
    +`; +/* end snapshot conducting-equipment-editor wizarding integration looks like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/editors/substation/__snapshots__/substation-editor-wizarding.test.snap.js b/packages/open-scd/test/integration/editors/substation/__snapshots__/substation-editor-wizarding.test.snap.js new file mode 100644 index 0000000000..97da9fdd5d --- /dev/null +++ b/packages/open-scd/test/integration/editors/substation/__snapshots__/substation-editor-wizarding.test.snap.js @@ -0,0 +1,44 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["substation-editor wizarding integration looks like the latest snapshot"] = +` +
    + + + + +
    + + + + +
    +`; +/* end snapshot substation-editor wizarding integration looks like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/editors/substation/__snapshots__/voltage-level-editor-wizarding.test.snap.js b/packages/open-scd/test/integration/editors/substation/__snapshots__/voltage-level-editor-wizarding.test.snap.js new file mode 100644 index 0000000000..155b014d48 --- /dev/null +++ b/packages/open-scd/test/integration/editors/substation/__snapshots__/voltage-level-editor-wizarding.test.snap.js @@ -0,0 +1,74 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["voltage-level-editor wizarding integration looks like the latest snapshot"] = +` +
    + + + + + + + + + + +
    + + + + +
    +`; +/* end snapshot voltage-level-editor wizarding integration looks like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/editors/substation/bay-editor-wizarding-editing.test.ts b/packages/open-scd/test/integration/editors/substation/bay-editor-wizarding-editing.test.ts new file mode 100644 index 0000000000..d712300f58 --- /dev/null +++ b/packages/open-scd/test/integration/editors/substation/bay-editor-wizarding-editing.test.ts @@ -0,0 +1,481 @@ +import { fixture, html, expect } from '@open-wc/testing'; + +import '../../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../../mock-wizard-editor.js'; + +import '../../../../src/editors/substation/bay-editor.js'; +import { BayEditor } from '../../../../src/editors/substation/bay-editor.js'; +import { Select } from '@material/mwc-select'; +import { WizardTextField } from '../../../../src/wizard-textfield.js'; +import { MenuBase } from '@material/mwc-menu/mwc-menu-base.js'; +import { ListItemBase } from '@material/mwc-list/mwc-list-item-base.js'; + +const openAndCancelMenu: ( + parent: MockWizardEditor, + element: BayEditor +) => Promise = ( + parent: MockWizardEditor, + element: BayEditor +): Promise => + new Promise(async resolve => { + expect(parent.wizardUI.dialog).to.be.undefined; + + element?.shadowRoot + ?.querySelector("mwc-icon-button[icon='playlist_add']")! + .click(); + const lnodeMenuItem: ListItemBase = + element?.shadowRoot?.querySelector( + `mwc-list-item[value='LNode']` + )!; + lnodeMenuItem.click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + expect(parent.wizardUI.dialog).to.exist; + + const secondaryAction: HTMLElement = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="secondaryAction"]' + ) + ); + + secondaryAction.click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + expect(parent.wizardUI.dialog).to.be.undefined; + + return resolve(); + }); + +describe('bay-editor wizarding editing integration', () => { + describe('edit wizard', () => { + let doc: XMLDocument; + let parent: MockWizardEditor; + let element: BayEditor | null; + + let nameField: WizardTextField; + let descField: WizardTextField; + let secondaryAction: HTMLElement; + let primaryAction: HTMLElement; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/valid2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + parent = ( + await fixture( + html`` + ) + ); + element = parent.querySelector('bay-editor'); + await (( + element?.shadowRoot?.querySelector('mwc-icon-button[icon="edit"]') + )).click(); + await parent.updateComplete; + + nameField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="name"]') + ); + descField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="desc"]') + ); + secondaryAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="secondaryAction"]' + ) + ); + primaryAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + }); + it('closes on secondary action', async () => { + secondaryAction.click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + expect(parent.wizardUI.dialog).to.not.exist; + }); + it('does not change name attribute if not unique within parent element', async () => { + const oldName = nameField.value; + nameField.value = 'Bay2'; + primaryAction.click(); + await parent.updateComplete; + expect(doc.querySelector('Bay')?.getAttribute('name')).to.equal(oldName); + }); + it('changes name attribute on primary action', async () => { + parent.wizardUI.inputs[0].value = 'newName'; + primaryAction.click(); + await parent.updateComplete; + expect(doc.querySelector('Bay')?.getAttribute('name')).to.equal( + 'newName' + ); + }); + it('changes desc attribute on primary action', async () => { + descField.value = 'newDesc'; + primaryAction.click(); + await parent.updateComplete; + expect(doc.querySelector('Bay')?.getAttribute('desc')).to.equal( + 'newDesc' + ); + }); + it('deletes desc attribute if wizard-textfield is deactivated', async () => { + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + descField.nullSwitch!.click(); + await parent.updateComplete; + await primaryAction.click(); + await parent.updateComplete; + expect(doc.querySelector('Bay')?.getAttribute('desc')).to.be.null; + }); + }); + + describe('open add conducting equipment wizard', () => { + let doc: XMLDocument; + let parent: MockWizardEditor; + let element: BayEditor | null; + + let nameField: WizardTextField; + let typeSelect: Select; + let primaryAction: HTMLElement; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/valid2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + parent = ( + await fixture( + html`` + ) + ); + + element = parent.querySelector('bay-editor'); + + (( + element?.shadowRoot?.querySelector( + 'mwc-list-item[value="ConductingEquipment"]' + ) + )).click(); + await parent.updateComplete; + + nameField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="name"]') + ); + typeSelect = ( + parent.wizardUI.dialog?.querySelector('mwc-select[label="values"]') + ); + idField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="id"]') + ); + primayAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + }); + + it('looks like the latest snapshot', async () => { + await expect(parent.wizardUI.dialog).to.equalSnapshot({ + ignoreAttributes: [ + { + tags: ['wizard-textfield'], + attributes: ['pattern'], + }, + ], + }); + }); + + //work around, because the escapes get removed in snapshot + it('should have correct pattern', async () => { + const pattern = + '([:_A-Za-z]|[\u00C0-\u00D6]|[\u00D8-\u00F6]|[\u00F8-\u02FF]|[\u0370-\u037D]' + + '|[\u037F-\u1FFF]|[\u200C-\u200D]|[\u2070-\u218F]|[\u2C00-\u2FEF]' + + '|[\u3001-\uD7FF]|[\uF900-\uFDCF]|[\uFDF0-\uFFFD]|[.0-9\\-]|\u00B7|[\u0300-\u036F]|[\u203F-\u2040])+'; + expect( + parent.wizardUI.dialog!.querySelectorAll('wizard-textfield[pattern]')! + .length + ).to.equal(2); + + expect( + parent.wizardUI + .dialog!.querySelectorAll('wizard-textfield[pattern]')[0] + .getAttribute('pattern') + ).to.equal(pattern); + + expect( + parent.wizardUI + .dialog!.querySelectorAll('wizard-textfield[pattern]')[1] + .getAttribute('pattern') + ).to.equal(patterns.normalizedString); + }); + + it('allows to add empty DATypes to the project', async () => { + expect(doc.querySelector('DAType[id="myGeneralDAType"]')).to.not.exist; + idField.maybeValue = 'myGeneralDAType'; + await parent.requestUpdate(); + primayAction.click(); + await parent.updateComplete; + expect(doc.querySelector('DAType[id="myGeneralDAType"]')).to.exist; + }); + it('respects the sequence defined in the standard', async () => { + idField.maybeValue = 'myGeneralDAType'; + await parent.requestUpdate(); + primayAction.click(); + await parent.updateComplete; + const element = doc.querySelector('DAType[id="myGeneralDAType"]'); + expect(element?.nextElementSibling?.tagName).to.equal('DAType'); + expect(element?.previousElementSibling?.tagName).to.equal('DOType'); + }); + it('recursively add missing! subsequent EnumType elements', async () => { + expect(doc.querySelector('DAType[id="myOriginator"]')).to.not.exist; + selector.value = 'OpenSCD_Originator'; + idField.maybeValue = 'myOriginator'; + await parent.requestUpdate(); + primayAction.click(); + await parent.updateComplete; + expect(doc.querySelector('DAType[id="myOriginator"]')).to.exist; + expect(doc.querySelector('EnumType[id="OriginatorCategoryKind"]')).to + .exist; + expect( + doc.querySelectorAll('EnumType[id="OriginatorCategoryKind"]').length + ).to.equal(1); + }); + it('recursively add missing! subsequent DAType elements', async () => { + expect(doc.querySelector('DAType[id="OpenSCD_AnalogueValue_FLOAT32"]')).to + .not.exist; + selector.value = 'OpenSCD_RangeConfig'; + idField.maybeValue = 'myOriginator'; + await parent.requestUpdate(); + primayAction.click(); + await parent.updateComplete; + expect(doc.querySelector('DAType[id="OpenSCD_AnalogueValue_FLOAT32"]')).to + .exist; + expect( + doc.querySelectorAll('DAType[id="OpenSCD_AnalogueValue_FLOAT32"]') + .length + ).to.equal(1); + }); + }); + + describe('defines a dATypeWizard', () => { + let idField: WizardTextField; + let primayAction: HTMLElement; + let deleteButton: HTMLElement; + + beforeEach(async () => { + (( + dATypeList.querySelector('mwc-list-item[value="#Dummy.LLN0.Mod.SBOw"]') + )).click(); + await parent.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + idField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="id"]') + ); + primayAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + deleteButton = ( + parent.wizardUI.dialog?.querySelector('mwc-menu > mwc-list-item') + ); + }); + + it('looks like the latest snapshot', async () => { + await expect(parent.wizardUI.dialog).to.equalSnapshot({ + ignoreAttributes: [ + { + tags: ['wizard-textfield'], + attributes: ['pattern'], + }, + ], + }); + }); + + //work around, because the escapes get removed in snapshot + it('should have correct pattern', async () => { + const pattern = + '([:_A-Za-z]|[\u00C0-\u00D6]|[\u00D8-\u00F6]|[\u00F8-\u02FF]|[\u0370-\u037D]' + + '|[\u037F-\u1FFF]|[\u200C-\u200D]|[\u2070-\u218F]|[\u2C00-\u2FEF]' + + '|[\u3001-\uD7FF]|[\uF900-\uFDCF]|[\uFDF0-\uFFFD]|[.0-9\\-]|\u00B7|[\u0300-\u036F]|[\u203F-\u2040])+'; + expect( + parent.wizardUI.dialog!.querySelectorAll('wizard-textfield[pattern]')! + .length + ).to.equal(2); + + expect( + parent.wizardUI + .dialog!.querySelectorAll('wizard-textfield[pattern]')[0] + .getAttribute('pattern') + ).to.equal(pattern); + + expect( + parent.wizardUI + .dialog!.querySelectorAll('wizard-textfield[pattern]')[1] + .getAttribute('pattern') + ).to.equal(patterns.normalizedString); + }); + it('edits DAType attributes id', async () => { + expect(doc.querySelector('DAType[id="Dummy.LLN0.Mod.SBOw"]')).to.exist; + idField.value = 'changedDAType'; + await parent.requestUpdate(); + primayAction.click(); + await parent.requestUpdate(); + expect(doc.querySelector('DAType[id="Dummy.LLN0.Mod.SBOw"]')).to.not + .exist; + expect(doc.querySelector('DAType[id="changedDAType"]')).to.exist; + }); + it('deletes the DAType attribute on delete button click', async () => { + expect(doc.querySelector('DAType[id="Dummy.LLN0.Mod.SBOw"]')).to.exist; + expect(doc.querySelectorAll('DAType').length).to.equal(5); + deleteButton.click(); + await parent.requestUpdate(); + expect(doc.querySelector('DAType[id="Dummy.LLN0.Mod.SBOw"]')).to.not + .exist; + expect(doc.querySelectorAll('DAType').length).to.equal(4); + }); + it('does not edit DAType element without changes', async () => { + const originData = (( + doc.querySelector('DAType[id="Dummy.LLN0.Mod.SBOw"]') + )).cloneNode(true); + primayAction.click(); + await parent.requestUpdate(); + expect( + originData.isEqualNode( + doc.querySelector('DAType[id="Dummy.LLN0.Mod.SBOw"]') + ) + ).to.be.true; + }); + }); +}); diff --git a/packages/open-scd/test/integration/editors/templates/dotype-wizarding.test.ts b/packages/open-scd/test/integration/editors/templates/dotype-wizarding.test.ts new file mode 100644 index 0000000000..7bdd43e34b --- /dev/null +++ b/packages/open-scd/test/integration/editors/templates/dotype-wizarding.test.ts @@ -0,0 +1,506 @@ +import { html, fixture, expect } from '@open-wc/testing'; + +import '../../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../../mock-wizard-editor.js'; + +import { ListItem } from '@material/mwc-list/mwc-list-item'; +import { Select } from '@material/mwc-select'; + +import { FilteredList } from '../../../../src/filtered-list.js'; +import TemplatesPlugin from '../../../../src/editors/Templates.js'; +import { WizardTextField } from '../../../../src/wizard-textfield.js'; +import { ListItemBase } from '@material/mwc-list/mwc-list-item-base'; + +import { patterns } from '../../../../src/wizards/foundation/limits.js'; + +describe('DOType wizards', () => { + if (customElements.get('templates-editor') === undefined) + customElements.define('templates-editor', TemplatesPlugin); + let doc: Document; + let parent: MockWizardEditor; + let templates: TemplatesPlugin; + let dOTypeList: FilteredList; + + beforeEach(async () => { + parent = await fixture( + html`` + ); + + templates = parent.querySelector('templates-editor')!; + + doc = await fetch('/test/testfiles/templates/dotypes.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + templates.doc = doc; + await templates.updateComplete; + dOTypeList = ( + templates.shadowRoot?.querySelector('filtered-list[id="dotypelist"]') + ); + }); + + describe('defines a createDOTypeWizard', () => { + let selector: Select; + let idField: WizardTextField; + let cdcField: WizardTextField; + let primayAction: HTMLElement; + beforeEach(async () => { + const button = ( + templates?.shadowRoot?.querySelectorAll( + 'mwc-icon-button[icon="playlist_add"]' + )[1] + ); + button.click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + selector = ( + parent.wizardUI.dialog?.querySelector('mwc-select[label="type"]') + ); + }); + + it('looks like the latest snapshot', async () => { + // prettier does not support escaping in regexes of the /v flag + await expect(parent.wizardUI.dialog).dom.to.equalSnapshot({ + ignoreAttributes: [ + { + tags: ['wizard-textfield'], + attributes: ['pattern'], + }, + ], + }); + }); + + // work around, because the escapes get removed in snapshot by prettier + it('should have correct pattern', async () => { + expect( + parent.wizardUI.dialog!.querySelectorAll('wizard-textfield[pattern]')! + .length + ).to.equal(2); + + expect( + parent.wizardUI + .dialog!.querySelectorAll('wizard-textfield[pattern]')[0] + .getAttribute('pattern') + ).to.equal(patterns.tRestrName1stL); + + expect( + parent.wizardUI + .dialog!.querySelectorAll('wizard-textfield[pattern]')[1] + .getAttribute('pattern') + ).to.equal(patterns.normalizedString); + }); + + it('edits SDO attributes name', async () => { + expect(doc.querySelector('DOType[id="Dummy.WYE"] > SDO[name="phsA"]')).to + .exist; + nameField.value = 'newPhsA'; + await parent.requestUpdate(); + primayAction.click(); + await parent.requestUpdate(); + expect(doc.querySelector('DOType[id="Dummy.WYE"] > SDO[name="phsA"]')).to + .not.exist; + expect(doc.querySelector('DOType[id="Dummy.WYE"] > SDO[name="newPhsA"]')) + .to.exist; + }); + it('deletes the SDO element on delete button click', async () => { + expect(doc.querySelector('DOType[id="Dummy.WYE"] > SDO[name="phsA"]')).to + .exist; + expect( + doc.querySelectorAll('DOType[id="Dummy.WYE"] > SDO').length + ).to.equal(3); + deleteButton.click(); + await parent.requestUpdate(); + expect(doc.querySelector('DOType[id="Dummy.WYE"] > SDO[name="phsA"]')).to + .not.exist; + expect( + doc.querySelectorAll('DOType[id="Dummy.WYE"] > SDO').length + ).to.equal(2); + }); + it('does not edit SDO element without changes', async () => { + const originData = (( + doc.querySelector('DOType[id="Dummy.WYE"] > SDO[name="phsA"]') + )).cloneNode(true); + primayAction.click(); + await parent.requestUpdate(); + expect( + originData.isEqualNode( + doc.querySelector('DOType[id="Dummy.WYE"] > SDO[name="phsA"]') + ) + ).to.be.true; + }); + it('filters the type selector to DOTypes', async () => { + expect(typeSelect!.querySelectorAll('mwc-list-item').length).to.equal( + doc.querySelectorAll('DOType').length + ); + }); + }); + + describe('defines a sDOWizard to create a new SDO element', () => { + let nameField: WizardTextField; + let descField: WizardTextField; + let typeSelect: Select; + let primaryAction: HTMLElement; + + beforeEach(async () => { + (( + dOTypeList.querySelector('mwc-list-item[value="#Dummy.LLN0.Mod"]') + )).click(); + await parent.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + (( + Array.from( + parent.wizardUI.dialog!.querySelectorAll( + 'mwc-menu > mwc-list-item' + ) + ).find(item => item.innerHTML.includes(`[scl.DO]`)) + )).click(); + await parent.wizardUI.dialog?.requestUpdate(); + + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + nameField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="name"]') + ); + descField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="desc"]') + ); + typeSelect = ( + parent.wizardUI.dialog?.querySelector('mwc-select[label="values"]') + ); + idField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="id"]') + ); + primayAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + }); + + it('looks like the latest snapshot', async () => { + await expect(parent.wizardUI.dialog).to.equalSnapshot({ + ignoreAttributes: [ + { + tags: ['wizard-textfield'], + attributes: ['pattern'], + }, + ], + }); + }); + + //work around, because the escapes get removed in snapshot + it('should have correct pattern', async () => { + const pattern = + '([:_A-Za-z]|[\u00C0-\u00D6]|[\u00D8-\u00F6]|[\u00F8-\u02FF]|[\u0370-\u037D]' + + '|[\u037F-\u1FFF]|[\u200C-\u200D]|[\u2070-\u218F]|[\u2C00-\u2FEF]' + + '|[\u3001-\uD7FF]|[\uF900-\uFDCF]|[\uFDF0-\uFFFD]|[.0-9\\-]|\u00B7|[\u0300-\u036F]|[\u203F-\u2040])+'; + expect( + parent.wizardUI.dialog!.querySelectorAll('wizard-textfield[pattern]')! + .length + ).to.equal(2); + + expect( + parent.wizardUI + .dialog!.querySelectorAll('wizard-textfield[pattern]')[0] + .getAttribute('pattern') + ).to.equal(pattern); + + expect( + parent.wizardUI + .dialog!.querySelectorAll('wizard-textfield[pattern]')[1] + .getAttribute('pattern') + ).to.equal(patterns.normalizedString); + }); + + it('allows to add empty EnumType to the project', async () => { + expect(doc.querySelector('EnumType[id="myGeneralEnumType"]')).to.not + .exist; + idField.maybeValue = 'myGeneralEnumType'; + await parent.requestUpdate(); + primayAction.click(); + await parent.updateComplete; + expect(doc.querySelector('EnumType[id="myGeneralEnumType"]')).to.exist; + }); + it('respects the sequence defined in the standard', async () => { + idField.maybeValue = 'myGeneralEnumType'; + await parent.requestUpdate(); + primayAction.click(); + await parent.updateComplete; + const element = doc.querySelector('EnumType[id="myGeneralEnumType"]'); + expect(element?.nextElementSibling?.tagName).to.equal('EnumType'); + expect(element?.previousElementSibling?.tagName).to.equal('DAType'); + }); + it('allows to add a predefined EnumType', async () => { + expect(doc.querySelector('EnumType[id="myGeneralEnumType"]')).to.not + .exist; + selector.value = 'AdjustmentKind'; + idField.maybeValue = 'myGeneralEnumType'; + await parent.requestUpdate(); + primayAction.click(); + await parent.updateComplete; + expect(doc.querySelector('EnumType[id="myGeneralEnumType"]')).to.exist; + expect( + doc.querySelectorAll('EnumType[id="myGeneralEnumType"] > EnumVal') + .length + ).to.equal(4); + }); + }); + + describe('defines an eNumTypeEditWizard', () => { + let idField: WizardTextField; + let primayAction: HTMLElement; + let deleteButton: HTMLElement; + + beforeEach(async () => { + (( + eNumTypeList.querySelector('mwc-list-item[value="#Dummy_ctlModel"]') + )).click(); + + await parent.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + idField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="id"]') + ); + primayAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + deleteButton = ( + parent.wizardUI.dialog?.querySelectorAll('mwc-menu > mwc-list-item')[0] + ); + }); + + it('looks like the latest snapshot', async () => { + await expect(parent.wizardUI.dialog).to.equalSnapshot({ + ignoreAttributes: [ + { + tags: ['wizard-textfield'], + attributes: ['pattern'], + }, + ], + }); + }); + + //work around, because the escapes get removed in snapshot + it('should have correct pattern', async () => { + const pattern = + '([:_A-Za-z]|[\u00C0-\u00D6]|[\u00D8-\u00F6]|[\u00F8-\u02FF]|[\u0370-\u037D]' + + '|[\u037F-\u1FFF]|[\u200C-\u200D]|[\u2070-\u218F]|[\u2C00-\u2FEF]' + + '|[\u3001-\uD7FF]|[\uF900-\uFDCF]|[\uFDF0-\uFFFD]|[.0-9\\-]|\u00B7|[\u0300-\u036F]|[\u203F-\u2040])+'; + expect( + parent.wizardUI.dialog!.querySelectorAll('wizard-textfield[pattern]')! + .length + ).to.equal(2); + + expect( + parent.wizardUI + .dialog!.querySelectorAll('wizard-textfield[pattern]')[0] + .getAttribute('pattern') + ).to.equal(pattern); + + expect( + parent.wizardUI + .dialog!.querySelectorAll('wizard-textfield[pattern]')[1] + .getAttribute('pattern') + ).to.equal(patterns.normalizedString); + }); + + it('edits EnumType attributes id', async () => { + expect(doc.querySelector('EnumType[id="Dummy_ctlModel"]')).to.exist; + idField.value = 'changedEnumType'; + await parent.requestUpdate(); + primayAction.click(); + await parent.requestUpdate(); + expect(doc.querySelector('EnumType[id="Dummy_ctlModel"]')).to.not.exist; + expect(doc.querySelector('EnumType[id="changedEnumType"]')).to.exist; + }); + + it('deletes the EnumVal element on delete button click', async () => { + expect(doc.querySelector('EnumType[id="Dummy_ctlModel"]')).to.exist; + expect(doc.querySelectorAll('EnumType').length).to.equal(4); + deleteButton.click(); + await parent.requestUpdate(); + expect(doc.querySelector('EnumType[id="Dummy_ctlModel"]')).to.not.exist; + expect(doc.querySelectorAll('EnumType').length).to.equal(3); + }); + + it('does not edit EnumType element without changes', async () => { + const originData = (( + doc.querySelector('EnumType[id="Dummy_ctlModel"]') + )).cloneNode(true); + primayAction.click(); + await parent.requestUpdate(); + expect( + originData.isEqualNode( + doc.querySelector('EnumType[id="Dummy_ctlModel"]') + ) + ).to.be.true; + }); + }); + + describe('defines a eNumValWizard to edit an existing EnumVal', () => { + let ordField: WizardTextField; + let valueField: WizardTextField; + let descField: WizardTextField; + let primayAction: HTMLElement; + let deleteButton: HTMLElement; + + beforeEach(async () => { + (( + eNumTypeList.querySelector('mwc-list-item[value="#Dummy_ctlModel"]') + )).click(); + await parent.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI?.dialog?.querySelector( + 'mwc-list-item[value="#Dummy_ctlModel>1"]' + ) + )).click(); + await parent.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + ordField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="ord"]') + ); + valueField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="value"]') + ); + descField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="desc"]') + ); + primayAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + deleteButton = ( + parent.wizardUI.dialog?.querySelectorAll('mwc-menu > mwc-list-item')[0] + ); + }); + + it('looks like the latest snapshot', async () => { + await expect(parent.wizardUI.dialog).to.equalSnapshot(); + }); + + it('edits EnumVal attributes ord', async () => { + expect( + doc.querySelector('EnumType[id="Dummy_ctlModel"] > EnumVal[ord="1"]') + ).to.exist; + ordField.value = '10'; + await parent.requestUpdate(); + primayAction.click(); + await parent.requestUpdate(); + expect( + doc.querySelector('EnumType[id="Dummy_ctlModel"] > EnumVal[ord="1"]') + ).to.not.exist; + expect( + doc.querySelector('EnumType[id="Dummy_ctlModel"] > EnumVal[ord="10"]') + ).to.exist; + }); + + it('edits EnumVal attributes value', async () => { + expect( + doc.querySelector('EnumType[id="Dummy_ctlModel"] > EnumVal[ord="1"]') + ?.textContent + ).to.equal('direct-with-normal-security'); + valueField.value = 'direct-with-normal-security-test'; + descField.nullable = false; + descField.maybeValue = 'myDesc'; + await parent.requestUpdate(); + primayAction.click(); + await parent.requestUpdate(); + expect( + doc.querySelector( + 'EnumType[id="Dummy_ctlModel"] > EnumVal[ord="1"][desc="myDesc"]' + )?.textContent + ).to.equal('direct-with-normal-security-test'); + }); + + it('deletes the EnumVal element on delete button click', async () => { + expect( + doc.querySelector('EnumType[id="Dummy_ctlModel"] > EnumVal[ord="1"]') + ).to.exist; + expect( + doc.querySelectorAll('EnumType[id="Dummy_ctlModel"] > EnumVal').length + ).to.equal(5); + deleteButton.click(); + await parent.requestUpdate(); + expect( + doc.querySelector('EnumType[id="Dummy_ctlModel"] > EnumVal[name="1"]') + ).to.not.exist; + expect( + doc.querySelectorAll('EnumType[id="Dummy_ctlModel"] > EnumVal').length + ).to.equal(4); + }); + + it('does not edit EnumVal element without changes', async () => { + const originData = (( + doc.querySelector('EnumType[id="Dummy_ctlModel"] > EnumVal[ord="1"]') + )).cloneNode(true); + primayAction.click(); + await parent.requestUpdate(); + expect( + originData.isEqualNode( + doc.querySelector('EnumType[id="Dummy_ctlModel"] > EnumVal[ord="1"]') + ) + ).to.be.true; + }); + }); + + describe('defines a eNumValWizard to create a new EnumVal element', () => { + let ordField: WizardTextField; + let valueField: WizardTextField; + let descField: WizardTextField; + let primayAction: HTMLElement; + + beforeEach(async () => { + (( + eNumTypeList.querySelector('mwc-list-item[value="#Dummy_ctlModel"]') + )).click(); + await parent.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelectorAll('mwc-menu > mwc-list-item')[1] + )).click(); + await parent.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + ordField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="ord"]') + ); + descField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="desc"]') + ); + valueField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="value"]') + ); + primayAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + }); + + it('looks like the latest snapshot', async () => { + await expect(parent.wizardUI.dialog).to.equalSnapshot(); + }); + it('creates a new EnumVal element', async () => { + expect( + doc.querySelector('EnumType[id="Dummy_ctlModel"] > EnumVal[ord="9"]') + ).to.not.exist; + ordField.value = '9'; + valueField.value = 'newValue'; + await parent.requestUpdate(); + primayAction.click(); + await parent.requestUpdate(); + expect( + doc.querySelector( + 'EnumType[id="Dummy_ctlModel"] > EnumVal[ord="9"]:not([desc])' + )?.textContent + ).to.equal('newValue'); + }); + it('creates yet another new EnumVal element', async () => { + expect( + doc.querySelector('EnumType[id="Dummy_ctlModel"] > EnumVal[ord="9"]') + ).to.not.exist; + ordField.value = '9'; + valueField.value = 'newValue'; + descField.nullable = false; + descField.maybeValue = 'myDesc'; + await parent.requestUpdate(); + primayAction.click(); + await parent.requestUpdate(); + expect( + doc.querySelector( + 'EnumType[id="Dummy_ctlModel"] > EnumVal[ord="9"][desc="myDesc"]' + )?.textContent + ).to.equal('newValue'); + }); + }); +}); diff --git a/packages/open-scd/test/integration/editors/templates/lnodetype-wizard.test.ts b/packages/open-scd/test/integration/editors/templates/lnodetype-wizard.test.ts new file mode 100644 index 0000000000..187ba82ee7 --- /dev/null +++ b/packages/open-scd/test/integration/editors/templates/lnodetype-wizard.test.ts @@ -0,0 +1,651 @@ +import { html, fixture, expect } from '@open-wc/testing'; + +import '../../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../../mock-wizard-editor.js'; + +import { ListItem } from '@material/mwc-list/mwc-list-item'; +import { Select } from '@material/mwc-select'; + +import { FilteredList } from '../../../../src/filtered-list.js'; +import TemplatesPlugin from '../../../../src/editors/Templates.js'; +import { WizardTextField } from '../../../../src/wizard-textfield.js'; +import { WizardCheckbox } from '../../../../src/wizard-checkbox.js'; +import { patterns } from '../../../../src/foundation.js'; + +describe('LNodeType wizards', () => { + if (customElements.get('templates-editor') === undefined) + customElements.define('templates-editor', TemplatesPlugin); + let doc: Document; + let parent: MockWizardEditor; + let templates: TemplatesPlugin; + let lNodeTypeList: FilteredList; + + beforeEach(async () => { + parent = await fixture( + html`` + ); + + templates = parent.querySelector('templates-editor')!; + + doc = await fetch('/test/testfiles/templates/dotypes.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + templates.doc = doc; + await templates.updateComplete; + lNodeTypeList = ( + templates.shadowRoot?.querySelector('filtered-list[id="lnodetypelist"]') + ); + }); + + describe('defines a lNodeTypeHelperWizard', () => { + let idField: WizardTextField; + let primayAction: HTMLElement; + let deleteButton: HTMLElement; + + beforeEach(async () => { + (( + lNodeTypeList.querySelector('mwc-list-item[value="#Dummy.CSWI"]') + )).click(); + await parent.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 100)); //recursive call takes time + idField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="id"]') + ); + primayAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + deleteButton = ( + parent.wizardUI.dialog?.querySelector('mwc-menu > mwc-list-item') + ); + }); + + it('looks like the latest snapshot', async () => { + await expect(parent.wizardUI.dialog).to.equalSnapshot({ + ignoreAttributes: [ + { + tags: ['wizard-textfield'], + attributes: ['pattern'], + }, + ], + }); + }); + + //work around, because the escapes get removed in snapshot + it('should have correct pattern', async () => { + const pattern = + '([:_A-Za-z]|[\u00C0-\u00D6]|[\u00D8-\u00F6]|[\u00F8-\u02FF]|[\u0370-\u037D]' + + '|[\u037F-\u1FFF]|[\u200C-\u200D]|[\u2070-\u218F]|[\u2C00-\u2FEF]' + + '|[\u3001-\uD7FF]|[\uF900-\uFDCF]|[\uFDF0-\uFFFD]|[.0-9\\-]|\u00B7|[\u0300-\u036F]|[\u203F-\u2040])+'; + expect( + parent.wizardUI.dialog!.querySelectorAll('wizard-textfield[pattern]')! + .length + ).to.equal(3); + + expect( + parent.wizardUI + .dialog!.querySelectorAll('wizard-textfield[pattern]')[0] + .getAttribute('pattern') + ).to.equal(pattern); + + expect( + parent.wizardUI + .dialog!.querySelectorAll('wizard-textfield[pattern]')[1] + .getAttribute('pattern') + ).to.equal(patterns.normalizedString); + + expect( + parent.wizardUI + .dialog!.querySelectorAll('wizard-textfield[pattern]')[2] + .getAttribute('pattern') + ).to.equal(patterns.lnClass); + }); + + it('edits LNodeType attributes id', async () => { + expect(doc.querySelector('LNodeType[id="Dummy.CSWI"]')).to.exist; + idField.value = 'changedLNodeType'; + await parent.requestUpdate(); + primayAction.click(); + await parent.requestUpdate(); + expect(doc.querySelector('LNodeType[id="Dummy.CSWI"]')).to.not.exist; + expect(doc.querySelector('LNodeType[id="changedLNodeType"]')).to.exist; + }); + it('deletes the LNodeType attribute on delete button click', async () => { + expect(doc.querySelector('LNodeType[id="Dummy.CSWI"]')).to.exist; + expect(doc.querySelectorAll('LNodeType').length).to.equal(8); + deleteButton.click(); + await parent.requestUpdate(); + expect(doc.querySelector('LNodeType[id="Dummy.CSWI"]')).to.not.exist; + expect(doc.querySelectorAll('LNodeType').length).to.equal(7); + }); + it('does not edit LNodeType element without changes', async () => { + const originData = (( + doc.querySelector('LNodeType[id="Dummy.CSWI"]') + )).cloneNode(true); + primayAction.click(); + await parent.requestUpdate(); + expect( + originData.isEqualNode(doc.querySelector('LNodeType[id="Dummy.CSWI"]')) + ).to.be.true; + }); + }); + + describe('defines a createLNodeTypeWizard', () => { + let selector: Select; + let idField: WizardTextField; + let primayAction: HTMLElement; + beforeEach(async () => { + const button = ( + templates?.shadowRoot?.querySelectorAll( + 'mwc-icon-button[icon="playlist_add"]' + )[0] + ); + button.click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + selector = parent.wizardUI.dialog!.querySelector( + 'wizard-select:nth-child(2)' + )!; + enaOpn = parent.wizardUI.shadowRoot!.querySelector( + 'wizard-select:nth-child(22)' + )!; + + ens = doc.querySelector('DOType[cdc="ENS"]')!; + sps = doc.querySelector('DOType[cdc="SPS"]')!; + ensId = ens?.getAttribute('id') ?? ''; + spsId = sps?.getAttribute('id') ?? ''; + }); + + it('looks like the latest snapshot', async () => { + await expect(parent.wizardUI.dialog).to.equalSnapshot(); + }); + + it('filters the type selection for each DO to fit the cdc', () => { + expect(beh.querySelectorAll('mwc-list-item').length).to.equal( + doc.querySelectorAll('DOType[cdc="ENS"]').length + ); + }); + + it('requires all mandatory DOs to be defined', async () => { + beh.value = ensId; + await parent.updateComplete; + saveButton.click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + expect(parent.wizardUI.dialog).to.exist; + expect( + doc.querySelector( + 'LNodeType[id="myGeneralLNodeType"][lnClass="CILO"]' + ) + ).to.not.exist; + }); + + it('adds new LNodeType with correct id and lnClass', async () => { + beh.value = ensId; + enaOpn.value = spsId; + enaCls.value = spsId; + await parent.updateComplete; + saveButton.click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + expect(parent.wizardUI.dialog).to.not.exist; + expect( + doc.querySelector( + 'LNodeType[id="myGeneralLNodeType"][lnClass="CILO"]' + ) + ).to.exist; + }); + + it('adds selected DOs to new LNodeType', async () => { + beh.value = ensId; + enaOpn.value = spsId; + enaCls.value = spsId; + await parent.updateComplete; + saveButton.click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + expect( + doc.querySelector( + `LNodeType[id="myGeneralLNodeType"][lnClass="CILO"] > DO[name="Beh"]:not([bType])[type="${ensId}"]` + ) + ).to.exist; + expect( + doc.querySelector( + `LNodeType[id="myGeneralLNodeType"][lnClass="CILO"] > DO[name="EnaOpn"]:not([bType])[type="${spsId}"]` + ) + ).to.exist; + expect( + doc.querySelector( + `LNodeType[id="myGeneralLNodeType"][lnClass="CILO"] > DO[name="EnaCls"]:not([bType])[type="${spsId}"]` + ) + ).to.exist; + }); + }); + }); + + describe('defines a dOWizard to edit an existing DO', () => { + let nameField: WizardTextField; + let descField: WizardTextField; + let typeSelect: Select; + let accessControlField: WizardTextField; + let transientSelect: WizardCheckbox; + let primaryAction: HTMLElement; + let deleteButton: HTMLElement; + + beforeEach(async () => { + (( + lNodeTypeList.querySelector('mwc-list-item[value="#Dummy.LLN0"]') + )).click(); + await parent.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI?.dialog?.querySelector( + 'mwc-list-item[value="#Dummy.LLN0>Mod"]' + ) + )).click(); + await parent.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + nameField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="name"]') + ); + descField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="desc"]') + ); + accessControlField = ( + parent.wizardUI.dialog?.querySelector( + 'wizard-textfield[label="accessControl"]' + ) + ); + typeSelect = ( + parent.wizardUI.dialog?.querySelector('mwc-select[label="type"]') + ); + transientSelect = ( + parent.wizardUI.dialog?.querySelector( + 'wizard-checkbox[label="transient"]' + ) + ); + primaryAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + }); + + it('looks like the latest snapshot', async () => { + await expect(parent.wizardUI.dialog).to.equalSnapshot(); + }); + it('creates a new DO element', async () => { + expect( + doc.querySelector('LNodeType[id="Dummy.LLN0"] > DO[name="NewMod"]') + ).to.not.exist; + nameField.value = 'NewMod'; + typeSelect.value = 'Dummy.CMV'; + await parent.requestUpdate(); + primaryAction.click(); + await parent.requestUpdate(); + expect( + doc.querySelector( + 'LNodeType[id="Dummy.LLN0"] > DO[name="NewMod"]:not([desc])[type="Dummy.CMV"]:not([accessControl]):not([transient])' + ) + ).to.exist; + }); + it('creates yet another new DO element', async () => { + expect( + doc.querySelector('LNodeType[id="Dummy.LLN0"] > DO[name="NewMod"]') + ).to.not.exist; + + nameField.value = 'NewMod'; + descField.nullable = false; + descField.value = 'myDesc'; + typeSelect.value = 'Dummy.CMV'; + accessControlField.nullable = false; + accessControlField.maybeValue = 'myAccessControl'; + transientSelect.maybeValue = 'true'; + + await parent.requestUpdate(); + primaryAction.click(); + await parent.requestUpdate(); + expect( + doc.querySelector( + `LNodeType[id="Dummy.LLN0"] >` + + `DO[name="NewMod"][desc="myDesc"][type="Dummy.CMV"][accessControl="myAccessControl"][transient="true"]` + ) + ).to.exist; + }); + }); +}); diff --git a/packages/open-scd/test/integration/editors/test-support.ts b/packages/open-scd/test/integration/editors/test-support.ts new file mode 100644 index 0000000000..50b527898a --- /dev/null +++ b/packages/open-scd/test/integration/editors/test-support.ts @@ -0,0 +1,57 @@ +import GooseSubscribeDataBindingPlugin from '../../../src/editors/GooseSubscriberDataBinding.js'; +import GooseSubscribeLaterBindingPlugin from '../../../src/editors/GooseSubscriberLaterBinding.js'; +import SMVSubscribeDataBindingPlugin from '../../../src/editors/SMVSubscriberDataBinding.js'; +import SMVSubscriberLaterBindingPlugin from '../../../src/editors/SMVSubscriberLaterBinding.js'; + +import { FcdaBindingList } from '../../../src/editors/subscription/fcda-binding-list.js'; +import { ExtRefLaterBindingList } from '../../../src/editors/subscription/later-binding/ext-ref-later-binding-list.js'; +import { ExtRefLnBindingList } from '../../../src/editors/subscription/later-binding/ext-ref-ln-binding-list.js'; + +export function getFCDABindingList( + element: + | SMVSubscriberLaterBindingPlugin + | GooseSubscribeLaterBindingPlugin + | SMVSubscribeDataBindingPlugin + | GooseSubscribeDataBindingPlugin +): FcdaBindingList { + return ( + element.shadowRoot?.querySelector('fcda-binding-list') + ); +} + +export function selectFCDAItem( + listElement: FcdaBindingList, + controlIdentity: string, + fcdaIdentity: string +): void { + (Array.from( + listElement.shadowRoot!.querySelectorAll('mwc-list-item.subitem') + ).find(listItem => { + const value = listItem.getAttribute('value') ?? ''; + return value.includes(controlIdentity) && value.includes(fcdaIdentity); + })).click(); +} + +export function getExtrefDataBindingList( + element: SMVSubscribeDataBindingPlugin | GooseSubscribeDataBindingPlugin +): ExtRefLnBindingList { + return ( + element.shadowRoot?.querySelector('extref-ln-binding-list') + ); +} + +export function getExtrefLaterBindingList( + element: SMVSubscriberLaterBindingPlugin | GooseSubscribeLaterBindingPlugin +): ExtRefLaterBindingList { + return ( + element.shadowRoot?.querySelector('extref-later-binding-list') + ); +} + +export function getSelectedSubItemValue( + element: FcdaBindingList +): Element | null { + return element.shadowRoot!.querySelector( + '.subitem[selected] span[slot="meta"]' + ); +} diff --git a/packages/open-scd/test/integration/editors/triggered/CommunicationMappingPlugin.test.ts b/packages/open-scd/test/integration/editors/triggered/CommunicationMappingPlugin.test.ts new file mode 100644 index 0000000000..af7fe5dd32 --- /dev/null +++ b/packages/open-scd/test/integration/editors/triggered/CommunicationMappingPlugin.test.ts @@ -0,0 +1,514 @@ +/* import { expect, fixture, html } from '@open-wc/testing'; + +import { List } from '@material/mwc-list'; +import { MockWizardEditor } from '../../../mock-wizard-editor.js'; +import { ZerolinePane } from '../../../../src/zeroline-pane.js'; + +describe('CommunicationMappingPlugin', () => { + let doc: Document; + let parent: MockWizardEditor; + let element: ZerolinePane; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/comm-map.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + parent = await fixture( + html`` + ); + + element = parent.querySelector('zeroline-pane')!; + await element.updateComplete; + }); + + describe('communication mapping wizard', () => { + beforeEach(async () => { + await element.commmap.click(); + await parent.updateComplete; + }); + + it('opens the communication mapping wizard on trigger', async () => { + expect(parent.wizardUI.dialogs.length).to.equal(1); + }); + + it('closes on secondary action', async () => { + (( + parent.wizardUI.dialog!.querySelector( + 'mwc-button[slot="secondaryAction"]' + ) + )).click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + expect(parent.wizardUI.dialogs.length).to.equal(0); + }); + + it('groups connections to unique pair of source ied, sink ied and control block', () => { + expect( + parent.wizardUI.dialog?.querySelectorAll('mwc-list-item').length + ).to.equal(4); + }); + + it('indicates the control block type with mwc-list graphic slot', () => { + expect( + parent.wizardUI.dialog!.querySelectorAll('mwc-list-item > mwc-icon') + .length + ).to.equal(4); + }); + + it('show the source ied, sink ied and control block', () => { + expect( + parent.wizardUI.dialog!.querySelectorAll('mwc-list-item > mwc-icon') + .length + ).to.equal(4); + }); + }); + + describe('control block connection wizard', () => { + let commMappings: List; + beforeEach(async () => { + await element.commmap.click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + commMappings = ( + parent.wizardUI.dialog?.querySelector('filtered-list') + ); + }); + + it('opens on Connection item click', async () => { + commMappings.items[0].click(); + await parent.updateComplete; + expect(parent.wizardUI.dialogs.length).to.equal(1); + expect(parent.wizardUI.dialog?.heading).to.equal( + 'IED2>>CBSW> XSWI 2>ReportCb - IED1' + ); + }); + + it('shows all ClientLNs', async () => { + commMappings.items[0].click(); + await parent.updateComplete; + expect( + parent.wizardUI.dialog?.querySelectorAll('mwc-check-list-item').length + ).to.equal( + doc.querySelectorAll('IED[name="IED2"] ReportControl ClientLN').length + ); + }); + + it('removes selected ClientLNs', async () => { + expect( + doc.querySelector( + 'ClientLN[iedName="IED1"][ldInst="CircuitBreaker_CB1"][lnClass="CSWI"]' + ) + ).to.exist; + commMappings.items[0].click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector('filtered-list') + )).items[3].click(); + await parent.updateComplete; + (( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + await parent.updateComplete; + expect( + doc.querySelector( + 'ClientLN[iedName="IED1"][ldInst="CircuitBreaker_CB1"][lnClass="CSWI"]' + ) + ).to.be.null; + }); + + it('shows all ExtRefs', async () => { + commMappings.items[1].click(); + await parent.updateComplete; + expect( + parent.wizardUI.dialog?.querySelectorAll('mwc-check-list-item').length + ).to.equal(14); + }); + + it('removes selected ExtRefs in case no intAddr is present', async () => { + expect( + doc.querySelector( + ':root > IED[name="IED2"] ExtRef[iedName="IED1"][ldInst="Disconnectors"][lnClass="XSWI"][doName="Pos"][daName="stVal"]' + ) + ).to.exist; + commMappings.items[1].click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector('filtered-list') + )).items[2].click(); + await parent.updateComplete; + (( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + await parent.updateComplete; + expect( + doc.querySelector( + ':root > IED[name="IED2"] ExtREf[iedName="IED1"][ldInst="Disconnectors"][lnClass="XSWI"][doName="Pos"][daName="stVal"]' + ) + ).to.not.exist; + }); + + it('updates selected ExtRefs in case intAddr is present', async () => { + expect( + doc.querySelector( + ':root > IED[name="IED1"] ExtRef[iedName="IED2"][ldInst="CBSW"][lnClass="XSWI"]' + + '[doName="Pos"][daName="stVal"][intAddr="./stVal"][serviceType="GOOSE"][desc="testDesc"]' + + '[pServT="GOOSE"][pLN="XSWI"][pDO="Pos"][pDA="stVal"]' + ) + ).to.exist; + commMappings.items[2].click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector('filtered-list') + )).items[0].click(); + await parent.updateComplete; + (( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + await parent.updateComplete; + expect( + doc.querySelector( + ':root > IED[name="IED1"] ExtRef:not([iedName]):not([ldInst]):not([lnClass]):not([doName]):not([daName])' + + '[intAddr="./stVal"][serviceType="GOOSE"][desc="testDesc"]' + + '[pServT="GOOSE"][pLN="XSWI"][pDO="Pos"][pDA="stVal"]' + ) + ).to.exist; + }); + it('removes IEDName if all linked ExtRefs are removed/disconnected', async () => { + expect( + doc.querySelector( + ':root > IED[name="IED1"] > AccessPoint > Server > ' + + 'LDevice[inst="CircuitBreaker_CB1"] > LN0 > GSEControl > ' + + 'IEDName[apRef="P1"][ldInst="CircuitBreaker_CB1"][lnClass="CSWI"]' + ) + ).to.exist; + commMappings.items[3].click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector('filtered-list') + )).items[0].click(); + await parent.updateComplete; + (( + parent.wizardUI.dialog?.querySelector('filtered-list') + )).items[1].click(); + await parent.updateComplete; + (( + parent.wizardUI.dialog?.querySelector('filtered-list') + )).items[2].click(); + await parent.updateComplete; + (( + parent.wizardUI.dialog?.querySelector('filtered-list') + )).items[3].click(); + await parent.updateComplete; + (( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + await parent.updateComplete; + expect( + doc.querySelector( + ':root > IED[name="IED1"] > AccessPoint > Server > ' + + 'LDevice[inst="CircuitBreaker_CB1"] > LN0 > GSEControl > ' + + 'IEDName[apRef="P1"][ldInst="CircuitBreaker_CB1"][lnClass="CSWI"]' + ) + ).to.not.exist; + }); + it('does not removes IEDName if linked ExtRefs`not completely removed/disconnected', async () => { + expect( + doc.querySelector( + ':root > IED[name="IED1"] > AccessPoint > Server > ' + + 'LDevice[inst="CircuitBreaker_CB1"] > LN0 > GSEControl > ' + + 'IEDName[apRef="P1"][ldInst="CircuitBreaker_CB1"][lnClass="CSWI"]' + ) + ).to.exist; + commMappings.items[3].click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector('filtered-list') + )).items[0].click(); + await parent.updateComplete; + (( + parent.wizardUI.dialog?.querySelector('filtered-list') + )).items[1].click(); + await parent.updateComplete; + (( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + await parent.updateComplete; + expect( + doc.querySelector( + ':root > IED[name="IED1"] > AccessPoint > Server > ' + + 'LDevice[inst="CircuitBreaker_CB1"] > LN0 > GSEControl > ' + + 'IEDName[apRef="P1"][ldInst="CircuitBreaker_CB1"][lnClass="CSWI"]' + ) + ).to.exist; + }); + }); + + describe('connection wizard', () => { + beforeEach(async () => { + await element.commmap.click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + await parent.updateComplete; + }); + + it('opens on communication primary action', async () => { + expect(parent.wizardUI.dialog).to.exist; + }); + it('is displaying source IEDs with mwc-check-list-item', () => { + expect( + parent.wizardUI.dialog?.querySelectorAll( + '#sourcelist>mwc-check-list-item' + ).length + ).to.equal(doc.querySelectorAll('IED').length); + }); + it('is displaying source IEDs with mwc-list-item', () => { + expect( + parent.wizardUI.dialog?.querySelectorAll('#sinklist>mwc-list-item') + .length + ).to.equal(doc.querySelectorAll('IED').length); + }); + }); + + describe('client wizard', () => { + beforeEach(async () => { + await element.commmap.click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector('#sourcelist') + )).items[1].click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector('#sinklist') + )).items[0].click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + }); + + it('opens on client ln on sink IED click', async () => { + expect(parent.wizardUI.dialog).to.exist; + }); + it('is displaying source IEDs report control blocks with mwc-check-list-item', () => { + expect( + parent.wizardUI.dialog?.querySelectorAll( + '#sourcelist>mwc-check-list-item' + ).length + ).to.equal(doc.querySelectorAll('IED[name="IED2"] ReportControl').length); + }); + it('is displaying source IEDs logical nodes in mwc-check-list-item', () => { + expect( + parent.wizardUI.dialog?.querySelectorAll( + '#sinklist>mwc-check-list-item' + ).length + ).to.equal( + doc.querySelectorAll('IED[name="IED1"] LN,IED[name="IED1"] LN0').length + ); + }); + it('add ClientLN referencing to logical nodes in AccessPoint', async () => { + expect( + doc.querySelector( + 'IED[name="IED2"] ReportControl[name="ReportEmpty"] ClientLN' + ) + )?.to.not.exist; + (( + parent.wizardUI.dialog?.querySelector('#sourcelist') + )).items[1].click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector('#sinklist') + )).items[0].click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + expect( + doc.querySelector( + 'IED[name="IED2"] ReportControl[name="ReportEmpty"] ClientLN[iedName="IED1"][apRef="P1"][prefix="DC"][lnClass="CILO"][lnInst="1"]' + ) + )?.to.exist; + }); + it('does not add an already existing ClientLN referencing to logical nodes in AccessPoint', async () => { + expect( + doc.querySelectorAll( + 'IED[name="IED2"] ReportControl[name="ReportCb"] ClientLN[iedName="IED1"][apRef="P1"][prefix="DC"][lnClass="CILO"][lnInst="1"]' + ).length + )?.to.equal(1); + (( + parent.wizardUI.dialog?.querySelector('#sourcelist') + )).items[0].click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector('#sinklist') + )).items[0].click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + expect( + doc.querySelectorAll( + 'IED[name="IED2"] ReportControl[name="ReportCb"] ClientLN[iedName="IED1"][apRef="P1"][prefix="DC"][lnClass="CILO"][lnInst="1"]' + ).length + )?.to.equal(1); + }); + it('add ClientLN referencing to LN0', async () => { + expect( + doc.querySelector( + 'IED[name="IED2"] ReportControl[name="ReportEmpty"] ClientLN' + ) + )?.to.not.exist; + (( + parent.wizardUI.dialog?.querySelector('#sourcelist') + )).items[1].click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector('#sinklist') + )).items[14].click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + expect( + doc.querySelector( + 'IED[name="IED2"] ReportControl[name="ReportEmpty"] ClientLN[iedName="IED1"][apRef="P1"][ldInst="Disconnectors"][lnClass="LLN0"]' + ) + )?.to.exist; + }); + it('does not add an already existing ClientLN referencing to LN0', async () => { + expect( + doc.querySelectorAll( + 'IED[name="IED2"] ReportControl[name="ReportCb"] ClientLN[iedName="IED1"][apRef="P1"][ldInst="Disconnectors"][lnClass="LLN0"]' + ).length + )?.to.equal(1); + (( + parent.wizardUI.dialog?.querySelector('#sourcelist') + )).items[0].click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector('#sinklist') + )).items[0].click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + expect( + doc.querySelectorAll( + 'IED[name="IED2"] ReportControl[name="ReportCb"] ClientLN[iedName="IED1"][apRef="P1"][ldInst="Disconnectors"][lnClass="LLN0"]' + ).length + )?.to.equal(1); + }); + it('add ClientLN referencing to logical nodes located in logical devices', async () => { + expect( + doc.querySelector( + 'IED[name="IED2"] ReportControl[name="ReportEmpty"] ClientLN' + ) + )?.to.not.exist; + (( + parent.wizardUI.dialog?.querySelector('#sourcelist') + )).items[1].click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector('#sinklist') + )).items[5].click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + expect( + doc.querySelector( + 'IED[name="IED2"] ReportControl[name="ReportEmpty"] ClientLN[iedName="IED1"][apRef="P1"][ldInst="Disconnectors"][prefix="DC"][lnClass="XSWI"][lnInst="1"]' + ) + )?.to.exist; + }); + it('does not add an already existing ClientLN referencing to to logical nodes located in logical devices', async () => { + expect( + doc.querySelectorAll( + 'IED[name="IED2"] ReportControl[name="ReportCb"] ClientLN[iedName="IED1"][apRef="P1"][ldInst="CircuitBreaker_CB1"][lnClass="XCBR"][lnInst="1"]' + ).length + )?.to.equal(1); + (( + parent.wizardUI.dialog?.querySelector('#sourcelist') + )).items[0].click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector('#sinklist') + )).items[0].click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + expect( + doc.querySelectorAll( + 'IED[name="IED2"] ReportControl[name="ReportCb"] ClientLN[iedName="IED1"][apRef="P1"][ldInst="CircuitBreaker_CB1"][lnClass="XCBR"][lnInst="1"]' + ).length + )?.to.equal(1); + }); + }); +}); + */ diff --git a/packages/open-scd/test/integration/editors/triggered/ImportIedsPlugin.test.ts b/packages/open-scd/test/integration/editors/triggered/ImportIedsPlugin.test.ts new file mode 100644 index 0000000000..8b2f89b784 --- /dev/null +++ b/packages/open-scd/test/integration/editors/triggered/ImportIedsPlugin.test.ts @@ -0,0 +1,442 @@ +import { expect, fixture, html } from '@open-wc/testing'; +import { LitElement, TemplateResult } from 'lit-element'; + +import { CheckListItem } from '@material/mwc-list/mwc-check-list-item'; + +import '../../../mock-editor-logger.js'; +import { MockEditorLogger } from '../../../mock-editor-logger.js'; + +import ImportingIedPlugin from '../../../../src/menu/ImportIEDs.js'; +import { Editing } from '../../../../src/Editing.js'; + +class MockImportIed extends Editing(LitElement) { + render(): TemplateResult { + return html``; + } +} + +describe('ImportIedsPlugin', () => { + customElements.define('import-ied-plugin', ImportingIedPlugin); + customElements.define('mock-import-ied', MockImportIed); + + describe('imports valid ied elements to empty projects', () => { + let doc: XMLDocument; + let importDoc: XMLDocument; + + let parent: MockImportIed; + let element: ImportingIedPlugin; + + beforeEach(async () => { + parent = (await fixture( + html`` + )) as MockImportIed; + + element = parent.shadowRoot!.querySelector('import-ied-plugin')!; + + doc = await fetch('/test/testfiles/importieds/emptyproject.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + parent.doc = doc; + + importDoc = await fetch('/test/testfiles/importieds/valid.iid') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + await element.updateComplete; + }); + + it('loads ied element to the project', async () => { + expect(element.doc?.querySelector(':root > IED[name="TestImportIED"]')).to + .not.exist; + + element.prepareImport(importDoc, 'valid.iid'); + await parent.updateComplete; + + expect(element.doc?.querySelector(':root > IED[name="TestImportIED"]')).to + .exist; + }); + + it('adds the connectedap of the imported ied', async () => { + element.prepareImport(importDoc, 'valid.iid'); + await parent.updateComplete; + + expect( + element.doc.querySelector( + 'SubNetwork[name="NewSubNetwork"] > ConnectedAP[iedName="TestImportIED"]' + ) + ).to.exist; + }); + + it('creates new subnetwork if not present in the doc', async () => { + expect(element.doc.querySelector('SubNetwork[name="NewSubNetwork"]')).to + .not.exist; + + element.prepareImport(importDoc, 'valid.iid'); + await parent.updateComplete; + + expect(element.doc.querySelector('SubNetwork[name="NewSubNetwork"]')).to + .exist; + }); + + it('renames TEMPLATE IED element if manufacturer/type has illegal characters', async () => { + importDoc = await fetch('/test/testfiles/importieds/template.icd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + const ied = importDoc.querySelector('IED')!; + ied.setAttribute('manufacturer', 'Fancy-Vendy'); + ied.setAttribute('type', 'Z#Mega$Y'); + + await element.updateComplete; + + element.prepareImport(importDoc, 'template.icd'); + await parent.updateComplete; + + console.log( + element.doc?.querySelector(':root > IED')?.getAttribute('name') + ); + + expect( + element.doc?.querySelector(':root > IED[name="FancyVendy_ZMegaY_001"]') + ).to.exist; + }); + + it('allows multiple import of TEMPLATE IEDs', async () => { + const templateIED1 = await fetch( + '/test/testfiles/importieds/template.icd' + ) + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + element.prepareImport(templateIED1, 'template.icd'); + + const templateIED2 = await fetch( + '/test/testfiles/importieds/template.icd' + ) + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + await element.updateComplete; + + element.prepareImport(templateIED2, 'template.icd'); + await parent.updateComplete; + + expect(element.doc.querySelector('IED[name="FancyVendy_ZMegaY_001"]')).to + .exist; + expect(element.doc.querySelector('IED[name="FancyVendy_ZMegaY_002"]')).to + .exist; + }); + + it('imports the ConnectedAPs for a TEMPLATE IED', async () => { + const templateIED1 = await fetch( + '/test/testfiles/importieds/template.icd' + ) + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + element.prepareImport(templateIED1, 'template.icd'); + await parent.updateComplete; + + expect( + element.doc?.querySelectorAll( + ':root > Communication > SubNetwork > ConnectedAP[iedName="FancyVendy_ZMegaY_001"]' + ) + ).to.exist; + }); + + it('loads unique lnodetypes to the project', async () => { + expect( + element.doc?.querySelectorAll(':root > DataTypeTemplates > LNodeType') + .length + ).to.equal(0); + + element.prepareImport(importDoc, 'template.icd'); + await parent.updateComplete; + + expect( + element.doc?.querySelectorAll(':root > DataTypeTemplates > LNodeType') + .length + ).to.equal(5); + }); + }); + + describe('imports valid ied elements', () => { + let doc: XMLDocument; + let importDoc: XMLDocument; + + let parent: MockImportIed; + let element: ImportingIedPlugin; + + beforeEach(async () => { + parent = await fixture(html``); + + element = parent.shadowRoot!.querySelector('import-ied-plugin')!; + + doc = await fetch('/test/testfiles/valid2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + parent.doc = doc; + await parent.updateComplete; + + importDoc = await fetch('/test/testfiles/importieds/valid.iid') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + await element.updateComplete; + }); + + it('loads ied element to the project', async () => { + expect(element.doc?.querySelector(':root > IED[name="TestImportIED"]')).to + .not.exist; + + element.prepareImport(importDoc, 'valid.iid'); + await parent.updateComplete; + + expect(element.doc?.querySelector(':root > IED[name="TestImportIED"]')).to + .exist; + }); + + it('loads unique lnodetypes to the project', async () => { + expect( + element.doc?.querySelectorAll(':root > DataTypeTemplates > LNodeType') + .length + ).to.equal(11); + + element.prepareImport(importDoc, 'valid.iid'); + await parent.updateComplete; + + expect( + element.doc?.querySelectorAll(':root > DataTypeTemplates > LNodeType') + .length + ).to.equal(16); + }); + + it('loads unique dotypes to the project', async () => { + expect( + element.doc?.querySelectorAll(':root > DataTypeTemplates > DOType') + .length + ).to.equal(16); + + element.prepareImport(importDoc, 'valid.iid'); + await parent.updateComplete; + + expect( + element.doc?.querySelectorAll(':root > DataTypeTemplates > DOType') + .length + ).to.equal(26); + }); + + it('loads unique datypes to the project', async () => { + expect( + element.doc?.querySelectorAll(':root > DataTypeTemplates > DAType') + .length + ).to.equal(7); + + element.prepareImport(importDoc, 'valid.iid'); + await parent.updateComplete; + + expect( + element.doc?.querySelectorAll(':root > DataTypeTemplates > DAType') + .length + ).to.equal(11); + }); + + it('loads unique enumtypes to the project', async () => { + expect( + element.doc?.querySelectorAll(':root > DataTypeTemplates > EnumType') + .length + ).to.equal(4); + + element.prepareImport(importDoc, 'valid.iid'); + await parent.updateComplete; + + expect( + element.doc?.querySelectorAll(':root > DataTypeTemplates > EnumType') + .length + ).to.equal(10); + }); + + it('adds the connectedap of the imported ied', async () => { + expect(element.doc.querySelector('ConnectedAP[iedName="TestImportIED"]')) + .to.not.exist; + + element.prepareImport(importDoc, 'valid.iid'); + await parent.updateComplete; + + expect(element.doc.querySelector('ConnectedAP[iedName="TestImportIED"]')) + .to.exist; + expect( + element.doc.querySelector('ConnectedAP[iedName="TestImportIED"]') + ?.parentElement + ).to.equal(element.doc.querySelector('SubNetwork[name="NewSubNetwork"]')); + }); + + it('creates new subnetwork if not present in the doc', async () => { + expect(element.doc.querySelector('SubNetwork[name="NewSubNetwork"]')).to + .not.exist; + + element.prepareImport(importDoc, 'valid.iid'); + await parent.updateComplete; + + expect(element.doc.querySelector('SubNetwork[name="NewSubNetwork"]')).to + .exist; + }); + + it('correctly transfers document element namespaces', async () => { + element.prepareImport(importDoc, 'valid.iid'); + await parent.updateComplete; + + expect( + element.doc.querySelector('SCL')!.getAttribute('xmlns:eTest1') + ).to.equal('http://www.eTest1.com/2022/Better61850'); + expect( + element.doc.querySelector('SCL')!.getAttribute('xmlns:eTest2') + ).to.equal('http://www.eTest2.com/2032/Better61850ForReal'); + + // looking at serialisation of node to confirm correct namespace registration + const output = new XMLSerializer().serializeToString(element.doc); + expect(output).to.contain( + 'xmlns:eTest1="http://www.eTest1.com/2022/Better61850"' + ); + expect(output).to.contain( + 'xmlns:eTest2="http://www.eTest2.com/2032/Better61850ForReal"' + ); + + // check that namespaces are encoded correctly within a specific element + const lineFeedAndSpacesReplace = /[\s\n\r]+/g; + expect(output.replace(lineFeedAndSpacesReplace, '')).to.include( + ` + +

    +`.replace(lineFeedAndSpacesReplace, '') + ); + }); + + it('allows multiple import of TEMPLATE IEDs', async () => { + expect(element.doc.querySelectorAll('IED').length).to.equal(3); + + const templateIED1 = await fetch( + '/test/testfiles/importieds/template.icd' + ) + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + element.prepareImport(templateIED1, 'template.icd'); + + const templateIED2 = await fetch( + '/test/testfiles/importieds/template.icd' + ) + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + element.prepareImport(templateIED2, 'template.icd'); + await parent.updateComplete; + + expect(element.doc.querySelector('IED[name="FancyVendy_ZMegaY_001"]')).to + .exist; + expect(element.doc.querySelector('IED[name="FancyVendy_ZMegaY_002"]')).to + .exist; + }); + + it('renders wizard for files containing more than one IED', async () => { + const multipleIedDoc = await fetch( + '/test/testfiles/importieds/multipleied.scd' + ) + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + element.prepareImport(multipleIedDoc, 'multipleied.scd'); + await element.updateComplete; + + expect(element.dialog).to.exist; + expect(element.dialog.open).to.be.true; + expect( + element.dialog?.querySelectorAll('mwc-check-list-item').length + ).to.equal(3); + }); + + it('imports selected IEDs from Import IED wizard', async () => { + const multipleIedDoc = await fetch( + '/test/testfiles/importieds/multipleied.scd' + ) + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + element.prepareImport(multipleIedDoc, 'multipleied.scd'); + await element.updateComplete; + + (( + element.dialog.querySelectorAll('mwc-check-list-item')[1] + )).setAttribute('selected', 'true'); + (( + element.dialog.querySelectorAll('mwc-check-list-item')[2] + )).setAttribute('selected', 'true'); + await element.dialog.updateComplete; + + (( + element.dialog?.querySelector('mwc-button[slot="primaryAction"]') + )).click(); + await parent.updateComplete; + await element.requestUpdate(); + + await new Promise(resolve => setTimeout(resolve, 100)); // await complex action + + expect(element.doc.querySelectorAll('IED[name="IED3"]').length).to.equal( + 1 + ); + expect(element.doc.querySelector('IED[name="IED4"]')).to.exist; + expect(element.doc.querySelector('IED[name="IED5"]')).to.exist; + }); + }); + + describe('importing invalid ieds', () => { + let doc: XMLDocument; + let importDoc: XMLDocument; + + let parent: MockEditorLogger; + let element: ImportingIedPlugin; + + beforeEach(async () => { + parent = (await fixture( + html`` + )) as MockEditorLogger; + + element = parent.querySelector('import-ied-plugin')!; + + doc = await fetch('/test/testfiles/valid2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + element.doc = doc; + await element.updateComplete; + }); + + it('throws missing ied elements error', async () => { + importDoc = await fetch('/test/testfiles/importieds/invalid.iid') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + element.prepareImport(importDoc, 'invalid.iid'); + + expect(parent.log[0].kind).to.equal('error'); + expect(parent.log[0].title).to.equal('[import.log.missingied]'); + }); + + it('throws duplicate ied name error', async () => { + importDoc = await fetch('/test/testfiles/importieds/duplicate.iid') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + element.prepareImport(importDoc, 'duplicate.iid'); + + expect(parent.log[0].kind).to.equal('error'); + expect(parent.log[0].title).to.equal('[import.log.nouniqueied]'); + }); + + it('throws parser error', async () => { + importDoc = await fetch('/test/testfiles/importieds/parsererror.iid') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + await element.updateComplete; + + element.prepareImport(importDoc, 'parsererror.iid'); + + expect(parent.log[0].kind).to.equal('error'); + expect(parent.log[0].title).to.equal('[import.log.parsererror]'); + }); + }); +}); diff --git a/packages/open-scd/test/integration/menu/ExportCommunication.test.ts b/packages/open-scd/test/integration/menu/ExportCommunication.test.ts new file mode 100644 index 0000000000..77007f3cb8 --- /dev/null +++ b/packages/open-scd/test/integration/menu/ExportCommunication.test.ts @@ -0,0 +1,55 @@ +import { expect, fixture, html } from '@open-wc/testing'; +import { spy, stub, useFakeTimers, restore } from 'sinon'; + +import ExportCommunication from '../../../src/menu/ExportCommunication.js'; + +if (!customElements.get('export-communication')) + customElements.define('export-communication', ExportCommunication); + +describe('Export Communication section functions', () => { + let element: ExportCommunication; + let doc: XMLDocument; + let clock: { restore: () => void; tick: (ms: number) => void }; + + before(() => { + clock = useFakeTimers(); + }); + + after(() => { + clock.restore(); + }); + + beforeEach(async () => { + doc = await fetch('/test/testfiles/communication.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + element = await fixture( + html`` + ); + + await element.updateComplete; + }); + + afterEach(() => restore()); + + it('Downloads the Communication section as a string', async () => { + const fakeLink = document.createElement('a'); + const clickSpy = stub(fakeLink, 'click'); + const revokeSpy = spy(URL, 'revokeObjectURL'); + const createSpy = stub(document, 'createElement').callsFake(() => fakeLink); + const appendSpy = spy(document.body, 'appendChild'); + const removeSpy = spy(document.body, 'removeChild'); + + await element.run(); + expect(createSpy).to.have.been.calledWith('a'); + expect(appendSpy).to.have.been.calledWith(fakeLink); + expect(clickSpy).to.have.been.called; + expect(removeSpy).to.have.been.calledWith(fakeLink); + clock.tick(5000); + expect(revokeSpy).to.have.been.calledWith(fakeLink.href); + }).timeout(10000); +}); diff --git a/packages/open-scd/test/integration/menu/NewProject.test.ts b/packages/open-scd/test/integration/menu/NewProject.test.ts new file mode 100644 index 0000000000..7f2a6b6c13 --- /dev/null +++ b/packages/open-scd/test/integration/menu/NewProject.test.ts @@ -0,0 +1,109 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import '../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../mock-wizard-editor.js'; + +import NewProjectPlugin from '../../../src/menu/NewProject.js'; + +describe('NewProject loader', () => { + customElements.define('new-project-plugin', NewProjectPlugin); + let parent: MockWizardEditor; + let element: NewProjectPlugin; + + beforeEach(async () => { + parent = await fixture(html` + + `); + + element = parent.querySelector('new-project-plugin')!; + }); + + it('creates an empty Edition 2.1 project on wizard primary button click', async () => { + element.run(); + await element.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.shadowRoot!.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + expect(parent.doc?.querySelector('Header')).to.exist; + expect(parent.doc?.querySelector('Header')?.getAttribute('id')).to.equal( + parent.docName.slice(0, -4) + ); + expect(parent.doc?.querySelector('SCL')?.getAttribute('xmlns')).to.equal( + 'http://www.iec.ch/61850/2003/SCL' + ); + expect(parent.doc?.querySelector('SCL')?.getAttribute('version')).to.equal( + '2007' + ); + expect(parent.doc?.querySelector('SCL')?.getAttribute('revision')).to.equal( + 'B' + ); + expect(parent.doc?.querySelector('SCL')?.getAttribute('release')).to.equal( + '4' + ); + }); + + it('creates an empty Edition 2 project on wizard primary button click', async () => { + element.run(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog!.querySelector('mwc-radio-list-item:nth-child(2)') + )).click(); + await element.updateComplete; + + (( + parent.wizardUI.shadowRoot!.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + + expect(parent.doc?.querySelector('Header')).to.exist; + expect(parent.doc?.querySelector('Header')?.getAttribute('id')).to.equal( + parent.docName.slice(0, -4) + ); + expect(parent.doc?.querySelector('SCL')?.getAttribute('xmlns')).to.equal( + 'http://www.iec.ch/61850/2003/SCL' + ); + expect(parent.doc?.querySelector('SCL')?.getAttribute('version')).to.equal( + '2007' + ); + expect(parent.doc?.querySelector('SCL')?.getAttribute('revision')).to.equal( + 'B' + ); + expect(parent.doc?.querySelector('SCL')?.getAttribute('release')).to.be + .null; + }); + + it('creates an empty Edition 1 project on wizard primary button click', async () => { + element.run(); + await parent.updateComplete; + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog!.querySelector('mwc-radio-list-item:nth-child(1)') + )).click(); + await parent.updateComplete; + (( + parent.wizardUI.shadowRoot!.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + expect(parent.doc?.querySelector('Header')).to.exist; + expect(parent.doc?.querySelector('Header')?.getAttribute('id')).to.equal( + parent.docName.slice(0, -4) + ); + expect(parent.doc?.querySelector('SCL')?.getAttribute('xmlns')).to.equal( + 'http://www.iec.ch/61850/2003/SCL' + ); + expect(parent.doc?.querySelector('SCL')?.getAttribute('version')).to.be + .null; + expect(parent.doc?.querySelector('SCL')?.getAttribute('revision')).to.be + .null; + expect(parent.doc?.querySelector('SCL')?.getAttribute('release')).to.be + .null; + }); +}); diff --git a/packages/open-scd/test/integration/menu/UpdateDescritionABB.test.ts b/packages/open-scd/test/integration/menu/UpdateDescritionABB.test.ts new file mode 100644 index 0000000000..cc5a7f0dc5 --- /dev/null +++ b/packages/open-scd/test/integration/menu/UpdateDescritionABB.test.ts @@ -0,0 +1,69 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import '../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../mock-wizard-editor.js'; + +import UpdateDescriptionAbb from '../../../src/menu/UpdateDescriptionABB.js'; + +describe('Update method for desc attributes in ABB IEDs', () => { + if (customElements.get('update-description-abb') === undefined) + customElements.define('update-description-abb', UpdateDescriptionAbb); + + let parent: MockWizardEditor; + let element: UpdateDescriptionAbb; + let doc: XMLDocument; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/updatedesc/updatedescABB.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + parent = await fixture(html` + + `); + + element = ( + parent.querySelector('update-description-abb')! + ); + + element.doc = doc; + element.run(); + await parent.requestUpdate(); + }); + + it('creates desc attributes for ExtRef elements with existing intAddr attribute', async () => { + expect( + doc.querySelector( + 'IED[name="IED1"] LN[lnClass="CSWI"][inst="1"] ExtRef:not([desc])' + ) + ).to.exist; + parent.wizardUI?.dialog + ?.querySelector('mwc-button[slot="primaryAction"]')! + .click(); + await parent.updateComplete; + expect( + doc.querySelector( + 'IED[name="IED1"] LN[lnClass="CSWI"][inst="1"] ExtRef[desc="GOOSERCV_BIN.3.I1"]' + ) + ).to.exist; + }); + + it('does not create desc attributes for ExtRef elements with missing intAddr attribute', async () => { + expect( + doc.querySelector( + 'IED[name="IED1"] LN[lnClass="CSWI"][inst="2"] ExtRef:not([desc])' + ) + ).to.exist; + parent.wizardUI?.dialog + ?.querySelector('mwc-button[slot="primaryAction"]')! + .click(); + await parent.updateComplete; + expect( + doc.querySelector( + 'IED[name="IED1"] LN[lnClass="CSWI"][inst="2"] ExtRef:not([desc])' + ) + ).to.exist; + }); +}); diff --git a/packages/open-scd/test/integration/open-scd.test.ts b/packages/open-scd/test/integration/open-scd.test.ts new file mode 100644 index 0000000000..4354785629 --- /dev/null +++ b/packages/open-scd/test/integration/open-scd.test.ts @@ -0,0 +1,98 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import '../../src/open-scd.js'; +import { newEmptySCD } from '../../src/schemas.js'; +import { OpenSCD } from '../../src/open-scd.js'; + +describe('open-scd', () => { + let element: OpenSCD; + + beforeEach(async () => { + localStorage.clear(); + + element = await fixture(html` + + + + + + `); + await element.updateComplete; + }); + + it('looks like its snapshot', async () => { + await expect(element).shadowDom.to.equalSnapshot(); + }); + + it('opens the menu on navigation icon click', async () => { + const menu = element.shadowRoot!.querySelector('mwc-drawer')!; + expect(menu).property('open').to.be.false; + const menuButton = ( + element.shadowRoot!.querySelector( + 'mwc-icon-button[slot="navigationIcon"]' + ) + ); + await menuButton.click(); + expect(menu).property('open').to.be.true; + }); + + it('opens the log on log icon click', async () => { + expect(element.logUI).to.have.property('open', false); + await (( + element.shadowRoot!.querySelector('mwc-icon-button[icon="list"]')! + )).click(); + expect(element.logUI).to.have.property('open', true); + }); + + it('opens the history on history icon click', async () => { + expect(element.historyUI).to.have.property('open', false); + await (( + element.shadowRoot!.querySelector('mwc-icon-button[icon="history"]')! + )).click(); + expect(element.historyUI).to.have.property('open', true); + }); + + it('opens the log on snackbar button click', async () => { + expect(element.logUI).to.have.property('open', false); + await element.errorUI.querySelector('mwc-button')!.click(); + expect(element.logUI).to.have.property('open', true); + }); + + it('opens the diagnostics on snackbar button click', async () => { + expect(element.diagnosticUI).to.have.property('open', false); + await element.issueUI.querySelector('mwc-button')!.click(); + expect(element.diagnosticUI).to.have.property('open', true); + }); + + it('renders a progress indicator on `waiting`', async () => { + const progressBar = element.shadowRoot!.querySelector( + 'mwc-linear-progress[indeterminate]' + ); + expect(progressBar).property('closed').to.be.true; + element.waiting = true; + await element.updateComplete; + expect(progressBar).property('closed').to.be.false; + element.waiting = false; + await element.updateComplete; + expect(progressBar).property('closed').to.be.true; + }); + + it('revokes `src="blob:..."` URLs after parsing', async () => { + const emptyBlobURL = URL.createObjectURL( + new Blob( + [new XMLSerializer().serializeToString(newEmptySCD('id', '2007B'))], + { + type: 'application/xml', + } + ) + ); + expect(await fetch(emptyBlobURL)).to.be.ok; + element.setAttribute('src', emptyBlobURL); + await element.workDone; + expect(element.src).to.be.a('string').and.equal(emptyBlobURL); + expect(async () => await fetch(emptyBlobURL)).to.throw; + }); +}).timeout(4000); diff --git a/packages/open-scd/test/integration/validators/ValidateSchema.test.ts b/packages/open-scd/test/integration/validators/ValidateSchema.test.ts new file mode 100644 index 0000000000..4b2b55d546 --- /dev/null +++ b/packages/open-scd/test/integration/validators/ValidateSchema.test.ts @@ -0,0 +1,100 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import '../../mock-editor-logger.js'; +import { MockEditorLogger } from '../../mock-editor-logger.js'; + +import ValidateSchema from '../../../src/validators/ValidateSchema.js'; +import { IssueDetail, LogEntry } from '../../../src/foundation.js'; + +describe('ValidateSchema plugin', () => { + if (customElements.get('') === undefined) + customElements.define('validate-schema', ValidateSchema); + + let parent: MockEditorLogger; + let element: ValidateSchema; + + let valid2007B4: XMLDocument; + let invalid2007B: XMLDocument; + + before(async () => { + parent = await fixture(html` + + `); + + element = parent.querySelector('validate-schema')!; + element.pluginId = '/src/validators/ValidateSchema.js'; + await element.updateComplete; + }); + + describe('for valid SCL files', () => { + before(async () => { + valid2007B4 = await fetch('/test/testfiles/valid2007B.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + element.doc = valid2007B4; + element.docName = 'valid2007B'; + }); + + beforeEach(async () => { + parent.diagnoses.clear(); + await parent.updateComplete; + + await element.validate(); + await parent.updateComplete; + }); + + it('zeroissues indication looks like the latest snapshot', async () => + await expect(parent.diagnosticUI).to.equalSnapshot()); + + it('indicates successful schema validation in the diagnoses pane', async () => { + const lastEntry = ( + parent.diagnoses.get('/src/validators/ValidateSchema.js') + ); + expect(lastEntry.length).to.equal(1); + expect(lastEntry[0].title).to.contain('[validator.schema.valid]'); + }); + + it('indicates successful schema validation in the log', async () => { + const lastEntry = parent.log.pop(); + expect(lastEntry.kind).to.equal('info'); + expect(lastEntry.title).to.contain('[validator.schema.valid]'); + }); + }); + + describe('for invalid SCL files', () => { + before(async () => { + invalid2007B = await fetch('/test/testfiles/invalid2007B.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + element.doc = invalid2007B; + element.docName = 'invalid2007B'; + + await element.requestUpdate(); + }); + + beforeEach(async () => { + parent.diagnoses.clear(); + await parent.updateComplete; + + await element.validate(); + await parent.updateComplete; + }); + + it('pushes issues to the diagnostics pane that look like the latest snapshot', async () => + await expect(parent.diagnosticUI).to.equalSnapshot()); + + it('create issues in diagnose', async () => + expect(parent.diagnoses.get('/src/validators/ValidateSchema.js')).to.not + .be.undefined); + + it('generates error messages in the log', async () => { + const lastLogEntry = parent.log.pop(); + expect(lastLogEntry.kind).to.equal('warning'); + expect(lastLogEntry.title).to.contain('[validator.schema.invalid]'); + }); + }); +}); diff --git a/packages/open-scd/test/integration/validators/ValidateTemplates.test.ts b/packages/open-scd/test/integration/validators/ValidateTemplates.test.ts new file mode 100644 index 0000000000..5691663644 --- /dev/null +++ b/packages/open-scd/test/integration/validators/ValidateTemplates.test.ts @@ -0,0 +1,118 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import '../../../src/open-scd.js'; +import { OpenSCD } from '../../../src/open-scd.js'; +import ValidateTemplates from '../../../src/validators/ValidateTemplates.js'; + +describe('ValidateTemplates OpenSCD integration test ', () => { + if (customElements.get('validate-templates') === undefined) + customElements.define('validate-templates', ValidateTemplates); + + let parent: OpenSCD; + let element: ValidateTemplates; + + let doc: XMLDocument; + + describe('with a valid DataTypeTemplates section', () => { + beforeEach(async () => { + doc = await fetch('/test/testfiles/validators/zeroissues.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + parent = await fixture(html` + + + + + + `); + element = parent.querySelector('validate-templates')!; + element.pluginId = '/src/validators/ValidateTemplates.js'; + + await element.validate(); + await parent.workDone; + }); + + it('shows a "No errors" message in the diagnostics pane', async () => { + await parent.requestUpdate(); + expect(parent.diagnosticUI).to.contain.text('No errors'); + await expect(parent.diagnosticUI).to.equalSnapshot(); + }); + }); + + describe('with issues in the DataTypeTemplates section', () => { + beforeEach(async () => { + doc = await fetch('/test/testfiles/validators/datatypetemplateerrors.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + parent = await fixture(html` + + + + + + `); + element = parent.querySelector('validate-templates')!; + element.pluginId = '/src/validators/ValidateTemplates.js'; + + await element.validate(); + await parent.workDone; + }); + it('generates issues in the diagnistics pane', async () => { + const issues = parent.diagnoses.get( + '/src/validators/ValidateTemplates.js' + ); + expect(issues?.length).to.equal(28); + }).timeout(1000); + it('pushes issues to the diagnostics pane that look like the latest snapshot', async () => { + await parent.requestUpdate(); + await expect(parent.diagnosticUI).to.equalSnapshot(); + }); + }); + describe('with schema version smaller "2007B3"', () => { + beforeEach(async () => { + doc = await fetch('/test/testfiles/valid2007B.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + parent = await fixture(html` + + + + + + `); + element = parent.querySelector('validate-templates')!; + element.pluginId = '/src/validators/ValidateTemplates.js'; + + await element.validate(); + await parent.workDone; + }); + it('shows only one message in the diagnostics pane', async () => { + const issues = parent.diagnoses.get( + '/src/validators/ValidateTemplates.js' + ); + expect(issues?.length).to.equal(1); + }).timeout(1000); + it('looks like the latest snapshot', async () => { + await parent.requestUpdate(); + await expect(parent.diagnosticUI).to.equalSnapshot(); + }); + }); +}); diff --git a/packages/open-scd/test/integration/validators/__snapshots__/ValidateSchema.test.snap.js b/packages/open-scd/test/integration/validators/__snapshots__/ValidateSchema.test.snap.js new file mode 100644 index 0000000000..9a87eb7dad --- /dev/null +++ b/packages/open-scd/test/integration/validators/__snapshots__/ValidateSchema.test.snap.js @@ -0,0 +1,110 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["ValidateSchema plugin for valid SCL files zeroissues indication looks like the latest snapshot"] = +` + + + Validate Schema + +

  • +
  • + + + + [validator.schema.valid] + + + + + + + + [close] + + +`; +/* end snapshot ValidateSchema plugin for valid SCL files zeroissues indication looks like the latest snapshot */ + +snapshots["ValidateSchema plugin for invalid SCL files pushes issues to the diagnostics pane that look like the latest snapshot"] = +` + + + Validate Schema + +
  • +
  • + + + + The attribute 'name' is required but missing. + + + invalid2007B:7 Substation name (Element '{http://www.iec.ch/61850/2003/SCL}Substation') + + + + + + + Not all fields of key identity-constraint '{http://www.iec.ch/61850/2003/SCL}SubstationKey' evaluate to a node. + + + invalid2007B:7 Substation key identity-constraint '{http://www.iec.ch/61850/2003/SCL}SubstationKey' (Element '{http://www.iec.ch/61850/2003/SCL}Substation') + + + +
    + + [close] + +
    +`; +/* end snapshot ValidateSchema plugin for invalid SCL files pushes issues to the diagnostics pane that look like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/validators/__snapshots__/ValidateTemplates.test.snap.js b/packages/open-scd/test/integration/validators/__snapshots__/ValidateTemplates.test.snap.js new file mode 100644 index 0000000000..3d74c2db94 --- /dev/null +++ b/packages/open-scd/test/integration/validators/__snapshots__/ValidateTemplates.test.snap.js @@ -0,0 +1,578 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["ValidateTemplates OpenSCD integration test with a valid DataTypeTemplates section shows a \"No errors\" message in the diagnostics pane"] = +` + + + Validate Templates + +
  • +
  • + + + + No errors found in the project + + + + + +
    + + Close + +
    +`; +/* end snapshot ValidateTemplates OpenSCD integration test with a valid DataTypeTemplates section shows a "No errors" message in the diagnostics pane */ + +snapshots["ValidateTemplates OpenSCD integration test with issues in the DataTypeTemplates section pushes issues to the diagnostics pane that look like the latest snapshot"] = +` + + + Validate Templates + +
  • +
  • + + + + lnClass CSWI is missing mandatory child DO Pos + + + #Dummy.CSWI > Pos + + + + + + + lnClass CILO is missing mandatory child DO Beh + + + #Dummy.CILO > Beh + + + + + + + lnClass XSWI is missing mandatory child DO SwTyp + + + #Dummy.XSWI1 > SwTyp + + + + + + + The attribute type is required but missing in DO + + + #Dummy.invalidChild>NamPlt + + + + + + + The attribute lnClass is required but missing in LNodeType + + + #Dummy.MissingLnClass + + + + + + + DO:stVal has a invalid reference - type attribute cannot be connected to a template + + + #Dummy.LLN0.Mod>stVal + + + + + + + DO:stVal has a invalid reference - type attribute cannot be connected to a template + + + #Dummy.LLN0.Beh>stVal + + + + + + + Common Data Class ENS is missing mandatory child DA stVal + + + #Dummy.LLN0.Health + + + + + + + Common Data Class SPC is missing mandatory child DA SBO + + + #Dummy.SPC2 + + + + + + + Common Data Class SPC is missing mandatory child DA SBOw + + + #Dummy.SPC1 + + + + + + + Common Data Class SPC is missing mandatory child DA Cancel + + + #Dummy.SPC8 + + + + + + + Common Data Class SPC is missing mandatory child DA Oper + + + #Dummy.SPC3 + + + + + + + Common Data Class DPC is missing mandatory child DA t + + + #Dummy.XCBR1.Pos + + + + + + + Common Data Class DPC is missing mandatory child DA ctlModel + + + #Dummy.CSWI.Pos1 + + + + + + + The attribute cdc is incorrect in the element DOType. + + + #Dummy.XCBR1.badNamPlt + + + + + + + The attribute cdc is required but missing in DOType + + + #Dummy.MissingCDC + + + + + + + The attribute type is required but missing in DA + + + #Dummy.MissingType>SBOw + + + + + + + The attribute type is required but missing in DA + + + #Dummy.MissingType>Oper + + + + + + + The attribute type is required but missing in DA + + + #Dummy.MissingType>Cancel + + + + + + + The attribute type is required but missing in SDO + + + #Dummy.badWYE>phsA + + + + + + + DO:ctlVal has a invalid reference - type attribute cannot be connected to a template + + + #Dummy.LLN0.Mod.SBOw>ctlVal + + + + + + + DO:ctlVal has a invalid reference - type attribute cannot be connected to a template + + + #Dummy.LLN0.Mod.Cancel>ctlVal + + + + + + + DAType Dummy.Operfalse is missing mandatory child BDA ctlNum + + + #Dummy.Operfalse + + + + + + + DAType Dummy.SBOwfalse is missing mandatory child BDA origin + + + #Dummy.SBOwfalse + + + + + + + DAType Dummy.Cancelfalse is missing mandatory child BDA ctlVal + + + #Dummy.Cancelfalse + + + + + + + DAType Dummy.ScaledValueConfig is missing mandatory child BDA scaleFactor + + + #Dummy.ScaledValueConfig + + + + + + + DO:SIUnit has a invalid reference - type attribute cannot be connected to a template + + + #Dummy.unit>SIUnit + + + + + + + DO:multiplier has a invalid reference - type attribute cannot be connected to a template + + + #Dummy.unit>multiplier + + + +
    + + Close + +
    +`; +/* end snapshot ValidateTemplates OpenSCD integration test with issues in the DataTypeTemplates section pushes issues to the diagnostics pane that look like the latest snapshot */ + +snapshots["ValidateTemplates OpenSCD integration test with schema version smaller \"2007B3\" looks like the latest snapshot"] = +` + + + Validate Templates + +
  • +
  • + + + + Cannot validate DataTypeTemplates. The version of the project must be higher than or equal to 2007B3 + + + + + +
    + + Close + +
    +`; +/* end snapshot ValidateTemplates OpenSCD integration test with schema version smaller "2007B3" looks like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/wizards/__snapshots__/bda-wizarding-editing.test.snap.js b/packages/open-scd/test/integration/wizards/__snapshots__/bda-wizarding-editing.test.snap.js new file mode 100644 index 0000000000..aad0783d3d --- /dev/null +++ b/packages/open-scd/test/integration/wizards/__snapshots__/bda-wizarding-editing.test.snap.js @@ -0,0 +1,1222 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["BDA wizarding editing integration defines a editBDaWizard to edit an existing BDA looks like the latest snapshot"] = +` + +
    + + > + + + + + + BOOLEAN + + + INT8 + + + INT16 + + + INT24 + + + INT32 + + + INT64 + + + INT128 + + + INT8U + + + INT16U + + + INT24U + + + INT32U + + + FLOAT32 + + + FLOAT64 + + + Enum + + + Dbpos + + + Tcmd + + + Quality + + + Timestamp + + + VisString32 + + + VisString64 + + + VisString65 + + + VisString129 + + + VisString255 + + + Octet64 + + + Unicode255 + + + Struct + + + EntryTime + + + Check + + + ObjRef + + + Currency + + + PhyComAddr + + + TrgOps + + + OptFlds + + + SvOptFlds + + + LogOptFlds + + + EntryID + + + Octet6 + + + Octet16 + + + + + + + + + + Dummy_ctlModel + + + Dummy_Beh + + + Dummy_Health + + + Dummy_orCategory + + + + + + + Spec + + + Conf + + + RO + + + Set + + + + + + + on + + + blocked + + + test + + + test/blocked + + + off + + + + +
    + + + + +
    +`; +/* end snapshot BDA wizarding editing integration defines a editBDaWizard to edit an existing BDA looks like the latest snapshot */ + +snapshots["BDA wizarding editing integration defines a createBDaWizard to create a new BDA element looks like the latest snapshot"] = +` +
    + + > + + + + + + BOOLEAN + + + INT8 + + + INT16 + + + INT24 + + + INT32 + + + INT64 + + + INT128 + + + INT8U + + + INT16U + + + INT24U + + + INT32U + + + FLOAT32 + + + FLOAT64 + + + Enum + + + Dbpos + + + Tcmd + + + Quality + + + Timestamp + + + VisString32 + + + VisString64 + + + VisString65 + + + VisString129 + + + VisString255 + + + Octet64 + + + Unicode255 + + + Struct + + + EntryTime + + + Check + + + ObjRef + + + Currency + + + PhyComAddr + + + TrgOps + + + OptFlds + + + SvOptFlds + + + LogOptFlds + + + EntryID + + + Octet6 + + + Octet16 + + + + + Dummy_origin + + + Dummy.LLN0.Mod.SBOw + + + Dummy.LLN0.Mod.Cancel + + + Dummy.LPHD1.Sim.SBOw + + + Dummy.LPHD1.Sim.Cancel + + + Dummy_ctlModel + + + Dummy_Beh + + + Dummy_Health + + + Dummy_orCategory + + + + + + + Spec + + + Conf + + + RO + + + Set + + + + + + + + +
    + + + + +
    +`; +/* end snapshot BDA wizarding editing integration defines a createBDaWizard to create a new BDA element looks like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/wizards/__snapshots__/da-wizarding-editing.test.snap.js b/packages/open-scd/test/integration/wizards/__snapshots__/da-wizarding-editing.test.snap.js new file mode 100644 index 0000000000..9047d8601c --- /dev/null +++ b/packages/open-scd/test/integration/wizards/__snapshots__/da-wizarding-editing.test.snap.js @@ -0,0 +1,1593 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["DA wizarding editing integration defines a editDaWizard to edit an existing DA looks like the latest snapshot"] = +` + +
    + + > + + + + + + BOOLEAN + + + INT8 + + + INT16 + + + INT24 + + + INT32 + + + INT64 + + + INT128 + + + INT8U + + + INT16U + + + INT24U + + + INT32U + + + FLOAT32 + + + FLOAT64 + + + Enum + + + Dbpos + + + Tcmd + + + Quality + + + Timestamp + + + VisString32 + + + VisString64 + + + VisString65 + + + VisString129 + + + VisString255 + + + Octet64 + + + Unicode255 + + + Struct + + + EntryTime + + + Check + + + ObjRef + + + Currency + + + PhyComAddr + + + TrgOps + + + OptFlds + + + SvOptFlds + + + LogOptFlds + + + EntryID + + + Octet6 + + + Octet16 + + + + + + + + + + + + Dummy_ctlModel + + + Dummy_Beh + + + Dummy_Health + + + Dummy_orCategory + + + Dummy.SIUnitsKind + + + Dummy.MultiplierKind + + + + + + + Spec + + + Conf + + + RO + + + Set + + + + + + + on + + + blocked + + + test + + + test/blocked + + + off + + + + + + + ST + + + MX + + + SP + + + SV + + + CF + + + DC + + + SG + + + SE + + + SR + + + OR + + + BL + + + EX + + + CO + + + + + + + + +
    + + + + +
    +`; +/* end snapshot DA wizarding editing integration defines a editDaWizard to edit an existing DA looks like the latest snapshot */ + +snapshots["DA wizarding editing integration defines a createDaWizard to create a new DA element looks like the latest snapshot"] = +` +
    + + > + + + + + + BOOLEAN + + + INT8 + + + INT16 + + + INT24 + + + INT32 + + + INT64 + + + INT128 + + + INT8U + + + INT16U + + + INT24U + + + INT32U + + + FLOAT32 + + + FLOAT64 + + + Enum + + + Dbpos + + + Tcmd + + + Quality + + + Timestamp + + + VisString32 + + + VisString64 + + + VisString65 + + + VisString129 + + + VisString255 + + + Octet64 + + + Unicode255 + + + Struct + + + EntryTime + + + Check + + + ObjRef + + + Currency + + + PhyComAddr + + + TrgOps + + + OptFlds + + + SvOptFlds + + + LogOptFlds + + + EntryID + + + Octet6 + + + Octet16 + + + + + Dummy_origin + + + Dummy.LLN0.Mod.SBOw + + + Dummy.LLN0.Mod.Cancel + + + Dummy.LPHD1.Sim.SBOw + + + Dummy.LPHD1.Sim.Cancel + + + Dummy.Vector + + + Dummy.Units + + + Dummy_ctlModel + + + Dummy_Beh + + + Dummy_Health + + + Dummy_orCategory + + + Dummy.SIUnitsKind + + + Dummy.MultiplierKind + + + + + + + Spec + + + Conf + + + RO + + + Set + + + + + + + + + + + ST + + + MX + + + SP + + + SV + + + CF + + + DC + + + SG + + + SE + + + SR + + + OR + + + BL + + + EX + + + CO + + + + + + + + +
    + + + + +
    +`; +/* end snapshot DA wizarding editing integration defines a createDaWizard to create a new DA element looks like the latest snapshot */ + diff --git a/packages/open-scd/test/integration/wizards/__snapshots__/services-wizard.test.snap.js b/packages/open-scd/test/integration/wizards/__snapshots__/services-wizard.test.snap.js new file mode 100644 index 0000000000..439d2a78f8 --- /dev/null +++ b/packages/open-scd/test/integration/wizards/__snapshots__/services-wizard.test.snap.js @@ -0,0 +1,1658 @@ +/* @web/test-runner snapshot v1 */ +export const snapshots = {}; + +snapshots["Wizards for SCL element Services define a Services wizards Wizard 1 should look like snapshot"] = +` +
    + + + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + + + + + + + + + + + + +
    + + + + +
    +`; +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 1 should look like snapshot */ + +snapshots["Wizards for SCL element Services define a Services wizards Wizard 2 should look like snapshot"] = +` +
    + + + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + + + + + + + + + unbuffered + + + buffered + + + both + + + + + + + + + + + + + + + + + + + + +
    + + + + + + +
    +`; +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 2 should look like snapshot */ + +snapshots["Wizards for SCL element Services define a Services wizards Wizard 3 should look like snapshot"] = +` +
    + + + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + +
    +`; +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 3 should look like snapshot */ + +snapshots["Wizards for SCL element Services define a Services wizards Wizard 4 should look like snapshot"] = +` +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + +
    +`; +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 4 should look like snapshot */ + +snapshots["Wizards for SCL element Services define a Services wizards Wizard 5 should look like snapshot"] = +` +
    + + + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Conf + + + Fix + + + + + + + + + + + + + + + + + + + + + + + + + + + unicast + + + multicast + + + both + + + + + + + + + + + + + + + + + + + + +
    + + + + + + +
    +`; +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 5 should look like snapshot */ + +snapshots["Wizards for SCL element Services define a Services wizards Wizard 6 should look like snapshot"] = +` +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    +`; +/* end snapshot Wizards for SCL element Services define a Services wizards Wizard 6 should look like snapshot */ + +snapshots["Wizards for SCL element Services AccessPoint wizards for Scl element Services should look like snapshot"] = +` +
    + + + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + Dyn + + + Conf + + + Fix + + + + + + + + + + + + + + + + +
    + + + + +
    +`; +/* end snapshot Wizards for SCL element Services AccessPoint wizards for Scl element Services should look like snapshot */ + diff --git a/packages/open-scd/test/integration/wizards/bda-wizarding-editing.test.ts b/packages/open-scd/test/integration/wizards/bda-wizarding-editing.test.ts new file mode 100644 index 0000000000..4032c96ada --- /dev/null +++ b/packages/open-scd/test/integration/wizards/bda-wizarding-editing.test.ts @@ -0,0 +1,226 @@ +import { html, fixture, expect } from '@open-wc/testing'; + +import '../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../mock-wizard-editor.js'; + +import { ListItem } from '@material/mwc-list/mwc-list-item'; +import { ListItemBase } from '@material/mwc-list/mwc-list-item-base'; + +import { FilteredList } from '../../../src/filtered-list.js'; +import { WizardSelect } from '../../../src/wizard-select.js'; +import { WizardTextField } from '../../../src/wizard-textfield.js'; +import TemplatesPlugin from '../../../src/editors/Templates.js'; +import { WizardCheckbox } from '../../../src/wizard-checkbox.js'; + +describe('BDA wizarding editing integration', () => { + if (customElements.get('templates-editor') === undefined) + customElements.define('templates-editor', TemplatesPlugin); + let doc: Document; + let parent: MockWizardEditor; + let templates: TemplatesPlugin; + let dATypeList: FilteredList; + + beforeEach(async () => { + parent = await fixture( + html`` + ); + + templates = parent.querySelector('templates-editor')!; + + doc = await fetch('/test/testfiles/templates/datypes.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + templates.doc = doc; + await templates.updateComplete; + dATypeList = ( + templates.shadowRoot?.querySelector('filtered-list[id="datypelist"]') + ); + }); + + describe('defines a editBDaWizard to edit an existing BDA', () => { + let nameField: WizardTextField; + let primayAction: HTMLElement; + let deleteButton: HTMLElement; + + beforeEach(async () => { + (( + dATypeList.querySelector('mwc-list-item[value="#Dummy.LLN0.Mod.SBOw"]') + )).click(); + await parent.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI?.dialog?.querySelector( + 'mwc-list-item[value="#Dummy.LLN0.Mod.SBOw>ctlVal"]' + ) + )).click(); + await parent.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + nameField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="name"]') + ); + primayAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + deleteButton = ( + Array.from( + parent.wizardUI.dialog!.querySelectorAll( + 'mwc-menu > mwc-list-item' + ) + ).find(item => item.innerHTML.includes('[remove]')) + ); + }); + + it('looks like the latest snapshot', async () => { + await expect(parent.wizardUI.dialog).to.equalSnapshot(); + }); + + it('edits BDA element', async () => { + expect( + doc.querySelector( + 'DAType[id="Dummy.LLN0.Mod.SBOw"] > BDA[name="ctlVal"]' + ) + ).to.exist; + nameField.value = 'newCtlVal'; + await parent.requestUpdate(); + primayAction.click(); + await parent.requestUpdate(); + expect( + doc.querySelector( + 'DAType[id="Dummy.LLN0.Mod.SBOw"] > BDA[name="ctlVal"]' + ) + ).to.not.exist; + expect( + doc.querySelector( + 'DAType[id="Dummy.LLN0.Mod.SBOw"] > BDA[name="newCtlVal"]' + ) + ).to.exist; + }); + + it('deletes the BDA element on delete button click', async () => { + expect( + doc.querySelector( + 'DAType[id="Dummy.LLN0.Mod.SBOw"] > BDA[name="ctlVal"]' + ) + ).to.exist; + expect( + doc.querySelectorAll('DAType[id="Dummy.LLN0.Mod.SBOw"] > BDA').length + ).to.equal(6); + deleteButton.click(); + await parent.requestUpdate(); + expect( + doc.querySelector( + 'DAType[id="Dummy.LLN0.Mod.SBOw"] > BDA[name="ctlVal"]' + ) + ).to.not.exist; + expect( + doc.querySelectorAll('DAType[id="Dummy.LLN0.Mod.SBOw"] > BDA').length + ).to.equal(5); + }); + }); + + describe('defines a createBDaWizard to create a new BDA element', () => { + let nameField: WizardTextField; + let descField: WizardTextField; + let sAddrField: WizardTextField; + let bTypeSelect: WizardSelect; + let valKindSelect: WizardSelect; + let valImportSelect: WizardCheckbox; + let primayAction: HTMLElement; + + beforeEach(async () => { + (( + dATypeList.querySelector('mwc-list-item[value="#Dummy.LLN0.Mod.SBOw"]') + )).click(); + await parent.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI.dialog?.querySelectorAll('mwc-menu > mwc-list-item')[1] + )).click(); + await parent.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + nameField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="name"]') + ); + descField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="desc"]') + ); + sAddrField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="sAddr"]') + ); + bTypeSelect = ( + parent.wizardUI.dialog?.querySelector('wizard-select[label="bType"]') + ); + valKindSelect = ( + parent.wizardUI.dialog?.querySelector('wizard-select[label="valKind"]') + ); + valImportSelect = ( + parent.wizardUI.dialog?.querySelector( + 'wizard-checkbox[label="valImport"]' + ) + ); + primayAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + }); + + it('looks like the latest snapshot', async () => { + await expect(parent.wizardUI.dialog).to.equalSnapshot(); + }); + it('creates a new BDA element', async () => { + expect( + doc.querySelector( + 'DAType[id="Dummy.LLN0.Mod.SBOw"] > BDA[name="newBDAElement"]' + ) + ).to.not.exist; + nameField.value = 'newBDAElement'; + await parent.requestUpdate(); + bTypeSelect.value = 'BOOLEAN'; + await parent.requestUpdate(); + primayAction.click(); + await parent.requestUpdate(); + expect( + doc.querySelector( + 'DAType[id="Dummy.LLN0.Mod.SBOw"] > BDA[name="newBDAElement"]:not([desc]):not([sAddr])[bType="BOOLEAN"]:not([valKind]):not([valImport])' + ) + ).to.exist; + }); + it('creates yet another new BDA element', async () => { + const name = 'newBDAElement2'; + const desc = 'newBDAdesc'; + const sAddr = 'myNewAddr'; + expect( + doc.querySelector( + 'DAType[id="Dummy.LLN0.Mod.SBOw"] > BDA[name="newBDAElement2"]' + ) + ).to.not.exist; + nameField.value = name; + descField.nullable = false; + descField.value = desc; + sAddrField.nullable = false; + sAddrField.value = sAddr; + bTypeSelect.value = 'BOOLEAN'; + valKindSelect.nullable = false; + valKindSelect.value = 'RO'; + valImportSelect.nullable = false; + valImportSelect.maybeValue = 'true'; + + await parent.requestUpdate(); + primayAction.click(); + await parent.requestUpdate(); + expect( + doc.querySelector( + `DAType[id="Dummy.LLN0.Mod.SBOw"] >` + + `BDA[name="${name}"][desc="${desc}"][sAddr="${sAddr}"][bType="BOOLEAN"]:not([type])[valKind="RO"][valImport="true"]` + ) + ).to.exist; + }); + }); +}); diff --git a/packages/open-scd/test/integration/wizards/connectedap-wizarding-editing-integration.test.ts b/packages/open-scd/test/integration/wizards/connectedap-wizarding-editing-integration.test.ts new file mode 100644 index 0000000000..8bb271d6a3 --- /dev/null +++ b/packages/open-scd/test/integration/wizards/connectedap-wizarding-editing-integration.test.ts @@ -0,0 +1,51 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import '../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../mock-wizard-editor.js'; + +import { editConnectedApWizard } from '../../../src/wizards/connectedap.js'; + +describe('connectedap wizarding editing integration', () => { + let doc: XMLDocument; + let element: MockWizardEditor; + + beforeEach(async () => { + element = await fixture(html``); + doc = await fetch('/test/testfiles/valid2003.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + }); + + it('does not inherit the VLAN-ID and VLAN-PRIORITY of a child Address element', async () => { + const parser = new DOMParser(); + const newGSE = ` + +
    +

    01-0C-CD-01-00-10

    +

    005

    +

    4

    +

    0010

    +
    +
    + `; + const connectedAP = doc.querySelector('ConnectedAP[iedName="IED1"]')!; + connectedAP.appendChild( + parser.parseFromString(newGSE, 'application/xml').documentElement + ); + + const wizard = editConnectedApWizard(connectedAP); + element.workflow.push(() => wizard); + await element.requestUpdate(); + await element.updateComplete; + + const vlanId = element.wizardUI.shadowRoot!.querySelector( + 'wizard-textfield[label="VLAN-ID"]' + )!; + const vlanPriority = element.wizardUI.shadowRoot!.querySelector( + 'wizard-textfield[label="VLAN-PRIORITY"]' + )!; + + expect(vlanId.hasAttribute('disabled')).to.be.true; + expect(vlanPriority.hasAttribute('disabled')).to.be.true; + }); +}); diff --git a/packages/open-scd/test/integration/wizards/da-wizarding-editing.test.ts b/packages/open-scd/test/integration/wizards/da-wizarding-editing.test.ts new file mode 100644 index 0000000000..473b7a69e0 --- /dev/null +++ b/packages/open-scd/test/integration/wizards/da-wizarding-editing.test.ts @@ -0,0 +1,251 @@ +import { html, fixture, expect } from '@open-wc/testing'; + +import '../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../mock-wizard-editor.js'; + +import { ListItemBase } from '@material/mwc-list/mwc-list-item-base'; + +import { FilteredList } from '../../../src/filtered-list.js'; +import { ListItem } from '@material/mwc-list/mwc-list-item'; +import TemplatesPlugin from '../../../src/editors/Templates.js'; +import { WizardSelect } from '../../../src/wizard-select.js'; +import { WizardTextField } from '../../../src/wizard-textfield.js'; +import { WizardCheckbox } from '../../../src/wizard-checkbox.js'; + +describe('DA wizarding editing integration', () => { + if (customElements.get('templates-editor') === undefined) + customElements.define('templates-editor', TemplatesPlugin); + let doc: Document; + let parent: MockWizardEditor; + let templates: TemplatesPlugin; + let dOTypeList: FilteredList; + + beforeEach(async () => { + parent = await fixture( + html`` + ); + + templates = parent.querySelector('templates-editor')!; + + doc = await fetch('/test/testfiles/templates/dotypes.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + templates.doc = doc; + await templates.updateComplete; + dOTypeList = ( + templates.shadowRoot?.querySelector('filtered-list[id="dotypelist"]') + ); + }); + + describe('defines a editDaWizard to edit an existing DA', () => { + let nameField: WizardTextField; + let primayAction: HTMLElement; + let deleteButton: HTMLElement; + + beforeEach(async () => { + (( + dOTypeList.querySelector('mwc-list-item[value="#Dummy.LLN0.Mod"]') + )).click(); + await parent.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + (( + parent.wizardUI?.dialog?.querySelector( + 'mwc-list-item[value="#Dummy.LLN0.Mod>stVal"]' + ) + )).click(); + await parent.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + nameField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="name"]') + ); + primayAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + deleteButton = ( + Array.from( + parent.wizardUI.dialog!.querySelectorAll( + 'mwc-menu > mwc-list-item' + ) + ).find(item => item.innerHTML.includes('[remove]')) + ); + }); + + it('looks like the latest snapshot', async () => { + await expect(parent.wizardUI.dialog).to.equalSnapshot(); + }); + + it('edits DA attributes name', async () => { + expect( + doc.querySelector('DOType[id="Dummy.LLN0.Mod"] > DA[name="stVal"]') + ).to.exist; + nameField.value = 'newCtlVal'; + + await parent.requestUpdate(); + primayAction.click(); + await parent.requestUpdate(); + + expect( + doc.querySelector('DOType[id="Dummy.LLN0.Mod"] > DA[name="stVal"]') + ).to.not.exist; + expect( + doc.querySelector('DOType[id="Dummy.LLN0.Mod"] > DA[name="newCtlVal"]') + ).to.exist; + }); + + it('deletes the DA element on delete button click', async () => { + expect( + doc.querySelector('DOType[id="Dummy.LLN0.Mod"] > DA[name="stVal"]') + ).to.exist; + expect( + doc.querySelectorAll('DOType[id="Dummy.LLN0.Mod"] > DA').length + ).to.equal(14); + + deleteButton.click(); + await parent.requestUpdate(); + + expect( + doc.querySelector('DOType[id="Dummy.LLN0.Mod"] > DA[name="stVal"]') + ).to.not.exist; + expect( + doc.querySelectorAll('DOType[id="Dummy.LLN0.Mod"] > DA').length + ).to.equal(13); + }); + + it('does not edit DA element without changes', async () => { + const originData = (( + doc.querySelector('DOType[id="Dummy.LLN0.Mod"] > DA[name="stVal"]') + )).cloneNode(true); + + primayAction.click(); + await parent.requestUpdate(); + + expect( + originData.isEqualNode( + doc.querySelector('DOType[id="Dummy.LLN0.Mod"] > DA[name="stVal"]') + ) + ).to.be.true; + }); + }); + + describe('defines a createDaWizard to create a new DA element', () => { + let nameField: WizardTextField; + let descField: WizardTextField; + let sAddrField: WizardTextField; + let bTypeSelect: WizardSelect; + let valKindSelect: WizardSelect; + let valImportSelect: WizardCheckbox; + let fcSelect: WizardSelect; + let primayAction: HTMLElement; + + beforeEach(async () => { + (( + dOTypeList.querySelector('mwc-list-item[value="#Dummy.LLN0.Mod"]') + )).click(); + await parent.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + (( + Array.from( + parent.wizardUI.dialog!.querySelectorAll( + 'mwc-menu > mwc-list-item' + ) + ).find(item => item.innerHTML.includes('[scl.DA]')) + )).click(); + + await parent.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + nameField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="name"]') + ); + descField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="desc"]') + ); + sAddrField = ( + parent.wizardUI.dialog?.querySelector('wizard-textfield[label="sAddr"]') + ); + bTypeSelect = ( + parent.wizardUI.dialog?.querySelector('wizard-select[label="bType"]') + ); + valKindSelect = ( + parent.wizardUI.dialog?.querySelector('wizard-select[label="valKind"]') + ); + valImportSelect = ( + parent.wizardUI.dialog?.querySelector( + 'wizard-checkbox[label="valImport"]' + ) + ); + fcSelect = ( + parent.wizardUI.dialog?.querySelector('wizard-select[label="fc"]') + ); + primayAction = ( + parent.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + }); + + it('looks like the latest snapshot', async () => { + await expect(parent.wizardUI.dialog).to.equalSnapshot(); + }); + it('creates a new DA element', async () => { + expect( + doc.querySelector( + 'DOType[id="Dummy.LLN0.Mod"] > DA[name="newDAElement"]' + ) + ).to.not.exist; + nameField.value = 'newDAElement'; + fcSelect.value = 'ST'; + bTypeSelect.value = 'Struct'; + + await parent.requestUpdate(); + primayAction.click(); + await parent.requestUpdate(); + expect( + doc.querySelector( + 'DOType[id="Dummy.LLN0.Mod"] > ' + + 'DA[name="newDAElement"]:not([desc]):not([sAddr])[bType="Struct"]' + + '[type="Dummy_origin"]:not([valKind]):not([valImport])' + ) + ).to.exist; + }); + it('creates yet another new DA element', async () => { + const name = 'newDAElement2'; + const desc = 'newDAdesc'; + const sAddr = 'myNewAddr'; + + expect( + doc.querySelector( + 'DAType[id="#Dummy.LLN0.Mod"] > DA[name="newDAElement2"]' + ) + ).to.not.exist; + nameField.value = name; + descField.nullable = false; + descField.value = desc; + sAddrField.nullable = false; + sAddrField.value = sAddr; + bTypeSelect.value = 'BOOLEAN'; + valKindSelect.nullable = false; + valKindSelect.value = 'RO'; + valImportSelect.nullable = false; + valImportSelect.maybeValue = 'true'; + fcSelect.value = 'ST'; + + await parent.requestUpdate(); + primayAction.click(); + await parent.requestUpdate(); + expect( + doc.querySelector( + `DOType[id="Dummy.LLN0.Mod"] >` + + `DA[name="${name}"][desc="${desc}"][sAddr="${sAddr}"][bType="BOOLEAN"]` + + `:not([type])[valKind="RO"][valImport="true"]` + ) + ).to.exist; + }); + }); +}); diff --git a/packages/open-scd/test/integration/wizards/dataset-wizarding-editing-integration.test.ts b/packages/open-scd/test/integration/wizards/dataset-wizarding-editing-integration.test.ts new file mode 100644 index 0000000000..ad8e61fa36 --- /dev/null +++ b/packages/open-scd/test/integration/wizards/dataset-wizarding-editing-integration.test.ts @@ -0,0 +1,52 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import '../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../mock-wizard-editor.js'; + +import { WizardTextField } from '../../../src/wizard-textfield.js'; +import { editDataSetWizard } from '../../../src/wizards/dataset.js'; + +describe('dataset wizards', () => { + let doc: XMLDocument; + let element: MockWizardEditor; + + beforeEach(async () => { + element = await fixture(html``); + doc = await fetch('/test/testfiles/wizards/gsecontrol.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + }); + + describe('editDataSetWizard', () => { + let primaryAction: HTMLElement; + let nameField: WizardTextField; + + beforeEach(async () => { + const wizard = editDataSetWizard( + doc.querySelector('IED[name="IED2"] DataSet[name="GooseDataSet1"]')! + ); + element.workflow.push(() => wizard); + await element.requestUpdate(); + primaryAction = ( + element.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + nameField = element.wizardUI.dialog!.querySelector( + 'wizard-textfield[label="name"]' + )!; + await nameField.updateComplete; + }); + + it('allows to change data set attributes', () => { + expect( + doc.querySelector('IED[name="IED2"] DataSet[name="myNewDataSet"]') + ); + nameField.value = 'myNewDataSetName'; + primaryAction.click(); + expect( + doc.querySelector('IED[name="IED2"] DataSet[name="myNewDataSetName"]') + ); + }); + }); +}); diff --git a/packages/open-scd/test/integration/wizards/fcda-wizarding-editing-integration.test.ts b/packages/open-scd/test/integration/wizards/fcda-wizarding-editing-integration.test.ts new file mode 100644 index 0000000000..d7b7161c5b --- /dev/null +++ b/packages/open-scd/test/integration/wizards/fcda-wizarding-editing-integration.test.ts @@ -0,0 +1,97 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import '../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../mock-wizard-editor.js'; + +import { createFCDAsWizard } from '../../../src/wizards/fcda.js'; +import { FinderList } from '../../../src/finder-list.js'; + +describe('FCDA editing wizarding integration', () => { + let doc: XMLDocument; + let element: MockWizardEditor; + let finder: FinderList; + let primaryAction: HTMLElement; + + beforeEach(async () => { + element = await fixture(html``); + doc = await fetch('/test/testfiles/wizards/fcda.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + const wizard = createFCDAsWizard(doc.querySelector('DataSet')!); + element.workflow.push(() => wizard!); + await element.requestUpdate(); + + finder = element.wizardUI.dialog!.querySelector('finder-list')!; + primaryAction = ( + element.wizardUI.dialog?.querySelector('mwc-button[slot="primaryAction"]') + ); + }); + + describe('with a specific path', () => { + const path = [ + 'Server: IED1>P1', + 'LDevice: IED1>>CircuitBreaker_CB1', + 'LN0: IED1>>CircuitBreaker_CB1', + 'DO: #Dummy.LLN0>Beh', + 'DA: #Dummy.LLN0.Beh>stVal', + ]; + + beforeEach(async () => { + finder.paths = [path]; + await element.requestUpdate(); + }); + + it('adds a new FCDA on primary action', async () => { + expect( + doc.querySelector( + 'DataSet > FCDA[ldInst="CircuitBreaker_CB1"]' + + '[prefix=""][lnClass="LLN0"]:not(lnInst)[doName="Beh"][daName="stVal"][fc="ST"]' + ) + ).to.not.exist; + await primaryAction.click(); + expect( + doc.querySelector( + 'DataSet > FCDA[ldInst="CircuitBreaker_CB1"]' + + '[prefix=""][lnClass="LLN0"]:not(lnInst)[doName="Beh"][daName="stVal"][fc="ST"]' + ) + ).to.exist; + }); + }); + + describe('with a more complex path including SDOs and BDAs', () => { + const path = [ + 'Server: IED1>P1', + 'LDevice: IED1>>Meas', + 'LN: IED1>>Meas>My MMXU 1', + 'DO: #Dummy.MMXU>A', + 'SDO: #OpenSCD_WYE_phases>phsA', + 'DA: #OpenSCD_CMV_db_i_MagAndAng>cVal', + 'BDA: #OpenSCD_Vector_I_w_Ang>mag', + 'BDA: #OpenSCD_AnalogueValue_INT32>i', + ]; + + beforeEach(async () => { + finder.paths = [path]; + await element.requestUpdate(); + }); + + it('adds a new FCDA on primary action', async () => { + expect( + doc.querySelector( + 'DataSet > FCDA[ldInst="Meas"]' + + '[prefix="My"][lnClass="MMXU"][lnInst="1"]' + + '[doName="A.phsA"][daName="cVal.mag.i"][fc="MX"]' + ) + ).to.not.exist; + await primaryAction.click(); + expect( + doc.querySelector( + 'DataSet > FCDA[ldInst="Meas"]' + + '[prefix="My"][lnClass="MMXU"][lnInst="1"]' + + '[doName="A.phsA"][daName="cVal.mag.i"][fc="MX"]' + ) + ).to.exist; + }); + }); +}); diff --git a/packages/open-scd/test/integration/wizards/gse-wizarding-editing-integration.test.ts b/packages/open-scd/test/integration/wizards/gse-wizarding-editing-integration.test.ts new file mode 100644 index 0000000000..71a9bd1cea --- /dev/null +++ b/packages/open-scd/test/integration/wizards/gse-wizarding-editing-integration.test.ts @@ -0,0 +1,61 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import '../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../mock-wizard-editor.js'; + +import { editGseWizard } from '../../../src/wizards/gse.js'; +import { WizardTextField } from '../../../src/wizard-textfield.js'; + +describe('gse wizarding editing integration', () => { + let doc: XMLDocument; + let element: MockWizardEditor; + + beforeEach(async () => { + element = await fixture(html``); + doc = await fetch('/test/testfiles/wizards/gsecontrol.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + }); + + describe('editGseWizard', () => { + let primaryAction: HTMLElement; + let minTimeField: WizardTextField; + + beforeEach(async () => { + const wizard = editGseWizard( + doc.querySelector('GSE[ldInst="CircuitBreaker_CB1"][cbName="GCB"]')! + ); + element.workflow.push(() => wizard); + await element.requestUpdate(); + primaryAction = ( + element.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + minTimeField = element.wizardUI.dialog!.querySelector( + 'wizard-textfield[label="MinTime"]' + )!; + await minTimeField.updateComplete; + }); + + it('allows to edit GSE attributes', async () => { + expect( + doc + .querySelector( + 'GSE[ldInst="CircuitBreaker_CB1"][cbName="GCB"] > MinTime' + ) + ?.textContent?.trim() + ).to.equal('10'); + minTimeField.value = '56'; + primaryAction.click(); + await element.updateComplete; + expect( + doc + .querySelector( + 'GSE[ldInst="CircuitBreaker_CB1"][cbName="GCB"] > MinTime' + ) + ?.textContent?.trim() + ).to.equal('56'); + }); + }); +}); diff --git a/packages/open-scd/test/integration/wizards/gsecontrolwizarding-editing.test.ts b/packages/open-scd/test/integration/wizards/gsecontrolwizarding-editing.test.ts new file mode 100644 index 0000000000..e32a33c082 --- /dev/null +++ b/packages/open-scd/test/integration/wizards/gsecontrolwizarding-editing.test.ts @@ -0,0 +1,354 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import '../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../mock-wizard-editor.js'; + +import { ListItemBase } from '@material/mwc-list/mwc-list-item-base'; + +import { + editGseControlWizard, + selectGseControlWizard, +} from '../../../src/wizards/gsecontrol.js'; +import { FilteredList } from '../../../src/filtered-list.js'; +import { WizardTextField } from '../../../src/wizard-textfield.js'; +import { FinderList } from '../../../src/finder-list.js'; + +describe('Wizards for SCL element GSEControl', () => { + let doc: XMLDocument; + let element: MockWizardEditor; + + beforeEach(async () => { + element = await fixture(html``); + doc = await fetch('/test/testfiles/wizards/gsecontrol.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + }); + + describe('define a select wizards that', () => { + let gseControlList: FilteredList; + + describe('with the document element as input', () => { + beforeEach(async () => { + const wizard = selectGseControlWizard(doc.documentElement); + element.workflow.push(() => wizard); + await element.requestUpdate(); + gseControlList = ( + element.wizardUI.dialog?.querySelector('filtered-list') + ); + await gseControlList.updateComplete; + }); + + it('shows all GSEControl within the SCL', () => + expect(gseControlList.items.length).to.equal( + doc.querySelectorAll('GSEControl').length + )); + + it('opens edit wizard for selected GSEControl on filtered-list item click', async () => { + const gse2 = gseControlList.items[1]; + await gse2.updateComplete; + gse2.click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + await element.wizardUI.dialog?.updateComplete; + + const nameField = ( + element.wizardUI.dialog?.querySelector( + 'wizard-textfield[label="name"]' + ) + ); + await nameField.updateComplete; + + expect(nameField.value).to.equal( + doc.querySelectorAll('GSEControl')[1].getAttribute('name') + ); + }); + + describe('has an add GSEControl primary button that', () => { + let iEDPicker: FinderList; + + beforeEach(async () => { + (( + element.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + await new Promise(resolve => setTimeout(resolve, 50)); // await animation + + iEDPicker = ( + element.wizardUI.dialog?.querySelector('finder-list') + ); + }); + + it('opens a potential list of host IEDs for the ReportControl element', async () => + expect(iEDPicker).to.exist); + }); + }); + + describe('with a specific IED as input', () => { + beforeEach(async () => { + const wizard = selectGseControlWizard(doc.querySelector('IED')!); + element.workflow.push(() => wizard); + await element.requestUpdate(); + + gseControlList = ( + element.wizardUI.dialog?.querySelector('filtered-list') + ); + await gseControlList.updateComplete; + }); + + it('allows to filter ReportControl elements per IED', async () => + expect(gseControlList.items.length).to.equal( + doc.querySelector('IED')!.querySelectorAll('GSEControl').length + )); + + it('opens edit wizard for selected ReportControl element on click', async () => { + const reportItem = gseControlList.items[1]; + reportItem.click(); + await new Promise(resolve => setTimeout(resolve, 20)); // await animation + + const nameField = ( + element.wizardUI.dialog?.querySelector( + 'wizard-textfield[label="name"]' + ) + ); + await nameField.requestUpdate(); + + expect(nameField.value).to.equal( + doc.querySelectorAll('GSEControl')[1].getAttribute('name') + ); + }); + + describe('has an add Report primary button that', () => { + it('opens the create wizard for the ReportControl element', async () => { + const primaryAction = ( + element.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + + await primaryAction.click(); + await new Promise(resolve => setTimeout(resolve, 20)); // await animation + + const nameField = ( + element.wizardUI.dialog?.querySelector( + 'wizard-textfield[label="name"]' + ) + ); + await nameField.requestUpdate(); + + expect(nameField).to.exist; + }); + }); + }); + }); + + describe('define an edit wizard that', () => { + let nameField: WizardTextField; + let primaryAction: HTMLElement; + let secondaryAction: HTMLElement; + let gseControl: Element; + let parentIED: Element; + + describe('loading a GSEControl with connected DataSet and GSE element', () => { + beforeEach(async () => { + element.workflow.length = 0; // remove all wizard from FIFO queue + + parentIED = doc.querySelector('IED')!; + element.workflow.push(() => selectGseControlWizard(parentIED)); + await element.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 20)); // await animation + + const gsecontrol = ( + (( + element.wizardUI.dialog?.querySelector('filtered-list') + )).items[0] + ); + gsecontrol.click(); + await new Promise(resolve => setTimeout(resolve, 20)); // await animation + + nameField = element.wizardUI.dialog!.querySelector( + 'wizard-textfield[label="name"]' + )!; + primaryAction = ( + element.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + secondaryAction = ( + element.wizardUI.dialog?.querySelector( + 'mwc-button[slot="secondaryAction"]' + ) + ); + await nameField.updateComplete; + }); + + it('rejects name attribute starting with decimals', async () => { + expect(doc.querySelector('GSEControl[name="4adsasd"]')).to.not.exist; + + nameField.value = '4adsasd'; + await element.requestUpdate(); + primaryAction.click(); + + expect(doc.querySelector('GSEControl[name="4adsasd"]')).to.not.exist; + }); + + it('edits name attribute on primary action', async () => { + expect(doc.querySelector('GSEControl[name="myNewName"]')!).to.not.exist; + + nameField.value = 'myNewName'; + await element.requestUpdate(); + primaryAction.click(); + + expect(doc.querySelector('GSEControl[name="myNewName"]')!).to.exist; + }); + + it('dynamically updates wizards after attribute change', async () => { + nameField.value = 'myNewName'; + primaryAction.click(); + + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + const gsecontrol = ( + (( + element.wizardUI.dialog?.querySelector('filtered-list') + )).items[0] + ); + + expect(gsecontrol.innerHTML).to.contain('myNewName'); + }); + + it('returns back to its starting wizard on secondary action', async () => { + secondaryAction.click(); + + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + const report = ( + (( + element.wizardUI.dialog?.querySelector('filtered-list') + )).items[0] + ); + + expect(report.innerHTML).to.contain('GCB'); + }); + + it('opens edit wizard for DataSet element on edit dataset button click', async () => { + const editDataSetButton = ( + Array.from( + element.wizardUI.dialog!.querySelectorAll( + 'mwc-menu > mwc-list-item' + ) + ).find(item => item.innerHTML.includes(`[scl.DataSet]`)) + ); + + await element.wizardUI.dialog?.requestUpdate(); + editDataSetButton.click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + const nameField = ( + element.wizardUI.dialog?.querySelector( + 'wizard-textfield[label="name"]' + ) + ); + + await nameField.updateComplete; + expect(nameField.value).to.equal( + doc.querySelectorAll('DataSet')[1].getAttribute('name') + ); + }); + + it('opens a editGseWizard on edit GSE button click', async () => { + const editGseButton = ( + Array.from( + element.wizardUI.dialog!.querySelectorAll( + 'mwc-menu > mwc-list-item' + ) + ).find(item => item.innerHTML.includes(`[scl.Communication]`)) + ); + + await element.wizardUI.dialog?.requestUpdate(); + editGseButton.click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + const macField = ( + element.wizardUI.dialog?.querySelector( + 'wizard-textfield[label="MAC-Address"]' + ) + ); + await macField.updateComplete; + expect(macField.value).to.equal( + doc + .querySelector('GSE > Address > P[type="MAC-Address"]') + ?.textContent?.trim() + ); + }); + + it('removes the GSEControl and its referenced elements on remove button click', async () => { + expect(doc.querySelector('IED[name="IED1"] GSEControl[name="GCB"]')).to + .exist; + expect( + doc.querySelector('IED[name="IED1"] DataSet[name="GooseDataSet1"]') + ).to.exist; + expect(doc.querySelector('GSE[cbName="GCB"]')).to.exist; + + const deleteButton = ( + Array.from( + element.wizardUI.dialog!.querySelectorAll( + 'mwc-menu > mwc-list-item' + ) + ).find(item => item.innerHTML.includes(`[remove]`)) + ); + await element.wizardUI.dialog?.requestUpdate(); + deleteButton.click(); + + expect(doc.querySelector('IED[name="IED1"] GSEControl[name="GCB"]')).to + .not.exist; + expect( + doc.querySelector('IED[name="IED1"] DataSet[name="GooseDataSet1"]') + ).to.not.exist; + expect(doc.querySelector('GSE[cbName="GCB"]')).to.not.exist; + }); + }); + + describe('loading a GSEControl with no connected DataSet', () => { + beforeEach(async () => { + gseControl = doc.querySelector('GSEControl[name="GCB2"]')!; + const wizard = editGseControlWizard(gseControl); + element.workflow.push(() => wizard); + await element.requestUpdate(); + }); + + it('does not show edit DataSet button', async () => { + const editGseButton = ( + Array.from( + element.wizardUI.dialog!.querySelectorAll( + 'mwc-menu > mwc-list-item' + ) + ).find(item => item.innerHTML.includes(`[scl.DataSet]`)) + ); + + expect(editGseButton).to.not.exist; + }); + }); + + describe('loading a GSEControl with no connected GSE', () => { + beforeEach(async () => { + gseControl = doc.querySelector( + 'IED[name="IED2"] GSEControl[name="GCB"]' + )!; + const wizard = editGseControlWizard(gseControl); + element.workflow.push(() => wizard); + await element.requestUpdate(); + }); + + it('does not show edit DataSet button', async () => { + const editGseButton = ( + Array.from( + element.wizardUI.dialog!.querySelectorAll( + 'mwc-menu > mwc-list-item' + ) + ).find(item => item.innerHTML.includes(`[scl.Communication]`)) + ); + + expect(editGseButton).to.not.exist; + }); + }); + }); +}); diff --git a/packages/open-scd/test/integration/wizards/reportcontrol-wizarding-editing.test.ts b/packages/open-scd/test/integration/wizards/reportcontrol-wizarding-editing.test.ts new file mode 100644 index 0000000000..a647025621 --- /dev/null +++ b/packages/open-scd/test/integration/wizards/reportcontrol-wizarding-editing.test.ts @@ -0,0 +1,588 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import '../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../mock-wizard-editor.js'; + +import { ListItemBase } from '@material/mwc-list/mwc-list-item-base'; + +import { FilteredList } from '../../../src/filtered-list.js'; +import { WizardTextField } from '../../../src/wizard-textfield.js'; +import { + createReportControlWizard, + reportControlCopyToIedSelector, + reportControlParentSelector, + selectReportControlWizard, +} from '../../../src/wizards/reportcontrol.js'; +import { FinderList } from '../../../src/finder-list.js'; +import { CheckListItem } from '@material/mwc-list/mwc-check-list-item'; + +describe('Wizards for SCL element ReportControl', () => { + let doc: XMLDocument; + let element: MockWizardEditor; + + let primaryAction: HTMLElement; + + beforeEach(async () => { + element = await fixture(html``); + doc = await fetch('/test/testfiles/wizards/reportcontrol.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + }); + + describe('define a select wizards that ', () => { + let reportControlList: FilteredList; + + describe('with the document element as input', () => { + beforeEach(async () => { + const wizard = selectReportControlWizard(doc.documentElement); + element.workflow.push(() => wizard); + await element.requestUpdate(); + + reportControlList = ( + element.wizardUI.dialog?.querySelector('filtered-list') + ); + await reportControlList.updateComplete; + }); + + it('shows all ReportControl elements within a project', () => + expect(reportControlList.items.length).to.equal( + doc.querySelectorAll('ReportControl').length + )); + + it('opens edit wizard for selected ReportControl element on click', async () => { + const reportItem = reportControlList.items[1]; + reportItem.click(); + await new Promise(resolve => setTimeout(resolve, 20)); // await animation + + const nameField = ( + element.wizardUI.dialog?.querySelector( + 'wizard-textfield[label="name"]' + ) + ); + await nameField.requestUpdate(); + + expect(nameField.value).to.equal( + doc.querySelectorAll('ReportControl')[1].getAttribute('name') + ); + }); + + describe('has an add Report primary button that', () => { + let iEDPicker: FinderList; + + beforeEach(async () => { + (( + element.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + await new Promise(resolve => setTimeout(resolve, 50)); // await animation + + iEDPicker = ( + element.wizardUI.dialog?.querySelector('finder-list') + ); + }); + + it('opens a potential list of host IEDs for the ReportControl element', async () => + expect(iEDPicker).to.exist); + }); + }); + + describe('with a specific IED as input', () => { + beforeEach(async () => { + const wizard = selectReportControlWizard(doc.querySelector('IED')!); + element.workflow.push(() => wizard); + await element.requestUpdate(); + + reportControlList = ( + element.wizardUI.dialog?.querySelector('filtered-list') + ); + await reportControlList.updateComplete; + }); + + it('allows to filter ReportControl elements per IED', async () => + expect(reportControlList.items.length).to.equal( + doc.querySelector('IED')!.querySelectorAll('ReportControl').length + )); + + it('opens edit wizard for selected ReportControl element on click', async () => { + const reportItem = reportControlList.items[1]; + reportItem.click(); + await new Promise(resolve => setTimeout(resolve, 20)); // await animation + + const nameField = ( + element.wizardUI.dialog?.querySelector( + 'wizard-textfield[label="name"]' + ) + ); + await nameField.requestUpdate(); + + expect(nameField.value).to.equal( + doc.querySelectorAll('ReportControl')[1].getAttribute('name') + ); + }); + + describe('has an add Report primary button that', () => { + it('opens the create wizard for the ReportControl element', async () => { + const primaryAction = ( + element.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + + await primaryAction.click(); + await new Promise(resolve => setTimeout(resolve, 20)); // await animation + + const nameField = ( + element.wizardUI.dialog?.querySelector( + 'wizard-textfield[label="name"]' + ) + ); + await nameField.requestUpdate(); + + expect(nameField).to.exist; + }); + }); + }); + }); + + describe('defines an edit wizard that', () => { + let nameField: WizardTextField; + let secondaryAction: HTMLElement; + let parentIED: Element; + + beforeEach(async () => { + element.workflow.length = 0; // remove all wizard from FIFO queue + parentIED = doc.querySelector('IED')!; + element.workflow.push(() => selectReportControlWizard(parentIED)); + await element.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 20)); // await animation + + const report = ( + (element.wizardUI.dialog?.querySelector('filtered-list')) + .items[1] + ); + report.click(); + await new Promise(resolve => setTimeout(resolve, 20)); // await animation + + nameField = element.wizardUI.dialog!.querySelector( + 'wizard-textfield[label="name"]' + )!; + primaryAction = ( + element.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + secondaryAction = ( + element.wizardUI.dialog?.querySelector( + 'mwc-button[slot="secondaryAction"]' + ) + ); + await nameField.updateComplete; + }); + + it('rejects name attribute starting with decimals', async () => { + expect( + parentIED.querySelectorAll('ReportControl')[1]?.getAttribute('name') + ).to.not.equal('4adsasd'); + + nameField.value = '4adsasd'; + await element.requestUpdate(); + primaryAction.click(); + + expect( + parentIED.querySelectorAll('ReportControl')[1]?.getAttribute('name') + ).to.not.equal('4adsasd'); + }); + + it('edits name attribute on primary action', async () => { + expect( + parentIED.querySelectorAll('ReportControl')[1]?.getAttribute('name') + ).to.not.equal('myNewName'); + + nameField.value = 'myNewName'; + await element.requestUpdate(); + primaryAction.click(); + + expect( + parentIED.querySelectorAll('ReportControl')[1]?.getAttribute('name') + ).to.equal('myNewName'); + }); + + it('dynamically updates wizards after attribute change', async () => { + nameField.value = 'myNewName'; + primaryAction.click(); + + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + const report = ( + (element.wizardUI.dialog?.querySelector('filtered-list')) + .items[1] + ); + + expect(report.innerHTML).to.contain('myNewName'); + }); + + it('returns back to its starting wizard on secondary action', async () => { + secondaryAction.click(); + + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + const report = ( + (element.wizardUI.dialog?.querySelector('filtered-list')) + .items[0] + ); + + expect(report.innerHTML).to.contain('ReportCb'); + }); + + it('opens edit wizard for DataSet element on edit dataset button click', async () => { + const editDataSetButton = ( + Array.from( + element.wizardUI.dialog!.querySelectorAll( + 'mwc-menu > mwc-list-item' + ) + ).find(item => item.innerHTML.includes(`[scl.DataSet]`)) + ); + + await element.wizardUI.dialog?.requestUpdate(); + editDataSetButton.click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + const nameField = ( + element.wizardUI.dialog?.querySelector('wizard-textfield[label="name"]') + ); + await nameField.updateComplete; + + expect(nameField.value).to.equal( + doc.querySelectorAll('DataSet')[1].getAttribute('name') + ); + }); + + it('opens edit wizard for TrgOps element on edit trigger options button click', async () => { + const editTrgOpsButton = ( + Array.from( + element.wizardUI.dialog!.querySelectorAll( + 'mwc-menu > mwc-list-item' + ) + ).find(item => item.innerHTML.includes(`[scl.TrgOps]`)) + ); + + await element.wizardUI.dialog?.requestUpdate(); + editTrgOpsButton.click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + const dchgSelect = ( + element.wizardUI.dialog?.querySelector('wizard-checkbox[label="dchg"]') + ); + await dchgSelect.updateComplete; + + expect(dchgSelect).to.exist; + }); + + it('opens edit wizard for OptFields element on edit optional fields button click', async () => { + const editOptFieldsButton = ( + Array.from( + element.wizardUI.dialog!.querySelectorAll( + 'mwc-menu > mwc-list-item' + ) + ).find(item => item.innerHTML.includes(`[scl.OptFields]`)) + ); + + await element.wizardUI.dialog?.requestUpdate(); + editOptFieldsButton.click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + const seqNumSelect = ( + element.wizardUI.dialog?.querySelector( + 'wizard-checkbox[label="seqNum"]' + ) + ); + await seqNumSelect.updateComplete; + + expect(seqNumSelect).to.exist; + }); + + it('removes the ReportControl element and its referenced elements on remove button click', async () => { + expect( + doc.querySelector( + 'IED[name="IED2"] LN[lnClass="XSWI"] ReportControl[name="ReportCb2"]' + ) + ).to.exist; + expect( + doc.querySelector( + 'IED[name="IED2"] LN[lnClass="XSWI"][inst="1"] DataSet[name="dataSet"]' + ) + ).to.exist; + + const deleteElement = ( + Array.from( + element.wizardUI.dialog!.querySelectorAll( + 'mwc-menu > mwc-list-item' + ) + ).find(item => item.innerHTML.includes(`[remove]`)) + ); + await element.wizardUI.dialog?.requestUpdate(); + deleteElement.click(); + + expect( + doc.querySelector( + 'IED[name="IED2"] LN[lnClass="XSWI"][inst="1"] ReportControl[name="ReportCb2"]' + ) + ).to.not.exist; + expect( + doc.querySelector( + 'IED[name="IED2"] LN[lnClass="XSWI"][inst="1"] DataSet[name="dataSet"]' + ) + ).to.not.exist; + }); + + it('opens a IEDs selector wizard on copy to other IEDs meu action', async () => { + const copyMenuAction = ( + Array.from( + element.wizardUI.dialog!.querySelectorAll( + 'mwc-menu > mwc-list-item' + ) + ).find(item => item.innerHTML.includes(`[controlblock.label.copy]`)) + ); + await element.wizardUI.dialog?.requestUpdate(); + copyMenuAction.click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + const iedsPicker = + element.wizardUI.dialog?.querySelector('filtered-list'); + + expect(iedsPicker).to.exist; + expect(iedsPicker!.multi).to.be.true; + }); + }); + + describe('defines a selector wizard to select ReportControl parent', () => { + let iEDPicker: FinderList; + + beforeEach(async () => { + const wizard = reportControlParentSelector(doc); + element.workflow.push(() => wizard); + await element.requestUpdate(); + + iEDPicker = ( + element.wizardUI.dialog?.querySelector('finder-list') + ); + + primaryAction = ( + element.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + }); + + it('opens a potential list of host IEDs for the ReportControl element', () => + expect(iEDPicker).to.exist); + + it('is not of type multi', () => expect(iEDPicker.multi).to.be.false); + + it('forwards LN0/LN as parent to ReportControl create wizard', async () => { + expect( + doc + .querySelector('IED[name="IED3"]') + ?.querySelectorAll('LN0 > ReportControl') + ).to.have.lengthOf(1); + + iEDPicker.path = ['IED: IED3']; + primaryAction.click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + const nameField = ( + element.wizardUI.dialog?.querySelector('wizard-textfield[label="name"]') + ); + expect(nameField).to.exist; + + (( + element.wizardUI.dialogs[3]?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + expect( + doc + .querySelector('IED[name="IED3"]') + ?.querySelectorAll('LN0 > ReportControl') + ).to.have.lengthOf(2); + }); + }); + + describe('defines a selector wizard to select ReportControl copy to sink', () => { + let iedsPicker: FilteredList; + let listItem: CheckListItem; + + beforeEach(async () => { + const sourceReportControl = doc.querySelector( + 'IED[name="IED2"] ReportControl[name="ReportCb"]' + )!; + const wizard = reportControlCopyToIedSelector(sourceReportControl); + element.workflow.push(() => wizard); + await element.requestUpdate(); + + iedsPicker = ( + element.wizardUI.dialog?.querySelector('filtered-list') + ); + + primaryAction = ( + element.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + }); + + it('opens a potential list of sink IEDs for the copy operation', () => + expect(iedsPicker).to.exist); + + describe('with a sink IED not meeting any of the data references', () => { + beforeEach(async () => { + listItem = ( + iedsPicker.items.find(item => item.value.includes('IED4'))! + ); + await element.requestUpdate(); + }); + + it('disables the list item', () => expect(listItem.disabled).to.be.true); + + it('does not copy the control block ', async () => { + listItem.selected = true; + await listItem.requestUpdate(); + primaryAction.click(); + expect(doc.querySelector('IED[name="IED4"] ReportControl')).to.not + .exist; + }); + }); + + describe('with a sink IED meeting partially the data references', () => { + beforeEach(async () => { + listItem = ( + iedsPicker.items.find(item => item.value.includes('IED5'))! + ); + + await element.requestUpdate(); + await listItem.requestUpdate(); + }); + + it('list item is selectable', () => + expect(listItem.disabled).to.be.false); + + it('does copy the control block ', async () => { + listItem.selected = true; + await listItem.requestUpdate(); + primaryAction.click(); + + expect(doc.querySelector('IED[name="IED5"] ReportControl')).to.exist; + }); + + it('removes non referenced data from the DataSet the control block ', async () => { + listItem.selected = true; + await listItem.requestUpdate(); + primaryAction.click(); + + const rpControl = doc.querySelector('IED[name="IED5"] ReportControl')!; + const dataSet = doc.querySelector( + `IED[name="IED5"] DataSet[name="${rpControl.getAttribute('datSet')}"]` + ); + expect(dataSet).to.exist; + expect(dataSet!.children).to.have.lengthOf(3); + }); + }); + + describe('with a sink IED already containing ReportControl', () => { + beforeEach(async () => { + listItem = ( + iedsPicker.items.find(item => item.value.includes('IED4'))! + ); + + await element.requestUpdate(); + }); + + it('list item is disabled', () => expect(listItem.disabled).to.be.true); + + it('does not copy report control block nor DataSet ', async () => { + listItem.selected = true; + await listItem.requestUpdate(); + primaryAction.click(); + + const rpControl = doc.querySelector('IED[name="IED6"] ReportControl')!; + expect(rpControl.getAttribute('datSet')).to.not.exist; + + const dataSet = doc.querySelector(`IED[name="IED6"] DataSet`); + expect(dataSet).to.not.exist; + }); + }); + + describe('with a sink IED already containing DataSet', () => { + beforeEach(async () => { + listItem = ( + iedsPicker.items.find(item => item.value.includes('IED7'))! + ); + + await element.requestUpdate(); + }); + + it('does not copy report control block nor DataSet ', async () => { + listItem.selected = true; + await listItem.requestUpdate(); + primaryAction.click(); + + const rpControl = doc.querySelector('IED[name="IED7"] ReportControl')!; + expect(rpControl).to.not.exist; + + const dataSet = doc.querySelector(`IED[name="IED7"] DataSet`); + expect(dataSet?.children).to.have.lengthOf(3); + }); + }); + }); + + describe('defines a create wizards that', () => { + let primaryAction: HTMLElement; + + beforeEach(async () => { + const wizard = createReportControlWizard(doc.querySelector('LN0')!); + element.workflow.push(() => wizard); + await element.requestUpdate(); + + primaryAction = ( + element.wizardUI.dialogs[3]?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + }); + + it('creates a new instance of a ReportControl element', () => { + expect( + doc + .querySelector('IED[name="IED2"]') + ?.querySelectorAll('LN0 > ReportControl') + ).to.have.lengthOf(1); + + primaryAction.click(); + + expect( + doc + .querySelector('IED[name="IED2"]') + ?.querySelectorAll('LN0 > ReportControl') + ).to.have.lengthOf(2); + }); + + it('creates a new instance of a DataSet element referenced from ReportControl', () => { + expect( + doc + .querySelector('IED[name="IED2"]') + ?.querySelectorAll('LN0 > DataSet') + ).to.have.lengthOf(1); + + primaryAction.click(); + + expect( + doc + .querySelector('IED[name="IED2"]') + ?.querySelectorAll('LN0 > DataSet') + ).to.have.lengthOf(2); + }); + }); +}); diff --git a/packages/open-scd/test/integration/wizards/sampledvaluecontrol-wizarding-editing.test.ts b/packages/open-scd/test/integration/wizards/sampledvaluecontrol-wizarding-editing.test.ts new file mode 100644 index 0000000000..6261ef8c1e --- /dev/null +++ b/packages/open-scd/test/integration/wizards/sampledvaluecontrol-wizarding-editing.test.ts @@ -0,0 +1,442 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import '../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../mock-wizard-editor.js'; + +import { ListItemBase } from '@material/mwc-list/mwc-list-item-base'; + +import { FilteredList } from '../../../src/filtered-list.js'; +import { WizardTextField } from '../../../src/wizard-textfield.js'; +import { + createSampledValueControlWizard, + selectSampledValueControlWizard, +} from '../../../src/wizards/sampledvaluecontrol.js'; +import { WizardCheckbox } from '../../../src/wizard-checkbox.js'; +import { FinderList } from '../../../src/finder-list.js'; + +describe('Wizards for SCL element SampledValueControl', () => { + let doc: XMLDocument; + let element: MockWizardEditor; + + beforeEach(async () => { + element = await fixture(html``); + doc = await fetch('/test/testfiles/wizards/sampledvaluecontrol.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + }); + + describe('define a select wizards that ', () => { + let sampledValueControlList: FilteredList; + + describe('with the document element as input', () => { + beforeEach(async () => { + const wizard = selectSampledValueControlWizard(doc.documentElement); + element.workflow.push(() => wizard); + await element.requestUpdate(); + + sampledValueControlList = ( + element.wizardUI.dialog?.querySelector('filtered-list') + ); + await sampledValueControlList.updateComplete; + }); + + it('shows all SampledValueControl elements within a project', () => + expect(sampledValueControlList.items.length).to.equal( + doc.querySelectorAll('SampledValueControl').length + )); + + it('opens edit wizard for selected SampledValueControl element on click', async () => { + const reportItem = sampledValueControlList.items[0]; + reportItem.click(); + await new Promise(resolve => setTimeout(resolve, 20)); // await animation + + const nameField = ( + element.wizardUI.dialog?.querySelector( + 'wizard-textfield[label="name"]' + ) + ); + await nameField.requestUpdate(); + + expect(nameField.value).to.equal( + doc.querySelectorAll('SampledValueControl')[0].getAttribute('name') + ); + }); + + describe('has an add SampledValueControl primary button that', () => { + let iEDPicker: FinderList; + + beforeEach(async () => { + (( + element.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + )).click(); + await new Promise(resolve => setTimeout(resolve, 50)); // await animation + + iEDPicker = ( + element.wizardUI.dialog?.querySelector('finder-list') + ); + }); + + it('opens a potential list of host IEDs for the SampledValueControl element', async () => + expect(iEDPicker).to.exist); + }); + }); + + describe('with a specific IED as input', () => { + beforeEach(async () => { + const wizard = selectSampledValueControlWizard( + doc.querySelector('IED[name="IED3"]')! + ); + element.workflow.push(() => wizard); + await element.requestUpdate(); + + sampledValueControlList = ( + element.wizardUI.dialog?.querySelector('filtered-list') + ); + await sampledValueControlList.updateComplete; + }); + + it('shows all SampledValueControl elements within an IED', () => + expect(sampledValueControlList.items.length).to.equal( + doc.querySelectorAll('IED[name="IED3"] SampledValueControl').length + )); + + it('opens edit wizard for selected SampledValueControl element on click', async () => { + const reportItem = sampledValueControlList.items[0]; + reportItem.click(); + await new Promise(resolve => setTimeout(resolve, 20)); // await animation + + const nameField = ( + element.wizardUI.dialog?.querySelector( + 'wizard-textfield[label="name"]' + ) + ); + await nameField.requestUpdate(); + + expect(nameField.value).to.equal( + doc.querySelectorAll('SampledValueControl')[0].getAttribute('name') + ); + }); + + describe('has an add SampledValueControl primary button that', () => { + let nameField: WizardTextField; + beforeEach(async () => { + const primaryAction = ( + element.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + + primaryAction.click(); + await new Promise(resolve => setTimeout(resolve, 20)); // await animation + + nameField = ( + element.wizardUI.dialog?.querySelector( + 'wizard-textfield[label="name"]' + ) + ); + }); + + it('opens the create wizard for the SampledValueControl element', async () => + expect(nameField).to.exist); + }); + }); + }); + + describe('defines an edit wizard that', () => { + let nameField: WizardTextField; + let secondaryAction: HTMLElement; + let primaryAction: HTMLElement; + let parentIED: Element; + + describe('loaded without SMV element reference', () => { + beforeEach(async () => { + element.workflow.length = 0; // remove all wizard from FIFO queue + parentIED = doc.querySelectorAll('IED')[1]; + element.workflow.push(() => selectSampledValueControlWizard(parentIED)); + await element.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 20)); // await animation + + const sampledValueControlBlock = ( + (( + element.wizardUI.dialog?.querySelector('filtered-list') + )).items[0] + ); + sampledValueControlBlock.click(); + await new Promise(resolve => setTimeout(resolve, 20)); // await animation + + nameField = element.wizardUI.dialog!.querySelector( + 'wizard-textfield[label="name"]' + )!; + primaryAction = ( + element.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + secondaryAction = ( + element.wizardUI.dialog?.querySelector( + 'mwc-button[slot="secondaryAction"]' + ) + ); + await nameField.updateComplete; + }); + + it('rejects name attribute starting with decimals', async () => { + expect( + parentIED + .querySelectorAll('SampledValueControl')[0] + ?.getAttribute('name') + ).to.not.equal('4adsasd'); + + nameField.value = '4adsasd'; + await element.requestUpdate(); + primaryAction.click(); + + expect( + parentIED + .querySelectorAll('SampledValueControl')[0] + ?.getAttribute('name') + ).to.not.equal('4adsasd'); + }); + + it('edits name attribute on primary action', async () => { + expect( + parentIED + .querySelectorAll('SampledValueControl')[0] + ?.getAttribute('name') + ).to.not.equal('myNewName'); + + nameField.value = 'myNewName'; + await element.requestUpdate(); + primaryAction.click(); + + expect( + parentIED + .querySelectorAll('SampledValueControl')[0] + ?.getAttribute('name') + ).to.equal('myNewName'); + }); + + it('dynamically updates wizards after attribute change', async () => { + nameField.value = 'myNewName'; + primaryAction.click(); + + await new Promise(resolve => setTimeout(resolve, 20)); // await animation + + const sampledValueControlBlock = ( + (( + element.wizardUI.dialog?.querySelector('filtered-list') + )).items[0] + ); + + expect(sampledValueControlBlock.innerHTML).to.contain('myNewName'); + }); + + it('returns back to its starting wizard on secondary action', async () => { + secondaryAction.click(); + + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + const sampledValueControlBlock = ( + (( + element.wizardUI.dialog?.querySelector('filtered-list') + )).items[0] + ); + + expect(sampledValueControlBlock.innerHTML).to.contain('MSVCB01'); + }); + + it('does not render SMV edit button', async () => { + const editSMvButton = ( + Array.from( + element.wizardUI.dialog!.querySelectorAll( + 'mwc-menu > mwc-list-item' + ) + ).find(item => item.innerHTML.includes(`[scl.Communication]`)) + ); + + await element.wizardUI.dialog?.requestUpdate(); + expect(editSMvButton).not.to.exist; + }); + }); + + describe('loaded with SMV element reference', () => { + beforeEach(async () => { + element.workflow.length = 0; // remove all wizard from FIFO queue + parentIED = doc.querySelectorAll('IED')[2]; + element.workflow.push(() => selectSampledValueControlWizard(parentIED)); + await element.requestUpdate(); + await new Promise(resolve => setTimeout(resolve, 20)); // await animation + + const sampledValueControlBlock = ( + (( + element.wizardUI.dialog?.querySelector('filtered-list') + )).items[0] + ); + sampledValueControlBlock.click(); + await new Promise(resolve => setTimeout(resolve, 20)); // await animation + + nameField = element.wizardUI.dialog!.querySelector( + 'wizard-textfield[label="name"]' + )!; + primaryAction = ( + element.wizardUI.dialog?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + secondaryAction = ( + element.wizardUI.dialog?.querySelector( + 'mwc-button[slot="secondaryAction"]' + ) + ); + await nameField.updateComplete; + }); + + it('opens a edit wizard for SMV on edit SMV button click', async () => { + const editSMvButton = ( + Array.from( + element.wizardUI.dialog!.querySelectorAll( + 'mwc-menu > mwc-list-item' + ) + ).find(item => item.innerHTML.includes(`[scl.Communication]`)) + ); + + await element.wizardUI.dialog?.requestUpdate(); + expect(editSMvButton).to.exist; + + editSMvButton.click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + const macField = ( + element.wizardUI.dialog?.querySelector( + 'wizard-textfield[label="MAC-Address"]' + ) + ); + await macField.updateComplete; + + expect(macField.value).to.equal( + doc + .querySelector('SMV > Address > P[type="MAC-Address"]') + ?.textContent?.trim() + ); + }); + + it('opens a edit wizard for SMV on edit SMV button click', async () => { + const editSmvOptsButton = ( + Array.from( + element.wizardUI.dialog!.querySelectorAll( + 'mwc-menu > mwc-list-item' + ) + ).find(item => item.innerHTML.includes(`[scl.SmvOpts]`)) + ); + + await element.wizardUI.dialog?.requestUpdate(); + expect(editSmvOptsButton).to.exist; + + editSmvOptsButton.click(); + await new Promise(resolve => setTimeout(resolve, 100)); // await animation + + const macField = ( + element.wizardUI.dialog?.querySelector( + 'wizard-checkbox[label="refreshTime"]' + ) + ); + await macField.updateComplete; + + expect(macField).to.exist; + }); + + it('removes the SampledValueControl element and its referenced elements on remove button click', async () => { + expect( + doc.querySelector( + 'IED[name="IED3"] SampledValueControl[name="MSVCB01"]' + ) + ).to.exist; + expect(doc.querySelector('IED[name="IED3"] DataSet[name="PhsMeas1"]')) + .to.exist; + expect(doc.querySelector('SMV[cbName="MSVCB01"]')).to.exist; + + const deleteButton = ( + Array.from( + element.wizardUI.dialog!.querySelectorAll( + 'mwc-menu > mwc-list-item' + ) + ).find(item => item.innerHTML.includes(`[remove]`)) + ); + + await element.wizardUI.dialog?.requestUpdate(); + deleteButton.click(); + + expect( + doc.querySelector( + 'IED[name="IED3"] SampledValueControl[name="MSVCB01"]' + ) + ).to.not.exist; + expect(doc.querySelector('IED[name="IED3"] DataSet[name="PhsMeas1"]')) + .to.not.exist; + expect(doc.querySelector('SMV[cbName="MSVCB01"]')).to.not.exist; + }); + }); + }); + + describe('defines a create wizards that', () => { + let primaryAction: HTMLElement; + + beforeEach(async () => { + const wizard = createSampledValueControlWizard( + doc.querySelector('IED[name="IED3"] LN0')! + ); + element.workflow.push(() => wizard); + await element.requestUpdate(); + + (( + element.wizardUI.dialogs[0].querySelector( + 'wizard-textfield[label="smvID"]' + ) + )).maybeValue = 'wer'; // is empty string per default that must be non empty + + primaryAction = ( + element.wizardUI.dialogs[3]?.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + }); + + it('creates a new instance of a SampledValueControl element', () => { + expect( + doc.querySelectorAll('IED[name="IED3"] LN0 > SampledValueControl') + ).to.have.lengthOf(1); + + primaryAction.click(); + + expect( + doc.querySelectorAll('IED[name="IED3"] LN0 > SampledValueControl') + ).to.have.lengthOf(2); + }); + + it('creates a new instance of a DataSet element referenced from SampledValueControl', () => { + expect( + doc.querySelectorAll('IED[name="IED3"] LN0 > DataSet') + ).to.have.lengthOf(1); + + primaryAction.click(); + + expect( + doc.querySelectorAll('IED[name="IED3"] LN0 > DataSet') + ).to.have.lengthOf(2); + }); + + it('creates a new instance of a SMV element', () => { + expect( + doc.querySelectorAll('ConnectedAP[iedName="IED3"][apName="P1"] SMV') + ).to.have.lengthOf(1); + + primaryAction.click(); + + expect( + doc.querySelectorAll('ConnectedAP[iedName="IED3"][apName="P1"] SMV') + ).to.have.lengthOf(2); + }); + }); +}); diff --git a/packages/open-scd/test/integration/wizards/services-wizard.test.ts b/packages/open-scd/test/integration/wizards/services-wizard.test.ts new file mode 100644 index 0000000000..fa340f5841 --- /dev/null +++ b/packages/open-scd/test/integration/wizards/services-wizard.test.ts @@ -0,0 +1,91 @@ +import { expect, fixture, html } from '@open-wc/testing'; +import { Wizard } from '../../../src/foundation.js'; +import { editServicesWizard } from '../../../src/wizards/services.js'; + +import '../../mock-wizard-editor.js'; +import { MockWizardEditor } from '../../mock-wizard-editor.js'; +import { WizardDialog } from '../../../src/wizard-dialog.js'; + +describe('Wizards for SCL element Services', () => { + let doc: XMLDocument; + let element: MockWizardEditor; + let wizard: Wizard; + + beforeEach(async () => { + element = await fixture(html``); + doc = await fetch('/test/testfiles/Services.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + wizard = editServicesWizard( + doc.querySelector('IED[name="WithServices"] Services')! + ); + + element.workflow.push(() => wizard); + await element.requestUpdate(); + }); + + describe('define a Services wizards ', () => { + it('Services wizard to have 6 pages', () => { + expect(element.wizardUI.wizard.length).to.equal(6); + }); + it('Services wizard to have 130 inputs', () => { + expect(element.wizardUI.wizard.flatMap(p => p.content).length).to.equal( + 130 + ); + }); + + [13, 22, 22, 23, 28, 22].forEach((inputs, idx) => { + it(`Services wizard ${idx + 1} to have ${inputs} inputs`, () => { + expect(element.wizardUI.wizard[idx].content!.length).to.equal(inputs); + }); + }); + + [0, 1, 2, 3, 4, 5].forEach(idx => { + it(`Wizard ${idx + 1} should look like snapshot`, () => { + expect(element.wizardUI.dialogs[idx]).to.equalSnapshot(); + }); + }); + + describe('> when pro mode is enabled', () => { + let elm: WizardDialog; + beforeEach(async () => { + elm = element.shadowRoot!.querySelector('wizard-dialog')!; + localStorage.setItem('mode', 'pro'); + elm.requestUpdate(); + await elm.updateComplete; + }); + [0, 1, 2, 3, 4, 5].forEach(idx => { + it(`Wizard ${idx + 1} should contain the code icon button`, () => { + expect(element.wizardUI.dialogs[idx].querySelector('mwc-icon-button-toggle')).to.have.attribute('onicon', 'code'); + }); + }); + }); + after(() => localStorage.removeItem('mode')); + + }); + + ['AP2', 'AP3', 'AP4', 'AP5', 'AP6'].forEach(accessPointName => { + describe('AccessPoint wizards for Scl element Services', () => { + beforeEach(async () => { + element = await fixture( + html`` + ); + doc = await fetch('/test/testfiles/Services.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + + wizard = editServicesWizard( + doc.querySelector(`AccessPoint[name="${accessPointName}"] Services`)! + ); + + element.workflow.push(() => wizard); + await element.requestUpdate(); + }); + + it('should look like snapshot', () => { + expect(element.wizardUI.dialog).to.equalSnapshot(); + }); + }); + }); +}); diff --git a/packages/open-scd/test/mock-editor-logger.ts b/packages/open-scd/test/mock-editor-logger.ts new file mode 100644 index 0000000000..63f1e9aae1 --- /dev/null +++ b/packages/open-scd/test/mock-editor-logger.ts @@ -0,0 +1,7 @@ +import { LitElement, customElement } from 'lit-element'; + +import { Editing } from '../src/Editing.js'; +import { Historing } from '../src/Historing.js'; + +@customElement('mock-editor-logger') +export class MockEditorLogger extends Editing(Historing(LitElement)) {} diff --git a/packages/open-scd/test/mock-setter-logger.ts b/packages/open-scd/test/mock-setter-logger.ts new file mode 100644 index 0000000000..a7bfc22318 --- /dev/null +++ b/packages/open-scd/test/mock-setter-logger.ts @@ -0,0 +1,7 @@ +import { LitElement, customElement } from 'lit-element'; +import { Setting } from '../src/Setting.js'; +import { Editing } from '../src/Editing.js'; +import { Historing } from '../src/Historing.js'; + +@customElement('mock-setter-logger') +export class MockSetterLogger extends Setting(Editing(Historing(LitElement))) {} diff --git a/packages/open-scd/test/mock-wizard-editor.ts b/packages/open-scd/test/mock-wizard-editor.ts new file mode 100644 index 0000000000..db4c4a4c17 --- /dev/null +++ b/packages/open-scd/test/mock-wizard-editor.ts @@ -0,0 +1,6 @@ +import { Wizarding } from '../src/Wizarding.js'; +import { Editing } from '../src/Editing.js'; +import { LitElement, customElement } from 'lit-element'; + +@customElement('mock-wizard-editor') +export class MockWizardEditor extends Wizarding(Editing(LitElement)) {} diff --git a/packages/open-scd/test/mock-wizard.ts b/packages/open-scd/test/mock-wizard.ts new file mode 100644 index 0000000000..adc434b452 --- /dev/null +++ b/packages/open-scd/test/mock-wizard.ts @@ -0,0 +1,5 @@ +import { LitElement, customElement } from 'lit-element'; +import { Wizarding } from '../src/Wizarding.js'; + +@customElement('mock-wizard') +export class MockWizard extends Wizarding(LitElement) {} diff --git a/packages/open-scd/test/testfiles/104/valid-addresses.scd b/packages/open-scd/test/testfiles/104/valid-addresses.scd new file mode 100644 index 0000000000..2f3d465928 --- /dev/null +++ b/packages/open-scd/test/testfiles/104/valid-addresses.scd @@ -0,0 +1,1448 @@ + + +
    + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    192.128.0.1

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    192.128.0.2

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    + +
    +

    192.128.0.10

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    + +
    +

    192.128.0.11

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    +
    + + +
    +

    192.128.0.1

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    192.128.0.2

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    + +
    +

    192.128.0.10

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    + +
    +

    192.128.0.11

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hz + + + k + + + + + 10 + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-7-4:2007B2 + + + + + MyExt:2022A1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + unknown + forward + backward + both + + + unknown + forward + backward + + + y + z + a + f + p + n + µ + m + c + d + + da + h + k + M + G + T + P + E + Z + Y + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + pos-neg-zero + dir-quad-zero + + + MS + PER_CYCLE + CYCLE + DAY + WEEK + MONTH + YEAR + EXTERNAL + + + unknown + critical + major + minor + warning + + + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + Bq + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + W/m² + J/m² + S/m + K/s + Pa/s + J/kg K + VA + Watts + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + h + min + Ohm/m + percent/s + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + diff --git a/packages/open-scd/test/testfiles/104/valid-empty-addresses.scd b/packages/open-scd/test/testfiles/104/valid-empty-addresses.scd new file mode 100644 index 0000000000..cf7008d469 --- /dev/null +++ b/packages/open-scd/test/testfiles/104/valid-empty-addresses.scd @@ -0,0 +1,1254 @@ + + +
    + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    192.128.0.1

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    192.128.0.2

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    + +
    +

    192.128.0.10

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    + +
    +

    192.128.0.11

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    +
    + + +
    +

    192.128.0.1

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    192.128.0.2

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    + +
    +

    192.128.0.10

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    + +
    +

    192.128.0.11

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hz + + + k + + + + + 10 + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + direct-with-normal-security + + + + + + + status-only + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + direct-with-enhanced-security + + + + + + + + + + + sbo-with-normal-security + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-7-4:2007B2 + + + + + MyExt:2022A1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + unknown + forward + backward + both + + + unknown + forward + backward + + + y + z + a + f + p + n + µ + m + c + d + + da + h + k + M + G + T + P + E + Z + Y + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + pos-neg-zero + dir-quad-zero + + + MS + PER_CYCLE + CYCLE + DAY + WEEK + MONTH + YEAR + EXTERNAL + + + unknown + critical + major + minor + warning + + + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + Bq + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + W/m² + J/m² + S/m + K/s + Pa/s + J/kg K + VA + Watts + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + h + min + Ohm/m + percent/s + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + diff --git a/packages/open-scd/test/testfiles/104/valid-no-doi.scd b/packages/open-scd/test/testfiles/104/valid-no-doi.scd new file mode 100644 index 0000000000..68203f4d22 --- /dev/null +++ b/packages/open-scd/test/testfiles/104/valid-no-doi.scd @@ -0,0 +1,854 @@ + + +
    + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    192.128.0.1

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    192.128.0.2

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    + +
    +

    192.128.0.10

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    + +
    +

    192.128.0.11

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    +
    + + +
    +

    192.128.0.1

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    192.128.0.2

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    + +
    +

    192.128.0.10

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    + +
    +

    192.128.0.11

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-7-4:2007B2 + + + + + MyExt:2022A1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + unknown + forward + backward + both + + + unknown + forward + backward + + + y + z + a + f + p + n + µ + m + c + d + + da + h + k + M + G + T + P + E + Z + Y + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + pos-neg-zero + dir-quad-zero + + + MS + PER_CYCLE + CYCLE + DAY + WEEK + MONTH + YEAR + EXTERNAL + + + unknown + critical + major + minor + warning + + + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + Bq + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + W/m² + J/m² + S/m + K/s + Pa/s + J/kg K + VA + Watts + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + h + min + Ohm/m + percent/s + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + diff --git a/packages/open-scd/test/testfiles/104/valid-no-ied.scd b/packages/open-scd/test/testfiles/104/valid-no-ied.scd new file mode 100644 index 0000000000..e149d62f26 --- /dev/null +++ b/packages/open-scd/test/testfiles/104/valid-no-ied.scd @@ -0,0 +1,716 @@ + + +
    + + + + + + 110 + + + + + + + + + + + + + + + + + + +
    +

    192.128.0.1

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    192.128.0.2

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    + +
    +

    192.128.0.10

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-7-4:2007B2 + + + + + MyExt:2022A1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + unknown + forward + backward + both + + + unknown + forward + backward + + + y + z + a + f + p + n + µ + m + c + d + + da + h + k + M + G + T + P + E + Z + Y + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + pos-neg-zero + dir-quad-zero + + + MS + PER_CYCLE + CYCLE + DAY + WEEK + MONTH + YEAR + EXTERNAL + + + unknown + critical + major + minor + warning + + + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + Bq + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + W/m² + J/m² + S/m + K/s + Pa/s + J/kg K + VA + Watts + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + h + min + Ohm/m + percent/s + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + diff --git a/packages/open-scd/test/testfiles/104/valid-subnetwork.scd b/packages/open-scd/test/testfiles/104/valid-subnetwork.scd new file mode 100644 index 0000000000..511a681a9a --- /dev/null +++ b/packages/open-scd/test/testfiles/104/valid-subnetwork.scd @@ -0,0 +1,1540 @@ + + +
    + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    192.128.0.1

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    192.128.0.2

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    3

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    + +
    +

    192.128.0.10

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    + +
    +

    192.128.0.11

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    +
    + + +
    +

    192.128.0.1

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    192.128.0.2

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    + +
    +

    192.128.0.10

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    + +
    +

    192.128.0.11

    +

    255.255.255.0

    +

    8

    +

    12

    +

    30

    +

    15

    +

    10

    +

    20

    +

    controlled-station

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hz + + + k + + + + + 10 + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-7-4:2007B2 + + + + + MyExt:2022A1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + unknown + forward + backward + both + + + unknown + forward + backward + + + y + z + a + f + p + n + µ + m + c + d + + da + h + k + M + G + T + P + E + Z + Y + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + pos-neg-zero + dir-quad-zero + + + MS + PER_CYCLE + CYCLE + DAY + WEEK + MONTH + YEAR + EXTERNAL + + + unknown + critical + major + minor + warning + + + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + Bq + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + W/m² + J/m² + S/m + K/s + Pa/s + J/kg K + VA + Watts + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + h + min + Ohm/m + percent/s + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + diff --git a/packages/open-scd/test/testfiles/Editing.scd b/packages/open-scd/test/testfiles/Editing.scd new file mode 100644 index 0000000000..78ed8b41bb --- /dev/null +++ b/packages/open-scd/test/testfiles/Editing.scd @@ -0,0 +1,49 @@ + + +
    + TrainingIEC61850 + + +
    + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/packages/open-scd/test/testfiles/Services.scd b/packages/open-scd/test/testfiles/Services.scd new file mode 100644 index 0000000000..825d19eb49 --- /dev/null +++ b/packages/open-scd/test/testfiles/Services.scd @@ -0,0 +1,550 @@ + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 80 + 4000 + 80 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 80 + 4000 + 80 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-7-4:2007B4 + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + A + + + + + 0.01 + + + 0 + + + + + Hz + + + + + + + + + A + + + + + 0.001 + + + 0 + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + unknown + forward + backward + both + + + y + z + a + f + p + n + µ + m + c + d + + da + h + k + M + G + T + P + E + Z + Y + + + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + Bq + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + W/m² + J/m² + S/m + K/s + Pa/s + J/kg K + VA + Watts + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + h + min + Ohm/m + percent/s + + + Ok + Warning + Alarm + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + \ No newline at end of file diff --git a/packages/open-scd/test/testfiles/SubEquipment.scd b/packages/open-scd/test/testfiles/SubEquipment.scd new file mode 100644 index 0000000000..8cfd859583 --- /dev/null +++ b/packages/open-scd/test/testfiles/SubEquipment.scd @@ -0,0 +1,243 @@ + +
    + + + + + + + + + + + + + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + + + 1000 + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + status-only + + + pulse + persistent + persistent-feedback + + + Ok + Warning + Alarm + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + diff --git a/packages/open-scd/test/testfiles/cleanup.scd b/packages/open-scd/test/testfiles/cleanup.scd new file mode 100644 index 0000000000..23deebf491 --- /dev/null +++ b/packages/open-scd/test/testfiles/cleanup.scd @@ -0,0 +1,1171 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-01-00-10

    +

    005

    +

    4

    +

    0010

    +
    +
    + +
    +

    01-0C-CD-01-00-11

    +

    005

    +

    4

    +

    0010

    +
    +
    + +

    RJ45

    +
    +
    +
    + + +
    +

    192.168.0.112

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    + +
    +

    192.168.0.113

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-04-00-20

    +

    007

    +

    4

    +

    4002

    +
    +
    + +
    +

    01-0C-CD-04-00-21

    +

    007

    +

    4

    +

    4002

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + IED2 + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + + 1 + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED3 + + + + IED3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + unknown + forward + backward + both + + + kV/mA + kA/V + ohm/m + ppm/°C + F/m + H/m + ms/kPa + kPa + ms/V + ms/K + V/s + I/Ir*s + 1/week + 1/d + 1/h + 1/min + periods + GB + cycle + mile + inch + °F + I/IrObj + MB + KB + Bytes + p.u. + day(s) + % + F/mi + ohm/mi + F/km + ohm/km + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + W/m² + J/m² + S/m + K/s + Pa/s + J/kg K + VA + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + h + min + ' + + + y + z + a + f + p + n + µ + m + c + d + + da + h + k + M + G + T + P + E + Z + Y + + + Load Break + Disconnector + Earthing Switch + High Speed Earthing Switch + + + No Clock Source + CPU Clock + A PTP Clock + A Comms Card Internal Clock + + + ERR + T104 + T103 + RTC + IEEE1588 + EXTERN_SIPROTEC + MINUTE_PULS + DNP30 + MODBUS + PROFIBUS + GALILEO + SYNC_BOX + DCF77 + GPS + HMI + Unknown + SNTP + PTP + IRIG-B + Substation internal + + + on + test + test/blocked + off + + +
    \ No newline at end of file diff --git a/packages/open-scd/test/testfiles/comm-map.scd b/packages/open-scd/test/testfiles/comm-map.scd new file mode 100644 index 0000000000..0c490a0a2b --- /dev/null +++ b/packages/open-scd/test/testfiles/comm-map.scd @@ -0,0 +1,599 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    +
    + + +
    +

    192.168.0.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    diff --git a/packages/open-scd/test/testfiles/communication.scd b/packages/open-scd/test/testfiles/communication.scd new file mode 100644 index 0000000000..7c97af5458 --- /dev/null +++ b/packages/open-scd/test/testfiles/communication.scd @@ -0,0 +1,39 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 100.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/packages/open-scd/test/testfiles/communication/communication.scd b/packages/open-scd/test/testfiles/communication/communication.scd new file mode 100644 index 0000000000..a10970eb83 --- /dev/null +++ b/packages/open-scd/test/testfiles/communication/communication.scd @@ -0,0 +1,672 @@ + + +
    + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100.0 + +
    +

    192.168.210.111

    +
    + +
    +

    01-0C-CD-01-00-00

    +

    0000

    +
    +
    +
    +
    + + 100 + +
    +

    192.168.210.113

    +
    + +
    +

    01-0C-CD-04-00-01

    +

    4002

    +
    +
    +
    + +
    +

    192.168.210.115

    +
    + +
    +

    01-0C-CD-01-00-01

    +

    0001

    +
    +
    +
    +
    + + 100 + +
    +

    192.168.210.117

    +
    + +
    +

    01-0C-CD-04-00-00

    +

    4000

    +
    +
    + +
    +

    01-0C-CD-04-00-02

    +

    4001

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + status-only + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-7-4:2007B4 + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + A + + + + + 0.01 + + + 0 + + + + + Hz + + + + + + + + + A + + + + + 0.001 + + + 0 + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + y + z + a + f + p + n + µ + m + c + d + + da + h + k + M + G + T + P + E + Z + Y + + + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + Bq + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + W/m² + J/m² + S/m + K/s + Pa/s + J/kg K + VA + Watts + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + h + min + Ohm/m + percent/s + + + Load Break + Disconnector + Earthing Switch + High Speed Earthing Switch + + + status-only + + + pulse + persistent + persistent-feedback + + + Ok + Warning + Alarm + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + diff --git a/packages/open-scd/test/testfiles/conductingequipmentwizard.scd b/packages/open-scd/test/testfiles/conductingequipmentwizard.scd new file mode 100644 index 0000000000..abe6036a64 --- /dev/null +++ b/packages/open-scd/test/testfiles/conductingequipmentwizard.scd @@ -0,0 +1,720 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2021-08-31 19:49:47 + + + IEC 61850-7-4:2007B + + + + + + IEC 61850-7-4:2007B + + + + + IEC 61850-7-4:2007B + + + + + false + + + IEC 61850-7-4:2007B + + + + + + + + + + + + + + + pulse + + + 10000 + + + 0 + + + 1 + + + + + + + + Earthing Switch + + + + + + + + + + + + + + pulse + + + 10000 + + + 0 + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SIPROTEC5 + + + + + + + + + + direct-with-normal-security + + + SIPROTEC5 + + + + + + + + + SIPROTEC5 + + + + + + + + + + direct-with-normal-security + + + + + + SIEMENS + + + + + + + + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + FreedomInc + + + + + + IEC 61850-7-4:2007B + + + + + + + + + + on + + + + + status-only + + + + + + + + status-only + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + Earthing Switch + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + 0 + + + + + + + + 0 + + + + + + + + 1 + + + 0 + + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + direct-with-normal-security + + + Ok + Warning + Alarm + + + on + test + off + + + on + test + + + kV/mA + kA/V + ohm/m + ppm/°C + F/m + H/m + ms/kPa + kPa + ms/V + ms/K + V/s + I/Ir*s + 1/week + 1/d + 1/h + 1/min + periods + GB + cycle + mile + inch + °F + I/IrObj + MB + KB + Bytes + p.u. + day(s) + % + F/mi + ohm/mi + F/km + ohm/km + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + W/m² + J/m² + S/m + K/s + Pa/s + J/kg K + VA + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + h + min + + + y + z + a + f + p + n + µ + m + c + d + + da + h + k + M + G + T + P + E + Z + Y + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + status-only + + + Time + WeekDay + WeekOfYear + DayOfMonth + DayOfYear + + + Hour + Day + Week + Month + Year + + + Monday + Tuesday + Wednesday + Thursday + Friday + Saturday + Sunday + + + January + February + March + April + May + June + July + August + September + October + November + December + + + pulse + persistent + + + status-only + direct-with-normal-security + + + direct-with-enhanced-security + + + Load Break + Disconnector + Earthing Switch + High Speed Earthing Switch + + + \ No newline at end of file diff --git a/packages/open-scd/test/testfiles/editors/DataBindingGOOSE2007B4.scd b/packages/open-scd/test/testfiles/editors/DataBindingGOOSE2007B4.scd new file mode 100644 index 0000000000..b4862af8a7 --- /dev/null +++ b/packages/open-scd/test/testfiles/editors/DataBindingGOOSE2007B4.scd @@ -0,0 +1,387 @@ + +
    + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100 + + + +
    +

    01-0C-CD-01-00-02

    +

    0003

    +
    + 1000 + 10 +
    + +
    +

    01-0C-CD-01-00-01

    +

    0002

    +
    + 10 + 1000 +
    + +
    +

    01-0C-CD-01-00-00

    +

    0001

    +
    + 10 + 1000 +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + status-only + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-7-4:2007B4 + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + Load Break + Disconnector + Earthing Switch + High Speed Earthing Switch + + + status-only + + + pulse + persistent + persistent-feedback + + + Ok + Warning + Alarm + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + diff --git a/packages/open-scd/test/testfiles/editors/DataBindingSMV2007B4.scd b/packages/open-scd/test/testfiles/editors/DataBindingSMV2007B4.scd new file mode 100644 index 0000000000..016068c1e5 --- /dev/null +++ b/packages/open-scd/test/testfiles/editors/DataBindingSMV2007B4.scd @@ -0,0 +1,540 @@ + +
    + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100 + + + +
    +

    01-0C-CD-04-00-02

    +

    0003

    +
    +
    + +
    +

    01-0C-CD-04-00-01

    +

    0002

    +
    +
    + +
    +

    01-0C-CD-04-00-00

    +

    0001

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-7-4:2007B4 + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + A + + + + + 0.01 + + + 0 + + + + + Hz + + + + + + + + + A + + + + + 0.001 + + + 0 + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + unknown + forward + backward + both + + + y + z + a + f + p + n + µ + m + c + d + + da + h + k + M + G + T + P + E + Z + Y + + + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + Bq + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + W/m² + J/m² + S/m + K/s + Pa/s + J/kg K + VA + Watts + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + h + min + Ohm/m + percent/s + + + Ok + Warning + Alarm + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + diff --git a/packages/open-scd/test/testfiles/editors/LaterBindingGOOSE-LGOS.scd b/packages/open-scd/test/testfiles/editors/LaterBindingGOOSE-LGOS.scd new file mode 100644 index 0000000000..3c3f4fbd8a --- /dev/null +++ b/packages/open-scd/test/testfiles/editors/LaterBindingGOOSE-LGOS.scd @@ -0,0 +1,647 @@ + +
    + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100 + + + + + + +
    +

    01-0C-CD-01-00-01

    +

    0002

    +
    + 10 + 1000 +
    + +
    +

    01-0C-CD-01-00-00

    +

    0001

    +
    + 10 + 1000 +
    +
    + + +
    +

    01-0C-CD-01-00-03

    +

    0003

    +
    + 10 + 1000 +
    + +
    +

    01-0C-CD-01-00-04

    +

    0004

    +
    + 10 + 1000 +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GOOSE_PublisherQB2_Disconnector/LLN0.GOOSE2 + + + + + + + + GOOSE_Publisher2QB2_Disconnector/LLN0.GOOSE2 + + + + + + + + GOOSE_PublisherQB2_Disconnector/LLN0.GOOSE1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The supervision instance to rule them all! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The One True Original + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The One True Original + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + status-only + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-7-4:2007B4 + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + Load Break + Disconnector + Earthing Switch + High Speed Earthing Switch + + + status-only + + + pulse + persistent + persistent-feedback + + + Ok + Warning + Alarm + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + diff --git a/packages/open-scd/test/testfiles/editors/LaterBindingGOOSE2007B4.scd b/packages/open-scd/test/testfiles/editors/LaterBindingGOOSE2007B4.scd new file mode 100644 index 0000000000..841a1a81b2 --- /dev/null +++ b/packages/open-scd/test/testfiles/editors/LaterBindingGOOSE2007B4.scd @@ -0,0 +1,348 @@ + +
    + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100 + + + +
    +

    01-0C-CD-01-00-01

    +

    0002

    +
    + 10 + 1000 +
    + +
    +

    01-0C-CD-01-00-00

    +

    0001

    +
    + 10 + 1000 +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + status-only + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-7-4:2007B4 + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + Load Break + Disconnector + Earthing Switch + High Speed Earthing Switch + + + status-only + + + pulse + persistent + persistent-feedback + + + Ok + Warning + Alarm + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + diff --git a/packages/open-scd/test/testfiles/editors/LaterBindingSMV-LSVS.scd b/packages/open-scd/test/testfiles/editors/LaterBindingSMV-LSVS.scd new file mode 100644 index 0000000000..9d856d4a68 --- /dev/null +++ b/packages/open-scd/test/testfiles/editors/LaterBindingSMV-LSVS.scd @@ -0,0 +1,1115 @@ + +
    + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100 + + + +
    +

    01-0C-CD-04-00-02

    +

    0003

    +
    +
    + +
    +

    01-0C-CD-04-00-01

    +

    0002

    +
    +
    + +
    +

    01-0C-CD-04-00-00

    +

    0001

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SMV_Publisher2CurrentTransformer/LLN0.fullSmv + + + + + + + + SMV_Publisher2CurrentTransformer/LLN0.voltageOnly + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SMV_PublisherCurrentTransformer/LLN0.currrentOnly + + + + + + + SMV_PublisherCurrentTransformer/LLN0.currrentOnly + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SMV_PublisherCurrentTransformer/LLN0.currrentOnly + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SMV_PublisherCurrentTransformer/LLN0.currrentOnly + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SMV_PublisherCurrentTransformer/LLN0.currrentOnly + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-7-4:2007B4 + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + A + + + + + 0.01 + + + 0 + + + + + Hz + + + + + + + + + A + + + + + 0.001 + + + 0 + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + unknown + forward + backward + both + + + y + z + a + f + p + n + µ + m + c + d + + da + h + k + M + G + T + P + E + Z + Y + + + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + Bq + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + W/m² + J/m² + S/m + K/s + Pa/s + J/kg K + VA + Watts + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + h + min + Ohm/m + percent/s + + + Ok + Warning + Alarm + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + diff --git a/packages/open-scd/test/testfiles/editors/LaterBindingSMV2003.scd b/packages/open-scd/test/testfiles/editors/LaterBindingSMV2003.scd new file mode 100644 index 0000000000..46902f0385 --- /dev/null +++ b/packages/open-scd/test/testfiles/editors/LaterBindingSMV2003.scd @@ -0,0 +1,480 @@ + +
    + + + 110 + + + + + + + + + 100 + + + +
    +

    01-0C-CD-04-00-02

    +

    0003

    +
    +
    + +
    +

    01-0C-CD-04-00-01

    +

    0002

    +
    +
    + +
    +

    01-0C-CD-04-00-00

    +

    0001

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-7-4:2007B4 + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + A + + + + + 0.01 + + + 0 + + + + + Hz + + + + + + + + + A + + + + + 0.001 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + unknown + forward + backward + both + + + y + z + a + f + p + n + µ + m + c + d + + da + h + k + M + G + T + P + E + Z + Y + + + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + Bq + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + W/m² + J/m² + S/m + K/s + Pa/s + J/kg K + VA + Watts + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + h + min + Ohm/m + percent/s + + + Ok + Warning + Alarm + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + diff --git a/packages/open-scd/test/testfiles/editors/LaterBindingSMV2007B4.scd b/packages/open-scd/test/testfiles/editors/LaterBindingSMV2007B4.scd new file mode 100644 index 0000000000..477c2ddac1 --- /dev/null +++ b/packages/open-scd/test/testfiles/editors/LaterBindingSMV2007B4.scd @@ -0,0 +1,526 @@ + +
    + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100 + + + +
    +

    01-0C-CD-04-00-02

    +

    0003

    +
    +
    + +
    +

    01-0C-CD-04-00-01

    +

    0002

    +
    +
    + +
    +

    01-0C-CD-04-00-00

    +

    0001

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-7-4:2007B4 + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + A + + + + + 0.01 + + + 0 + + + + + Hz + + + + + + + + + A + + + + + 0.001 + + + 0 + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + unknown + forward + backward + both + + + y + z + a + f + p + n + µ + m + c + d + + da + h + k + M + G + T + P + E + Z + Y + + + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + Bq + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + W/m² + J/m² + S/m + K/s + Pa/s + J/kg K + VA + Watts + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + h + min + Ohm/m + percent/s + + + Ok + Warning + Alarm + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + diff --git a/packages/open-scd/test/testfiles/editors/MessageBindingGOOSE2007B4.scd b/packages/open-scd/test/testfiles/editors/MessageBindingGOOSE2007B4.scd new file mode 100644 index 0000000000..1fe4922bf8 --- /dev/null +++ b/packages/open-scd/test/testfiles/editors/MessageBindingGOOSE2007B4.scd @@ -0,0 +1,800 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-01-00-10

    +

    005

    +

    4

    +

    0010

    +
    +
    + +

    RJ45

    +
    +
    +
    + + +
    +

    192.168.0.112

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    + +
    +

    192.168.0.113

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-04-00-20

    +

    007

    +

    4

    +

    4002

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + IED2 + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + + 1 + + + + sbo-with-enhanced-security + + + + + + + IED2CBSW/LLN0.GCB + + + + + + + + + + status-only + + + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + + 1 + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + on + blocked + test + test/blocked + off + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + +
    \ No newline at end of file diff --git a/packages/open-scd/test/testfiles/editors/MessageBindingSMV2007B4.scd b/packages/open-scd/test/testfiles/editors/MessageBindingSMV2007B4.scd new file mode 100644 index 0000000000..c41e36af1f --- /dev/null +++ b/packages/open-scd/test/testfiles/editors/MessageBindingSMV2007B4.scd @@ -0,0 +1,859 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-01-00-10

    +

    005

    +

    4

    +

    0010

    +
    +
    + +

    RJ45

    +
    +
    +
    + + +
    +

    192.168.0.112

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    + +
    +

    192.168.0.113

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-04-00-20

    +

    007

    +

    4

    +

    4002

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + IED2 + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + + 1 + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + IED3MU01/LLN0.MSVCB01 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + + 1 + + + + sbo-with-enhanced-security + + + + + + + IED3MU01/LLN0.MSVCB01 + + + + + + + + + + status-only + + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + on + blocked + test + test/blocked + off + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + +
    \ No newline at end of file diff --git a/packages/open-scd/test/testfiles/editors/iedEditorWithIEDs.scd b/packages/open-scd/test/testfiles/editors/iedEditorWithIEDs.scd new file mode 100644 index 0000000000..80945ab95e --- /dev/null +++ b/packages/open-scd/test/testfiles/editors/iedEditorWithIEDs.scd @@ -0,0 +1,720 @@ + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-01-00-10

    +

    005

    +

    4

    +

    0010

    +
    +
    + +

    RJ45

    +
    +
    +
    + + +
    +

    192.168.0.112

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    + +
    +

    192.168.0.113

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-04-00-20

    +

    007

    +

    4

    +

    4002

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + status-only + + + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + + 1 + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.001 + 0.005 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    diff --git a/packages/open-scd/test/testfiles/editors/iedEditorWithoutIEDs.scd b/packages/open-scd/test/testfiles/editors/iedEditorWithoutIEDs.scd new file mode 100644 index 0000000000..05608c85bc --- /dev/null +++ b/packages/open-scd/test/testfiles/editors/iedEditorWithoutIEDs.scd @@ -0,0 +1,396 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-01-00-10

    +

    005

    +

    4

    +

    0010

    +
    +
    + +

    RJ45

    +
    +
    +
    + + +
    +

    192.168.0.112

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    + +
    +

    192.168.0.113

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-04-00-20

    +

    007

    +

    4

    +

    4002

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    diff --git a/packages/open-scd/test/testfiles/editors/substation/Line.scd b/packages/open-scd/test/testfiles/editors/substation/Line.scd new file mode 100644 index 0000000000..34b7904fcf --- /dev/null +++ b/packages/open-scd/test/testfiles/editors/substation/Line.scd @@ -0,0 +1,235 @@ + +
    + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + + + 1000 + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + status-only + + + pulse + persistent + persistent-feedback + + + Ok + Warning + Alarm + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + + + + + + + 110.0 + + + + + + + + + + + + + + 380.0 + + + + + diff --git a/packages/open-scd/test/testfiles/editors/substation/Process.scd b/packages/open-scd/test/testfiles/editors/substation/Process.scd new file mode 100644 index 0000000000..1dccf6eeae --- /dev/null +++ b/packages/open-scd/test/testfiles/editors/substation/Process.scd @@ -0,0 +1,69 @@ + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 380.0 + + + + + + diff --git a/packages/open-scd/test/testfiles/editors/substation/TapChanger.scd b/packages/open-scd/test/testfiles/editors/substation/TapChanger.scd new file mode 100644 index 0000000000..18717c4a8f --- /dev/null +++ b/packages/open-scd/test/testfiles/editors/substation/TapChanger.scd @@ -0,0 +1,268 @@ + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + + + 1000 + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + status-only + + + pulse + persistent + persistent-feedback + + + Ok + Warning + Alarm + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + diff --git a/packages/open-scd/test/testfiles/editors/substation/TransformerWinding.scd b/packages/open-scd/test/testfiles/editors/substation/TransformerWinding.scd new file mode 100755 index 0000000000..72aed132d3 --- /dev/null +++ b/packages/open-scd/test/testfiles/editors/substation/TransformerWinding.scd @@ -0,0 +1,253 @@ + +
    + + + + + + + + + + + + + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + + + 1000 + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + status-only + + + pulse + persistent + persistent-feedback + + + Ok + Warning + Alarm + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + diff --git a/packages/open-scd/test/testfiles/editors/substation/generalequipment.scd b/packages/open-scd/test/testfiles/editors/substation/generalequipment.scd new file mode 100644 index 0000000000..ee6eef54df --- /dev/null +++ b/packages/open-scd/test/testfiles/editors/substation/generalequipment.scd @@ -0,0 +1,252 @@ + +
    + + + + + + + + + + + + + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + + + 1000 + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + status-only + + + pulse + persistent + persistent-feedback + + + Ok + Warning + Alarm + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + diff --git a/packages/open-scd/test/testfiles/foundation/compare-changed.cid b/packages/open-scd/test/testfiles/foundation/compare-changed.cid new file mode 100644 index 0000000000..927eb7d7fa --- /dev/null +++ b/packages/open-scd/test/testfiles/foundation/compare-changed.cid @@ -0,0 +1,359 @@ + + + CIM DLA + CID + +
    + + + + + + + + + + + +
    + + + 380.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 30.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 380.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 30.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/packages/open-scd/test/testfiles/foundation/compare-original.cid b/packages/open-scd/test/testfiles/foundation/compare-original.cid new file mode 100644 index 0000000000..516e208b2c --- /dev/null +++ b/packages/open-scd/test/testfiles/foundation/compare-original.cid @@ -0,0 +1,203 @@ + + + CIM DLA + CID + +
    + + + + + + + + + + +
    + + + 380.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 30.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/packages/open-scd/test/testfiles/foundation/sclbasics.scd b/packages/open-scd/test/testfiles/foundation/sclbasics.scd new file mode 100644 index 0000000000..af173598b2 --- /dev/null +++ b/packages/open-scd/test/testfiles/foundation/sclbasics.scd @@ -0,0 +1,1535 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1000 + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1000 + + + direct-with-enhanced-security + + + + + + + + + + + 6000 + + + direct-with-enhanced-security + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + + + 6000 + + + direct-with-enhanced-security + + + + + + + + + status-only + + + + + + + + + IEC 61850-7-4:2007B4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + 1000 + + + direct-with-enhanced-security + + + + + + + + + + 1000 + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.001 + + + 0 + + + + + 0.01 + + + 0 + + + + + A + + + + + A + + + + + Hz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + on + blocked + test + test/blocked + off + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + status-only + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + y + z + a + f + p + n + µ + m + c + d + + da + h + k + M + G + T + P + E + Z + Y + + + V + A + other + Synchrophasor + + + None + ANSI Extremely Inverse + ANSI Very Inverse + ANSI Normal Inverse + ANSI Moderate Inverse + ANSI Definite Time + Long-Time Extremely Inverse + Long-Time Very Inverse + Long-Time Inverse + IEC Normal Inverse + IEC Very Inverse + IEC Inverse + IEC Extremely Inverse + IEC Short-Time Inverse + IEC Long-Time Inverse + IEC Definite Tim + Reserved + + + unknown + forward + backward + both + + + fundamental + rms + absolute + + + reserved + January + February + March + April + May + June + July + August + September + October + November + December + + + Time + WeekDay + WeekOfYear + DayOfMonth + DayOfYear + + + pulse + persistent + persistent-feedback + + + Hour + Day + Week + Month + Year + + + Va + Vb + Vc + Aa + Ab + Ac + Vab + Vbc + Vca + Vother + Aother + Synchrophasor + + + unknown + forward + backward + + + A + B + C + Synchrophasor + + + normal + high + low + high-high + low-low + + + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + Bq + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + W/m² + J/m² + S/m + K/s + Pa/s + J/kg K + VA + Watts + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + h + min + Ohm/m + percent/s + + + operate-once + operate-many + + + pos-neg-zero + dir-quad-zero + + + unknown + critical + major + minor + warning + + + reserved + Monday + Tuesday + Wednesday + Thursday + Friday + Saturday + Sunday + + + Completed + Cancelled + New adjustments + Under way + + + PhaseA + PhaseB + PhaseAB + PhaseC + PhaseAC + PhaseBC + PhaseABC + None + + + Ready + InProgress + + Successful + WaitingForTrip + TripFromProtection + FaultDisappeared + WaitToComplete + CBclosed + CycleUnsuccessful + Unsuccessful + Aborted + NotReady + + + None + Open + Close-Open + Open-Close-Open + Close-Open-Close-Open + Open-Close-Open-Close-Open + more + + + MS + PER_CYCLE + CYCLE + DAY + WEEK + MONTH + YEAR + EXTERNAL + + + UNSPECIFIED + TRUE_RMS + PEAK_FUNDAMENTAL + RMS_FUNDAMENTAL + MIN + MAX + AVG + SDV + PREDICTION + RATE + P-CLASS + M-CLASS + DIFF + + + TOTAL + PERIOD + SLIDING + + + Unknown + SNTP + PTP + IRIG-B + Substation internal + + + InternalClock + LocalAreaClock + GlobalAreaClock + + + Locked + Unlocked10s + Unlocked100s + Unlocked1000s + UnlockedMoreThan1000s + + + NonDirectional + Forward + Reverse + + + Current + Breaker Status + Both current and breaker status + Other + + + PhaseAtoGround + PhaseBtoGround + PhaseCtoGround + PhaseAtoB + PhaseBtoC + PhaseCtoA + Others + + + At Start Moment + At Trip Moment + Peak Fault Value + + + Low pass + High pass + Bandpass + Bandstop + Deadband + + + Slow time delay + Fast time delay + Fast acting + Very fast acting + Not applicable / Unknown + Other + + + Ok + Warning + Alarm + + + 0.05 + 0.1 + 0.2 + 0.2S + 0.5 + 0.5S + 1 + 3 + 5 + + + 1 + 3 + 5 + 6 + 10 + + + Unknown + Normal Time + Last minute of the day has 61 seconds + Last minute of the day has 59 seconds + + + Positive or Rising + Negative or Falling + Both + Other + + + Dead Line, Dead Bus + Live Line, Dead Bus + Dead Line, Live Bus + Dead Line, Dead Bus OR Live Line, Dead Bus + Dead Line, Dead Bus OR Dead Line, Live Bus + Live Line, Dead Bus OR Dead Line, Live Bus + Dead Line, Dead Bus OR Live Line, Dead Bus OR Dead Line, Live Bus + + + Air + Water + Steam + Oil + Hydrogen + Natural gas + Butane + Propane + Waste gas + Not applicable / Unknown + Other + + + Gaseous + Liquid + Solid + Not applicable / Unknown + Other + + + IEC + EEI + + + P + I + D + PI + PD + ID + PID + + + None + Close + Open + Close and Open + + + Master/Slave + Master/Slave with fixed slave position + Master/Slave with variable slave position + Parallel operation without communication + + + Master + Slave + Independent + + + No Mode predefined + Master + Follower + Power Factor + Negative Reactance + Circulating Current + Circulating Reactive Current (var balancing) + Circulating Reactive Current by equalizing power factor + + + None + Zero Sequence Current + Zero Sequence Voltage + Negative Sequence Voltage + Phase to Phase Voltages + Phase to Ground Voltages + Positive sequence voltage + + + Overwrite existing values + Stop when full or saturated + + + Current + Voltage + Active Power + + + None + Definite Time Delayed Reset + Inverse Reset + + + None + Harmonic2 + Harmonic5 + Harmonic2and5 + WaveformAnalysis + WaveformAnalysisAndHarmonic2 + Other + WaveformAnalysisAndHarmonic5 + WaveformAnalysisAndHarmonic2AndHarmonic5 + + + Off + Without Check + With Current Check + With Breaker Status Check + With Current and Breaker Status Check + Other Checks + + + Stopped + Stopping + Started + Starting + Disabled + + + Clockwise + Counter-Clockwise + Unknown + + + Cold + Warm + Overload + + + SwitchCommand + BreakerClosed + VoltageAndCurrentLevel + + + ExternalSignal + VoltageAndCurrent + ExternalSignal or VoltageAndCurrent + + + Vector + Arithmetic + + + None + Missing valid NumEnt + Missing valid SchdIntv + Missing valid schedule values + Inconsistent values CDC + Missing valid StrTm + Other + + + Not ready + Start Time required + Ready + Running + + + Ended normally + Ended with overshoot + Cancelled: measurement was deviating + Cancelled: loss of communication with dispatch centre + Cancelled: loss of communication with local area network + Cancelled: loss of communication with the local interface + Cancelled: timeout + Cancelled: voluntarily + Cancelled: noisy environments + Cancelled: material failure + Cancelled: new set-point request + Cancelled: improper environment (blockage) + Cancelled: stability time was reached + Cancelled: immobilisation time was reached + Cancelled: equipment was in the wrong mode + Unknown causes + + + Inactive + Stage1 + Stage2 + Stage3 + + + Load Break + Disconnector + Earthing Switch + High Speed Earthing Switch + + + None + Open + Close + Open and Close + + + Automatic-synchronizing + Automatic-paralleling + Manual + Test + + + pressure only + level only + both pressure and level + + + Unknown + P + PR + PX + PXR + TPX + TPY + TPZ + TPE + + + Unused + Blocking + Permissive + Direct + Unblocking + Status + + + Internal + External + Both + + + Single Pole Tripping + Undefined + Three Pole Tripping + + + 3 phase tripping + 1 or 3 phase tripping + specific + 1 phase tripping + + + Not tuned + Tuned + Tuned but not compensated + Umax + Umax but not compensated + Umax but not compensated due to U continous limitation + + + Negative sequence + Zero sequence + Neg-pos sequence + Zero-pos sequence + Phase vector comparison + Others + + + Off + Permanent + Time window + + + Voltage + Voltage and Current + Voltage and Normally Open breaker contact + Voltage and Normally Closed breaker contact + Voltage and Normally Open and Normally Closed breaker contacts + Normally Open breaker contact + Normally Closed breaker contact + Both Normally Open and Normally Closed breaker contacts + + + Off + Operate + Echo + Echo and Operate + + + + diff --git a/packages/open-scd/test/testfiles/foundation/testFile73.nsdoc b/packages/open-scd/test/testfiles/foundation/testFile73.nsdoc new file mode 100644 index 0000000000..1d0f4e2081 --- /dev/null +++ b/packages/open-scd/test/testfiles/foundation/testFile73.nsdoc @@ -0,0 +1,9 @@ + + + + + diff --git a/packages/open-scd/test/testfiles/foundation/testFile74.nsdoc b/packages/open-scd/test/testfiles/foundation/testFile74.nsdoc new file mode 100644 index 0000000000..8b8ae4c8d5 --- /dev/null +++ b/packages/open-scd/test/testfiles/foundation/testFile74.nsdoc @@ -0,0 +1,10 @@ + + + + + + diff --git a/packages/open-scd/test/testfiles/foundation/testFile81.nsdoc b/packages/open-scd/test/testfiles/foundation/testFile81.nsdoc new file mode 100644 index 0000000000..453790e353 --- /dev/null +++ b/packages/open-scd/test/testfiles/foundation/testFile81.nsdoc @@ -0,0 +1,9 @@ + + + + + diff --git a/packages/open-scd/test/testfiles/history.scd b/packages/open-scd/test/testfiles/history.scd new file mode 100644 index 0000000000..675d5deab6 --- /dev/null +++ b/packages/open-scd/test/testfiles/history.scd @@ -0,0 +1,14 @@ + + +
    + + + + + + + + + +
    +
    diff --git a/packages/open-scd/test/testfiles/importieds/duplicate.iid b/packages/open-scd/test/testfiles/importieds/duplicate.iid new file mode 100644 index 0000000000..151d232279 --- /dev/null +++ b/packages/open-scd/test/testfiles/importieds/duplicate.iid @@ -0,0 +1,33 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/open-scd/test/testfiles/importieds/emptyproject.scd b/packages/open-scd/test/testfiles/importieds/emptyproject.scd new file mode 100644 index 0000000000..bb86b29f30 --- /dev/null +++ b/packages/open-scd/test/testfiles/importieds/emptyproject.scd @@ -0,0 +1,4 @@ + + +
    + diff --git a/packages/open-scd/test/testfiles/importieds/invalid.iid b/packages/open-scd/test/testfiles/importieds/invalid.iid new file mode 100644 index 0000000000..b167fab032 --- /dev/null +++ b/packages/open-scd/test/testfiles/importieds/invalid.iid @@ -0,0 +1,4 @@ + + +
    + \ No newline at end of file diff --git a/packages/open-scd/test/testfiles/importieds/multipleied.scd b/packages/open-scd/test/testfiles/importieds/multipleied.scd new file mode 100644 index 0000000000..e7a04f29bb --- /dev/null +++ b/packages/open-scd/test/testfiles/importieds/multipleied.scd @@ -0,0 +1,648 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-01-00-10

    +

    005

    +

    4

    +

    0010

    +
    +
    + +

    RJ45

    +
    +
    +
    + + +
    +

    192.168.0.112

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    + +
    +

    192.168.0.113

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-04-00-20

    +

    007

    +

    4

    +

    4002

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + + 1 + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    \ No newline at end of file diff --git a/packages/open-scd/test/testfiles/importieds/parsererror.iid b/packages/open-scd/test/testfiles/importieds/parsererror.iid new file mode 100644 index 0000000000..bca88a3399 --- /dev/null +++ b/packages/open-scd/test/testfiles/importieds/parsererror.iid @@ -0,0 +1 @@ +SCL xmlns="http://www.iec.ch/61850/2003/SCL" version="2007" revision="B" release="4" \ No newline at end of file diff --git a/packages/open-scd/test/testfiles/importieds/template.icd b/packages/open-scd/test/testfiles/importieds/template.icd new file mode 100644 index 0000000000..e79f85d95f --- /dev/null +++ b/packages/open-scd/test/testfiles/importieds/template.icd @@ -0,0 +1,49 @@ + + +
    + + + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/open-scd/test/testfiles/importieds/valid.iid b/packages/open-scd/test/testfiles/importieds/valid.iid new file mode 100644 index 0000000000..b9dff24654 --- /dev/null +++ b/packages/open-scd/test/testfiles/importieds/valid.iid @@ -0,0 +1,463 @@ + + +
    + + + 110.0 + + + + + + + + + + + + + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    +
    +
    + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2019-11-07 08:52:28 + + + IEC 61850-7-4:2007 + + + + + + + OMICRON electronics + + + OMICRON PRISCILLA Type G Rev: 0002 + + + 2.11.0014 + + + AM156K + + + ISIO 200 + + + + + not a proxy + + + + + sbo-with-enhanced-security + + + 30000 + + + 10000 + + + + + + + + + + + + + 2019-11-07 08:52:28 + + + + + + + + pulse + + + 100 + + + 0 + + + 1 + + + + + + + + + + + + + 2019-11-07 08:52:28 + + + + + + sbo-with-enhanced-security + + + 30000 + + + 1000 + + + + + + + + + + 2019-11-07 08:52:28 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TestVendor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + on + + + + + status-only + + + + + + + + status-only + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + status-only + + + 0 + + + 0 + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + on + test + off + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + status-only + + + pulse + persistent + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + + + \ No newline at end of file diff --git a/packages/open-scd/test/testfiles/invalid2007B.scd b/packages/open-scd/test/testfiles/invalid2007B.scd new file mode 100644 index 0000000000..9df7bef778 --- /dev/null +++ b/packages/open-scd/test/testfiles/invalid2007B.scd @@ -0,0 +1,20 @@ + + +

    + TrainingIEC61850 + + +
    + + + 110 + + + + + + + + + + diff --git a/packages/open-scd/test/testfiles/lnodewizard.scd b/packages/open-scd/test/testfiles/lnodewizard.scd new file mode 100644 index 0000000000..86d836201d --- /dev/null +++ b/packages/open-scd/test/testfiles/lnodewizard.scd @@ -0,0 +1,608 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    +
    + + +
    +

    192.168.0.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    diff --git a/packages/open-scd/test/testfiles/menu/compare-ied-changed.scd b/packages/open-scd/test/testfiles/menu/compare-ied-changed.scd new file mode 100644 index 0000000000..6dafa10bc5 --- /dev/null +++ b/packages/open-scd/test/testfiles/menu/compare-ied-changed.scd @@ -0,0 +1,511 @@ + +
    + TrainingIEC61850 + + + +
    + + + + + + + + + + + + + + + + + + + + + + Ok + + + + + Newest model + + + Other value + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 60 + + + + + + 5 + + + + + + 100 + + + + + + + 20 + + + + + + + 100 + + + + + + + + + + SomeOtherVendor + + + + + + + + 60 + + + + + + + 1000 + + + + + + + 1000 + + + + + + 5 + + + + + + 200 + + + + + + + + + + + + 60 + + + + + + + 5000 + + + + + + 200 + + + + + + 25 + + + + + + + + + + + + 60 + + + + + + + 10000 + + + + + + 200 + + + + + + 500 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + +
    diff --git a/packages/open-scd/test/testfiles/menu/compare-ied-original.scd b/packages/open-scd/test/testfiles/menu/compare-ied-original.scd new file mode 100644 index 0000000000..5ba1094a2a --- /dev/null +++ b/packages/open-scd/test/testfiles/menu/compare-ied-original.scd @@ -0,0 +1,472 @@ + +
    + TrainingIEC61850 + + + +
    + + + + + + + + + + + + + + + + + + + + + + Newest model + + + Some value + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 50 + + + + + + 1 + + + + + + 40 + + + + + + + 40 + + + + + + + 40 + + + + + + + + + + SomeVendor + + + + + + + + 50 + + + + + + + 400 + + + + + + + 400 + + + + + + 1 + + + + + + 400 + + + + + + + + + + + + 50 + + + + + + + 10000 + + + + + + 100 + + + + + + 100 + + + + + + + + + + + + 50 + + + + + + + 110000 + + + + + + 100 + + + + + + 1100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + +
    diff --git a/packages/open-scd/test/testfiles/missingCommunication.scd b/packages/open-scd/test/testfiles/missingCommunication.scd new file mode 100644 index 0000000000..f7f65baa4a --- /dev/null +++ b/packages/open-scd/test/testfiles/missingCommunication.scd @@ -0,0 +1,458 @@ + + +
    + TrainingIEC61850 + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    diff --git a/packages/open-scd/test/testfiles/missingSubstation.scd b/packages/open-scd/test/testfiles/missingSubstation.scd new file mode 100644 index 0000000000..f7f65baa4a --- /dev/null +++ b/packages/open-scd/test/testfiles/missingSubstation.scd @@ -0,0 +1,458 @@ + + +
    + TrainingIEC61850 + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    diff --git a/packages/open-scd/test/testfiles/no-history.scd b/packages/open-scd/test/testfiles/no-history.scd new file mode 100644 index 0000000000..d482a4c03f --- /dev/null +++ b/packages/open-scd/test/testfiles/no-history.scd @@ -0,0 +1,5 @@ + + +
    +
    +
    diff --git a/packages/open-scd/test/testfiles/nsdoc/IEC_61850-7-2.nsdoc b/packages/open-scd/test/testfiles/nsdoc/IEC_61850-7-2.nsdoc new file mode 100644 index 0000000000..d10a9893cb --- /dev/null +++ b/packages/open-scd/test/testfiles/nsdoc/IEC_61850-7-2.nsdoc @@ -0,0 +1,7 @@ + + + diff --git a/packages/open-scd/test/testfiles/nsdoc/invalid.nsdoc b/packages/open-scd/test/testfiles/nsdoc/invalid.nsdoc new file mode 100644 index 0000000000..99f4ab6443 --- /dev/null +++ b/packages/open-scd/test/testfiles/nsdoc/invalid.nsdoc @@ -0,0 +1,7 @@ + + + + + + + diff --git a/packages/open-scd/test/testfiles/nsdoc/wrong-version.nsdoc b/packages/open-scd/test/testfiles/nsdoc/wrong-version.nsdoc new file mode 100644 index 0000000000..4260851f12 --- /dev/null +++ b/packages/open-scd/test/testfiles/nsdoc/wrong-version.nsdoc @@ -0,0 +1,7 @@ + + + diff --git a/packages/open-scd/test/testfiles/subscriberinfo2003.scd b/packages/open-scd/test/testfiles/subscriberinfo2003.scd new file mode 100644 index 0000000000..42277bb43c --- /dev/null +++ b/packages/open-scd/test/testfiles/subscriberinfo2003.scd @@ -0,0 +1,655 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-01-00-10

    +

    005

    +

    4

    +

    0010

    +
    +
    + +

    RJ45

    +
    +
    +
    + + +
    +

    192.168.0.112

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    + +
    +

    192.168.0.113

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-04-00-20

    +

    007

    +

    4

    +

    4002

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + + 1 + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    \ No newline at end of file diff --git a/packages/open-scd/test/testfiles/subscriberinfo2007.scd b/packages/open-scd/test/testfiles/subscriberinfo2007.scd new file mode 100644 index 0000000000..678919071a --- /dev/null +++ b/packages/open-scd/test/testfiles/subscriberinfo2007.scd @@ -0,0 +1,661 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-01-00-10

    +

    005

    +

    4

    +

    0010

    +
    +
    + +

    RJ45

    +
    +
    +
    + + +
    +

    192.168.0.112

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    + +
    +

    192.168.0.113

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-04-00-20

    +

    007

    +

    4

    +

    4002

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + + 1 + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    diff --git a/packages/open-scd/test/testfiles/templates/datypes.scd b/packages/open-scd/test/testfiles/templates/datypes.scd new file mode 100644 index 0000000000..6c56cc0cd4 --- /dev/null +++ b/packages/open-scd/test/testfiles/templates/datypes.scd @@ -0,0 +1,591 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    +
    + + +
    +

    192.168.0.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    diff --git a/packages/open-scd/test/testfiles/templates/dotypes.scd b/packages/open-scd/test/testfiles/templates/dotypes.scd new file mode 100644 index 0000000000..b26c94203d --- /dev/null +++ b/packages/open-scd/test/testfiles/templates/dotypes.scd @@ -0,0 +1,745 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    +
    + + +
    +

    192.168.0.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + kV/mA + kA/V + ohm/m + ppm/°C + F/m + H/m + ms/kPa + kPa + ms/V + ms/K + V/s + I/Ir*s + 1/week + 1/d + 1/h + 1/min + periods + GB + cycle + mile + inch + °F + I/IrObj + MB + KB + Bytes + p.u. + day(s) + % + F/mi + ohm/mi + F/km + ohm/km + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + W/m² + J/m² + S/m + K/s + Pa/s + J/kg K + VA + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + h + min + + + y + z + a + f + p + n + µ + m + c + d + + da + h + k + M + G + T + P + E + Z + Y + + +
    diff --git a/packages/open-scd/test/testfiles/templates/missingdatatypes.scd b/packages/open-scd/test/testfiles/templates/missingdatatypes.scd new file mode 100644 index 0000000000..9df7bef778 --- /dev/null +++ b/packages/open-scd/test/testfiles/templates/missingdatatypes.scd @@ -0,0 +1,20 @@ + + +
    + TrainingIEC61850 + + +
    + + + 110 + + + + + + + + + +
    diff --git a/packages/open-scd/test/testfiles/updatedesc/testSignalListComma.csv b/packages/open-scd/test/testfiles/updatedesc/testSignalListComma.csv new file mode 100644 index 0000000000..290848a571 --- /dev/null +++ b/packages/open-scd/test/testfiles/updatedesc/testSignalListComma.csv @@ -0,0 +1,12 @@ + +CB_CLOSED,IED2,IN101 +CB_OPEN,IED2,IN102 +BB1_DS_CLOSED,IED2,IN103 +BB1_DS_OPEN,IED2,IN104 +BB2_DS_CLOSED,IED2,IN105 +BB2_DS_OPEN,IED2,IN106 +LINE_DS_CLOSED,IED2,IN107 +LINE_DS_CLOSED,IED2 +LINE_DS_CLOSED +LINE_DS_CLOSED,IED2,"IN,107" +, \ No newline at end of file diff --git a/packages/open-scd/test/testfiles/updatedesc/testSignalListSemicolon.csv b/packages/open-scd/test/testfiles/updatedesc/testSignalListSemicolon.csv new file mode 100644 index 0000000000..1959ea63fd --- /dev/null +++ b/packages/open-scd/test/testfiles/updatedesc/testSignalListSemicolon.csv @@ -0,0 +1,10 @@ +CB_CLOSED;IED2;IN101 +CB_OPEN;IED2;IN102 +BB1_DS_CLOSED;IED2;IN103 +BB1_DS_OPEN;IED2;IN104 +BB2_DS_CLOSED;IED2;IN105 +BB2_DS_OPEN;IED2;IN106 +LINE_DS_CLOSED;IED2;"IN107" +LINE_DS_CLOSED;"IED2" +LINE_DS_CLOSED +; \ No newline at end of file diff --git a/packages/open-scd/test/testfiles/updatedesc/updatedescABB.scd b/packages/open-scd/test/testfiles/updatedesc/updatedescABB.scd new file mode 100644 index 0000000000..84cca441ec --- /dev/null +++ b/packages/open-scd/test/testfiles/updatedesc/updatedescABB.scd @@ -0,0 +1,66 @@ + + +
    + TrainingIEC61850 + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/packages/open-scd/test/testfiles/updatedesc/updatedescSEL.scd b/packages/open-scd/test/testfiles/updatedesc/updatedescSEL.scd new file mode 100644 index 0000000000..dd67dc46b0 --- /dev/null +++ b/packages/open-scd/test/testfiles/updatedesc/updatedescSEL.scd @@ -0,0 +1,111 @@ + + +
    + TrainingIEC61850 + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + SEL + + + + Main Board Inputs + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/packages/open-scd/test/testfiles/updatesubstation-ours.scd b/packages/open-scd/test/testfiles/updatesubstation-ours.scd new file mode 100644 index 0000000000..0596d8c6e1 --- /dev/null +++ b/packages/open-scd/test/testfiles/updatesubstation-ours.scd @@ -0,0 +1,90 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + status-only + + + + + + + + +
    diff --git a/packages/open-scd/test/testfiles/valid2003.scd b/packages/open-scd/test/testfiles/valid2003.scd new file mode 100644 index 0000000000..61e270ce98 --- /dev/null +++ b/packages/open-scd/test/testfiles/valid2003.scd @@ -0,0 +1,480 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    +
    + + +
    +

    192.168.0.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    diff --git a/packages/open-scd/test/testfiles/valid2007B.scd b/packages/open-scd/test/testfiles/valid2007B.scd new file mode 100644 index 0000000000..b0f1abee86 --- /dev/null +++ b/packages/open-scd/test/testfiles/valid2007B.scd @@ -0,0 +1,506 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    +
    + + +
    +

    192.168.0.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + status-only + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + Ok + Warning + Alarm + + + Load Break + Disconnector + Earthing Switch + High Speed Earthing Switch + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    diff --git a/packages/open-scd/test/testfiles/valid2007B4.scd b/packages/open-scd/test/testfiles/valid2007B4.scd new file mode 100644 index 0000000000..63eb27dc7c --- /dev/null +++ b/packages/open-scd/test/testfiles/valid2007B4.scd @@ -0,0 +1,673 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-01-00-10

    +

    005

    +

    4

    +

    0010

    +
    +
    + +

    RJ45

    +
    +
    +
    + + +
    +

    192.168.0.112

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    + +
    +

    192.168.0.113

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-04-00-20

    +

    007

    +

    4

    +

    4002

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + + 1 + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    \ No newline at end of file diff --git a/packages/open-scd/test/testfiles/valid2007B4ForDAIValidation.scd b/packages/open-scd/test/testfiles/valid2007B4ForDAIValidation.scd new file mode 100644 index 0000000000..f9299fbb3b --- /dev/null +++ b/packages/open-scd/test/testfiles/valid2007B4ForDAIValidation.scd @@ -0,0 +1,759 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-01-00-10

    +

    005

    +

    4

    +

    0010

    +
    +
    + +

    RJ45

    +
    +
    +
    + + +
    +

    192.168.0.112

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    + +
    +

    192.168.0.113

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-04-00-20

    +

    007

    +

    4

    +

    4002

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + true + + + blocked + + + 659.3 + + + 1111659.8 + + + 5 + + + 500 + + + 8321 + + + 83218 + + + -543923 + + + -8 + + + 99 + + + 20000 + + + 654321 + + + 2 + + + 2022-03-24T12:34:56.000 + + + 0000-00-00T00:00:00.000 + + + pull-ups + + + lat pulldown + + + bench press + + + front squat + + + deadlift + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + + 1 + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    diff --git a/packages/open-scd/test/testfiles/valid2007B4withIEDModifications.scd b/packages/open-scd/test/testfiles/valid2007B4withIEDModifications.scd new file mode 100644 index 0000000000..dbe24acee4 --- /dev/null +++ b/packages/open-scd/test/testfiles/valid2007B4withIEDModifications.scd @@ -0,0 +1,693 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-01-00-10

    +

    005

    +

    4

    +

    0010

    +
    +
    + +

    RJ45

    +
    +
    +
    + + +
    +

    192.168.0.112

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    + +
    +

    192.168.0.113

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-04-00-20

    +

    007

    +

    4

    +

    4002

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + status-only + + + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + + 1 + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    diff --git a/packages/open-scd/test/testfiles/valid2007B4withSubstationXY.scd b/packages/open-scd/test/testfiles/valid2007B4withSubstationXY.scd new file mode 100644 index 0000000000..7363f7b684 --- /dev/null +++ b/packages/open-scd/test/testfiles/valid2007B4withSubstationXY.scd @@ -0,0 +1,716 @@ + + +
    + TrainingIEC61850 + + + +
    + + + + + + + + + + b80686f1-a514-477b-a83b-78f1cbe8a582 + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-01-00-10

    +

    005

    +

    4

    +

    0010

    +
    +
    + +

    RJ45

    +
    +
    +
    + + +
    +

    192.168.0.112

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    + +
    +

    192.168.0.113

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-04-00-20

    +

    007

    +

    4

    +

    4002

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + + 1 + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    \ No newline at end of file diff --git a/packages/open-scd/test/testfiles/validators/datatypetemplateerrors.scd b/packages/open-scd/test/testfiles/validators/datatypetemplateerrors.scd new file mode 100644 index 0000000000..4fcc8359ac --- /dev/null +++ b/packages/open-scd/test/testfiles/validators/datatypetemplateerrors.scd @@ -0,0 +1,595 @@ + + +
    + TrainingIEC61850 + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + direct-with-normal-security + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + normal + high + low + high-high + low-low + + + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + Bq + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + VA + Watts + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + h + min + + + y + z + a + f + p + n + µ + m + c + d + + da + h + k + M + G + T + P + E + Z + Y + + +
    diff --git a/packages/open-scd/test/testfiles/validators/doandsdotestfile.scd b/packages/open-scd/test/testfiles/validators/doandsdotestfile.scd new file mode 100644 index 0000000000..0f134d3042 --- /dev/null +++ b/packages/open-scd/test/testfiles/validators/doandsdotestfile.scd @@ -0,0 +1,67 @@ + + +
    + TrainingIEC61850 + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/packages/open-scd/test/testfiles/validators/zeroissues.scd b/packages/open-scd/test/testfiles/validators/zeroissues.scd new file mode 100644 index 0000000000..c432616962 --- /dev/null +++ b/packages/open-scd/test/testfiles/validators/zeroissues.scd @@ -0,0 +1,6 @@ + + +
    + + + diff --git a/packages/open-scd/test/testfiles/virtualied/specificfromfunctions.ssd b/packages/open-scd/test/testfiles/virtualied/specificfromfunctions.ssd new file mode 100644 index 0000000000..9f9ab3c7f0 --- /dev/null +++ b/packages/open-scd/test/testfiles/virtualied/specificfromfunctions.ssd @@ -0,0 +1,401 @@ + + +
    + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-7-4:2007B4 + + + + + Earthing Switch + + + + + + + + + + + + + + + + + + Disconnector + + + + + + + + + + status-only + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + unknown + forward + backward + both + + + Load Break + Disconnector + Earthing Switch + High Speed Earthing Switch + + + status-only + + + pulse + persistent + persistent-feedback + + + Ok + Warning + Alarm + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + \ No newline at end of file diff --git a/packages/open-scd/test/testfiles/wizards/abstractda.scd b/packages/open-scd/test/testfiles/wizards/abstractda.scd new file mode 100644 index 0000000000..dedda90a60 --- /dev/null +++ b/packages/open-scd/test/testfiles/wizards/abstractda.scd @@ -0,0 +1,190 @@ + + +
    + TrainingIEC61850 + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    diff --git a/packages/open-scd/test/testfiles/wizards/communication.scd b/packages/open-scd/test/testfiles/wizards/communication.scd new file mode 100644 index 0000000000..04f69c21e1 --- /dev/null +++ b/packages/open-scd/test/testfiles/wizards/communication.scd @@ -0,0 +1,750 @@ + + +
    + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    192.168.210.111

    +
    + +
    +

    01-0C-CD-01-00-00

    +

    0000

    +
    +
    +
    +
    + + +
    +

    192.168.210.113

    +
    + +
    +

    01-0C-CD-04-00-01

    +

    4002

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + status-only + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-7-4:2007B4 + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + A + + + + + 0.01 + + + 0 + + + + + Hz + + + + + + + + + A + + + + + 0.001 + + + 0 + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + y + z + a + f + p + n + µ + m + c + d + + da + h + k + M + G + T + P + E + Z + Y + + + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + Bq + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + W/m² + J/m² + S/m + K/s + Pa/s + J/kg K + VA + Watts + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + h + min + Ohm/m + percent/s + + + Load Break + Disconnector + Earthing Switch + High Speed Earthing Switch + + + status-only + + + pulse + persistent + persistent-feedback + + + Ok + Warning + Alarm + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + diff --git a/packages/open-scd/test/testfiles/wizards/fcda.scd b/packages/open-scd/test/testfiles/wizards/fcda.scd new file mode 100644 index 0000000000..797b2a930d --- /dev/null +++ b/packages/open-scd/test/testfiles/wizards/fcda.scd @@ -0,0 +1,70 @@ + + +
    + TrainingIEC61850 + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/packages/open-scd/test/testfiles/wizards/gsecontrol.scd b/packages/open-scd/test/testfiles/wizards/gsecontrol.scd new file mode 100644 index 0000000000..d4591941db --- /dev/null +++ b/packages/open-scd/test/testfiles/wizards/gsecontrol.scd @@ -0,0 +1,690 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-01-00-10

    +

    005

    +

    4

    +

    0010

    +
    + 10 + 10000 +
    + + 10 + 10000 + + +

    RJ45

    +
    +
    +
    + + +
    +

    192.168.0.112

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    + +
    +

    192.168.0.113

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-04-00-20

    +

    007

    +

    4

    +

    4002

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + + 1 + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    diff --git a/packages/open-scd/test/testfiles/wizards/ied.scd b/packages/open-scd/test/testfiles/wizards/ied.scd new file mode 100644 index 0000000000..753b1c2131 --- /dev/null +++ b/packages/open-scd/test/testfiles/wizards/ied.scd @@ -0,0 +1,778 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-01-00-10

    +

    005

    +

    4

    +

    0010

    +
    +
    + +

    RJ45

    +
    +
    +
    + + +
    +

    192.168.0.112

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    + +
    +

    192.168.0.113

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-04-00-20

    +

    007

    +

    4

    +

    4002

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + + + + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + status-only + + + + + + + 5 + + + + + + 1 + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IED2 + + + + + + + + 0.001 + 0.005 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Publisher/LLN0.cb1 + + + + + + + + + + + + + + + + + + + + + + + Publisher/LLN0.cb1 + + + + + + + Publisher/LLN0.cb1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 21 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    diff --git a/packages/open-scd/test/testfiles/wizards/references.scd b/packages/open-scd/test/testfiles/wizards/references.scd new file mode 100644 index 0000000000..32395ee963 --- /dev/null +++ b/packages/open-scd/test/testfiles/wizards/references.scd @@ -0,0 +1,296 @@ + + +
    + + + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/open-scd/test/testfiles/wizards/reportcontrol.scd b/packages/open-scd/test/testfiles/wizards/reportcontrol.scd new file mode 100644 index 0000000000..2444be87dc --- /dev/null +++ b/packages/open-scd/test/testfiles/wizards/reportcontrol.scd @@ -0,0 +1,667 @@ + + +
    + TrainingIEC61850 + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + +
    diff --git a/packages/open-scd/test/testfiles/wizards/sampledvaluecontrol.scd b/packages/open-scd/test/testfiles/wizards/sampledvaluecontrol.scd new file mode 100644 index 0000000000..36c71c1f40 --- /dev/null +++ b/packages/open-scd/test/testfiles/wizards/sampledvaluecontrol.scd @@ -0,0 +1,619 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 100.0 + +
    +

    192.168.210.111

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-01-00-10

    +

    005

    +

    4

    +

    0010

    +
    + 10 + 10000 +
    + + 10 + 10000 + + +

    RJ45

    +
    +
    +
    + + +
    +

    192.168.0.112

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    +
    + +
    +

    192.168.0.113

    +

    255.255.255.0

    +

    192.168.210.1

    +

    1,3,9999,23

    +

    23

    +

    00000001

    +

    0001

    +

    0001

    +
    + +
    +

    01-0C-CD-04-00-20

    +

    007

    +

    4

    +

    4002

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + status-only + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + +
    diff --git a/packages/open-scd/test/testfiles/wizards/settingGroups.scd b/packages/open-scd/test/testfiles/wizards/settingGroups.scd new file mode 100644 index 0000000000..0bb21d742c --- /dev/null +++ b/packages/open-scd/test/testfiles/wizards/settingGroups.scd @@ -0,0 +1,294 @@ + + +
    + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 500 + 600 + 700 + + + + + + 100 + 200 + 300 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IEC 61850-7-4:2007B4 + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + 30000 + + + 600 + + + + + + + + s + + + + + + + + + + + + A + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + + IEC 61850-8-1:2003 + + + + + + + + m + kg + s + A + K + mol + cd + deg + rad + sr + Gy + Bq + °C + Sv + F + C + S + H + V + ohm + J + N + Hz + lx + Lm + Wb + T + W + Pa + + + m/s + m/s² + m³/s + m/m³ + M + kg/m³ + m²/s + W/m K + J/K + ppm + 1/s + rad/s + W/m² + J/m² + S/m + K/s + Pa/s + J/kg K + VA + Watts + VAr + phi + cos(phi) + Vs + + As + + A²t + VAh + Wh + VArh + V/Hz + Hz/s + char + char/s + kgm² + dB + J/Wh + W/s + l/s + dBm + h + min + Ohm/m + percent/s + + + unknown + forward + backward + both + + + Ok + Warning + Alarm + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + \ No newline at end of file diff --git a/packages/open-scd/test/testfiles/wizards/substation.scd b/packages/open-scd/test/testfiles/wizards/substation.scd new file mode 100644 index 0000000000..82e3096a72 --- /dev/null +++ b/packages/open-scd/test/testfiles/wizards/substation.scd @@ -0,0 +1,328 @@ + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + 380.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 30.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 10.0 + + + + + + + + + + + + + + + + + + + + + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/packages/open-scd/test/testfiles/zeroline/clone/noUnusedLNode.scd b/packages/open-scd/test/testfiles/zeroline/clone/noUnusedLNode.scd new file mode 100644 index 0000000000..abb0f77335 --- /dev/null +++ b/packages/open-scd/test/testfiles/zeroline/clone/noUnusedLNode.scd @@ -0,0 +1,304 @@ + +
    + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + diff --git a/packages/open-scd/test/testfiles/zeroline/clone/refMissmatch.scd b/packages/open-scd/test/testfiles/zeroline/clone/refMissmatch.scd new file mode 100644 index 0000000000..238eabb51f --- /dev/null +++ b/packages/open-scd/test/testfiles/zeroline/clone/refMissmatch.scd @@ -0,0 +1,285 @@ + +
    + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + diff --git a/packages/open-scd/test/testfiles/zeroline/clone/specificationOnly.scd b/packages/open-scd/test/testfiles/zeroline/clone/specificationOnly.scd new file mode 100644 index 0000000000..01c5ff8ef2 --- /dev/null +++ b/packages/open-scd/test/testfiles/zeroline/clone/specificationOnly.scd @@ -0,0 +1,252 @@ + +
    + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + diff --git a/packages/open-scd/test/testfiles/zeroline/clone/validRedirect.scd b/packages/open-scd/test/testfiles/zeroline/clone/validRedirect.scd new file mode 100644 index 0000000000..44d19c2149 --- /dev/null +++ b/packages/open-scd/test/testfiles/zeroline/clone/validRedirect.scd @@ -0,0 +1,285 @@ + +
    + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + diff --git a/packages/open-scd/test/testfiles/zeroline/functions.scd b/packages/open-scd/test/testfiles/zeroline/functions.scd new file mode 100644 index 0000000000..7a0ac3bfac --- /dev/null +++ b/packages/open-scd/test/testfiles/zeroline/functions.scd @@ -0,0 +1,527 @@ + + +
    + TrainingIEC61850 + + + +
    + + + + + + + + + + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + + status-only + + + + + + + sbo-with-enhanced-security + + + + + + + + + + status-only + + + + + + + + + status-only + + + + + + + + + direct-with-normal-security + + + + + + + sbo-with-normal-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + + + + + + + status-only + + + + + + + status-only + + + + + + + status-only + + + + + + + + + + + status-only + + + + + + + direct-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sbo-with-enhanced-security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + status-only + direct-with-normal-security + sbo-with-normal-security + direct-with-enhanced-security + sbo-with-enhanced-security + + + on + blocked + test + test/blocked + off + + + Ok + Warning + Alarm + + + not-supported + bay-control + station-control + remote-control + automatic-bay + automatic-station + automatic-remote + maintenance + process + + + +
    diff --git a/packages/open-scd/test/testfiles/zeroline/iedalloctest.scd b/packages/open-scd/test/testfiles/zeroline/iedalloctest.scd new file mode 100644 index 0000000000..c6de2e96d7 --- /dev/null +++ b/packages/open-scd/test/testfiles/zeroline/iedalloctest.scd @@ -0,0 +1,64 @@ + + +
    + TrainingIEC61850 + + + +
    + + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + + + + + + + + + + + + + +
    diff --git a/packages/open-scd/test/testfiles/zeroline/substationonly.scd b/packages/open-scd/test/testfiles/zeroline/substationonly.scd new file mode 100644 index 0000000000..b5d2a9a909 --- /dev/null +++ b/packages/open-scd/test/testfiles/zeroline/substationonly.scd @@ -0,0 +1,41 @@ + + +
    + TrainingIEC61850 + + + +
    + + + 110.0 + + + + + + + + + + + + + + + + + + + + + + + + + 20 + + + + +
    diff --git a/packages/open-scd/test/unit/Editing.test.ts b/packages/open-scd/test/unit/Editing.test.ts new file mode 100644 index 0000000000..ca49ffcc77 --- /dev/null +++ b/packages/open-scd/test/unit/Editing.test.ts @@ -0,0 +1,465 @@ +import { html, fixture, expect } from '@open-wc/testing'; +import { SinonSpy, spy } from 'sinon'; + +import './mock-editor.js'; +import { MockEditor } from './mock-editor.js'; + +import { createUpdateAction, newActionEvent } from '../../src/foundation.js'; + +describe('EditingElement', () => { + let elm: MockEditor; + let doc: XMLDocument; + let parent: Element; + let element: Element; + let reference: Node | null; + + let validateEvent: SinonSpy; + + beforeEach(async () => { + doc = await fetch('/test/testfiles/Editing.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + elm = ( + await fixture(html``) + ); + + parent = elm.doc!.querySelector('VoltageLevel[name="E1"]')!; + element = parent.querySelector('Bay[name="Q01"]')!; + reference = element.nextSibling; + + validateEvent = spy(); + window.addEventListener('validate', validateEvent); + }); + + it('creates an element on receiving a Create Action', () => { + elm.dispatchEvent( + newActionEvent({ + new: { + parent, + element: elm.doc!.createElement('newBay'), + reference: null, + }, + }) + ); + expect(elm.doc!.querySelector('newBay')).to.not.be.null; + }); + + it('creates an Node on receiving a Create Action', () => { + const testNode = document.createTextNode('myTestNode'); + + elm.dispatchEvent( + newActionEvent({ + new: { + parent, + element: testNode, + }, + }) + ); + expect(parent.lastChild).to.equal(testNode); + }); + + it('creates the Node based on the reference definition', () => { + const testNode = document.createTextNode('myTestNode'); + + elm.dispatchEvent( + newActionEvent({ + new: { + parent, + element: testNode, + reference: parent.firstChild, + }, + }) + ); + expect(parent.firstChild).to.equal(testNode); + }); + + it('triggers getReference with missing reference on Create Action', () => { + elm.dispatchEvent( + newActionEvent({ + new: { + parent, + element: elm.doc!.createElement('Bay'), + }, + }) + ); + expect(parent.querySelector('Bay')?.nextElementSibling).to.equal( + parent.querySelector('Bay[name="Q01"]') + ); + }); + + it('ignores getReference with existing reference on Create Action', () => { + const newElement = elm.doc!.createElement('Bay'); + newElement?.setAttribute('name', 'Q03'); + + elm.dispatchEvent( + newActionEvent({ + new: { + parent, + element: newElement, + reference: parent.querySelector('Bay[name="Q02"]'), + }, + }) + ); + expect( + parent.querySelector('Bay[name="Q03"]')?.nextElementSibling + ).to.equal(parent.querySelector('Bay[name="Q02"]')); + }); + + it('does not creates an element on name attribute conflict', () => { + const newElement = elm.doc!.createElement('Bay'); + newElement?.setAttribute('name', 'Q01'); + + elm.dispatchEvent( + newActionEvent({ + new: { + parent, + element: newElement, + reference: null, + }, + }) + ); + expect(parent.querySelectorAll('Bay[name="Q01"]').length).to.be.equal(1); + }); + + it('does not creates an element on id attribute conflict', () => { + const newElement = elm.doc!.createElement('DOType'); + newElement?.setAttribute('id', 'testId'); + + elm.dispatchEvent( + newActionEvent({ + new: { + parent: doc.querySelector('DataTypeTemplates')!, + element: newElement, + reference: null, + }, + }) + ); + expect(doc.querySelector('DOType')).to.be.null; + }); + + it('deletes an element on receiving a Delete action', () => { + elm.dispatchEvent( + newActionEvent({ + old: { + parent, + element, + reference, + }, + }) + ); + expect(elm.doc!.querySelector('VoltageLevel[name="E1"] > Bay[name="Q01"]')) + .to.be.null; + }); + + it('deletes a Node on receiving a Delete action', () => { + const testNode = document.createTextNode('myTestNode'); + parent.appendChild(testNode); + expect(testNode.parentNode).to.be.equal(parent); + + elm.dispatchEvent( + newActionEvent({ + old: { + parent, + element: testNode, + }, + }) + ); + + expect(parent.lastChild).to.not.equal(testNode); + expect(testNode.parentNode).to.be.null; + }); + + it('correctly handles incorrect delete action definition', () => { + const testNode = document.createTextNode('myTestNode'); + expect(testNode.parentNode).to.null; + + elm.dispatchEvent( + newActionEvent({ + old: { + parent, + element: testNode, + }, + }) + ); + + expect(parent.lastChild).to.not.equal(testNode); + expect(testNode.parentNode).to.null; + }); + + it('replaces an element on receiving an Replace action', () => { + elm.dispatchEvent( + newActionEvent({ + old: { + element, + }, + new: { + element: elm.doc!.createElement('newBay'), + }, + }) + ); + expect(parent.querySelector('Bay[name="Q01"]')).to.be.null; + expect(parent.querySelector('newBay')).to.not.be.null; + expect(parent.querySelector('newBay')?.nextElementSibling).to.equal( + parent.querySelector('Bay[name="Q02"]') + ); + }); + + it('does not replace an element in case of name conflict', () => { + const newElement = elm.doc!.createElement('Bay'); + newElement?.setAttribute('name', 'Q02'); + + elm.dispatchEvent( + newActionEvent({ + old: { + element, + }, + new: { + element: newElement, + }, + }) + ); + expect(parent.querySelector('Bay[name="Q01"]')).to.not.be.null; + expect( + parent.querySelector('Bay[name="Q01"]')?.nextElementSibling + ).to.equal(parent.querySelector('Bay[name="Q02"]')); + }); + + it('replaces id defined element on receiving Replace action', () => { + expect(doc.querySelector('LNodeType[id="testId"]')).to.not.be.null; + + const newElement = doc.createElement('LNodeType'); + newElement?.setAttribute('id', 'testId3'); + + elm.dispatchEvent( + newActionEvent({ + old: { + element: doc.querySelector('LNodeType[id="testId"]')!, + }, + new: { + element: newElement, + }, + }) + ); + expect(elm.doc!.querySelector('LNodeType[id="testId"]')).to.be.null; + expect(elm.doc!.querySelector('LNodeType[id="testId3"]')).to.not.be.null; + }); + + it('does not replace an element in case of id conflict', () => { + expect(doc.querySelector('LNodeType[id="testId"]')).to.not.be.null; + + const newElement = elm.doc!.createElement('LNodeType'); + newElement?.setAttribute('id', 'testId1'); + + elm.dispatchEvent( + newActionEvent({ + old: { + element: doc.querySelector('LNodeType[id="testId"]')!, + }, + new: { + element: newElement, + }, + }) + ); + expect(elm.doc!.querySelector('LNodeType[id="testId"]')).to.not.be.null; + expect(elm.doc!.querySelector('LNodeType[id="testId1"]')).to.be.null; + }); + + it('moves an element on receiving a Move action', () => { + elm.dispatchEvent( + newActionEvent({ + old: { + parent, + element, + reference, + }, + new: { + parent: elm.doc!.querySelector('VoltageLevel[name="J1"]')!, + reference: null, + }, + }) + ); + expect(parent.querySelector('Bay[name="Q01"]')).to.be.null; + expect(elm.doc!.querySelector('VoltageLevel[name="J1"] > Bay[name="Q01"]')) + .to.not.be.null; + }); + + it('triggers getReference with missing reference on Move action', () => { + elm.dispatchEvent( + newActionEvent({ + old: { + parent, + element, + reference, + }, + new: { + parent: elm.doc!.querySelector('VoltageLevel[name="J1"]')!, + }, + }) + ); + expect(parent.querySelector('Bay[name="Q01"]')).to.be.null; + expect(elm.doc!.querySelector('VoltageLevel[name="J1"] > Bay[name="Q01"]')) + .to.not.be.null; + expect( + elm.doc!.querySelector('VoltageLevel[name="J1"] > Bay[name="Q01"]') + ?.nextElementSibling + ).to.equal(elm.doc!.querySelector('VoltageLevel[name="J1"] > Function')); + }); + + it('does not move an element in case of name conflict', () => { + elm.dispatchEvent( + newActionEvent({ + old: { + parent, + element, + reference, + }, + new: { + parent: elm.doc!.querySelector('VoltageLevel[name="J1"]')!, + reference: null, + }, + }) + ); + expect(parent.querySelector('Bay[name="Q01"]')).to.be.null; + expect(elm.doc!.querySelector('VoltageLevel[name="J1"] > Bay[name="Q01"]')) + .to.not.be.null; + expect( + elm.doc!.querySelector('VoltageLevel[name="J1"] > Bay[name="Q01"]') + ?.nextElementSibling + ).to.be.null; + }); + + it('updates an element on receiving an Update action', () => { + const newAttributes: Record = {}; + newAttributes['name'] = 'Q03'; + + elm.dispatchEvent( + newActionEvent(createUpdateAction(element, newAttributes)) + ); + + expect(element.parentElement).to.equal(parent); + expect(element).to.have.attribute('name', 'Q03'); + expect(element).to.not.have.attribute('desc'); + }); + + it('allows empty string as attribute value', () => { + const newAttributes: Record = {}; + newAttributes['name'] = ''; + + elm.dispatchEvent( + newActionEvent(createUpdateAction(element, newAttributes)) + ); + + expect(element.parentElement).to.equal(parent); + expect(element).to.have.attribute('name', ''); + expect(element).to.not.have.attribute('desc'); + }); + + it('does not update an element in case of name conflict', () => { + const newAttributes: Record = {}; + newAttributes['name'] = 'Q02'; + + elm.dispatchEvent( + newActionEvent(createUpdateAction(element, newAttributes)) + ); + + expect(element.parentElement).to.equal(parent); + expect(element).to.have.attribute('name', 'Q01'); + expect(element).to.have.attribute('desc', 'Bay'); + }); + + it('does not update an element in case of id conflict', () => { + const newAttributes: Record = {}; + newAttributes['id'] = 'testId1'; + + elm.dispatchEvent( + newActionEvent( + createUpdateAction(doc.querySelector('LNodeType')!, newAttributes) + ) + ); + + expect(elm.doc!.querySelector('LNodeType[id="testId"]')).to.exist; + expect(elm.doc!.querySelector('LNodeType[id="testId1"]')).to.not.exist; + }); + + it('carries out subactions sequentially on receiving a ComplexAction', () => { + const child3 = elm.doc!.createElement('newBay'); + elm.dispatchEvent( + newActionEvent({ + title: 'Test complex action', + actions: [ + { + old: { element }, + new: { element: child3 }, + }, + { + old: { + parent, + element: child3, + reference, + }, + new: { + parent: elm.doc!.querySelector('VoltageLevel[name="J1"]')!, + reference: null, + }, + }, + ], + }) + ); + expect(parent.querySelector('Bay[name="Q01"]')).to.be.null; + expect(elm.doc!.querySelector('VoltageLevel[name="J1"] > newBay')).to.not.be + .null; + }); + + it('triggers a validation event on receiving a ComplexAction', async () => { + const child3 = elm.doc!.createElement('newBay'); + elm.dispatchEvent( + newActionEvent({ + title: 'Test complex action', + actions: [ + { + old: { element }, + new: { element: child3 }, + }, + { + old: { + parent, + element: child3, + reference, + }, + new: { + parent: elm.doc!.querySelector('VoltageLevel[name="J1"]')!, + reference: null, + }, + }, + ], + }) + ); + await elm.updateComplete; + + expect(validateEvent).to.be.calledOnce; + }); + + it('does not exchange doc with empty complex action', async () => { + elm.dispatchEvent( + newActionEvent({ + title: 'Test complex action', + actions: [], + }) + ); + await elm.updateComplete; + + expect(doc).to.equal(elm.doc); + }); + + it('does not trigger validation with empty complex action', async () => { + elm.dispatchEvent( + newActionEvent({ + title: 'Test complex action', + actions: [], + }) + ); + await elm.updateComplete; + + expect(validateEvent).to.not.been.called; + }); +}); diff --git a/packages/open-scd/test/unit/Historing.test.ts b/packages/open-scd/test/unit/Historing.test.ts new file mode 100644 index 0000000000..ea4a5155ac --- /dev/null +++ b/packages/open-scd/test/unit/Historing.test.ts @@ -0,0 +1,284 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import './mock-logger.js'; +import { MockAction } from './mock-actions.js'; +import { MockLogger } from './mock-logger.js'; + +import { + CommitEntry, + newIssueEvent, + newLogEvent, +} from '../../src/foundation.js'; + +describe('HistoringElement', () => { + let element: MockLogger; + beforeEach(async () => { + element = await fixture(html``); + }); + + it('starts out with an empty log', () => + expect(element).property('log').to.be.empty); + + it('cannot undo', () => expect(element).property('canUndo').to.be.false); + it('cannot redo', () => expect(element).property('canRedo').to.be.false); + + it('cannot undo info messages', () => { + element.dispatchEvent(newLogEvent({ kind: 'info', title: 'test info' })); + expect(element).property('log').to.have.lengthOf(1); + expect(element).property('canUndo').to.be.false; + }); + + it('cannot undo warning messages', () => { + element.dispatchEvent( + newLogEvent({ kind: 'warning', title: 'test warning' }) + ); + expect(element).property('log').to.have.lengthOf(1); + expect(element).property('canUndo').to.be.false; + }); + + it('cannot undo error messages', () => { + element.dispatchEvent(newLogEvent({ kind: 'error', title: 'test error' })); + expect(element).property('log').to.have.lengthOf(1); + expect(element).property('canUndo').to.be.false; + }); + + it('has no previous action', () => + expect(element).to.have.property('previousAction', -1)); + it('has no edit count', () => + expect(element).to.have.property('editCount', -1)); + it('has no next action', () => + expect(element).to.have.property('nextAction', -1)); + + it('renders a placeholder message', () => + expect(element.logUI).to.contain('mwc-list-item[disabled]')); + // dirty hack: ask @open-wc/shadowDomDiff for contains support + + it('shows a snackbar on logging an info', () => { + expect(element.infoUI).to.have.property('open', false); + element.dispatchEvent(newLogEvent({ kind: 'info', title: 'test info' })); + expect(element.infoUI).to.have.property('open', true); + }); + + it('shows a snackbar on logging an warning', () => { + expect(element.warningUI).to.have.property('open', false); + element.dispatchEvent( + newLogEvent({ kind: 'warning', title: 'test warning' }) + ); + expect(element.warningUI).to.have.property('open', true); + }); + + it('shows a snackbar on logging an error', () => { + expect(element.errorUI).to.have.property('open', false); + element.dispatchEvent(newLogEvent({ kind: 'error', title: 'test error' })); + expect(element.errorUI).to.have.property('open', true); + }); + + it('shows a snackbar on an issue', () => { + expect(element.issueUI).to.have.property('open', false); + element.dispatchEvent( + newIssueEvent({ + validatorId: 'val', + title: 'test issue', + }) + ); + expect(element.issueUI).to.have.property('open', true); + }); + + it('opens the log dialog on snackbar "Show" button click', async () => { + expect(element.logUI).to.have.property('open', false); + await element.errorUI.querySelector('mwc-button')!.click(); + await element.updateComplete; + expect(element.logUI).to.have.property('open', true); + }); + + it('opens the diagnostics dialog on issue snackbar "Show" button click', async () => { + expect(element.diagnosticUI).to.have.property('open', false); + await element.issueUI.querySelector('mwc-button')!.click(); + await element.updateComplete; + expect(element.diagnosticUI).to.have.property('open', true); + }); + + describe('with an action logged', () => { + beforeEach(async () => { + element.dispatchEvent( + newLogEvent({ + kind: 'action', + title: 'test MockAction', + action: MockAction.cre, + }) + ); + element.requestUpdate(); + await element.updateComplete; + element.requestUpdate(); + await element.updateComplete; + }); + + it('can undo', () => expect(element).property('canUndo').to.be.true); + it('cannot redo', () => expect(element).property('canRedo').to.be.false); + + it('has no previous action', () => + expect(element).to.have.property('previousAction', -1)); + it('has an edit count', () => + expect(element).to.have.property('editCount', 0)); + it('has no next action', () => + expect(element).to.have.property('nextAction', -1)); + + it('does not log derived actions', () => { + expect(element).property('history').to.have.lengthOf(1); + element.dispatchEvent( + newLogEvent({ + kind: 'action', + title: 'test MockAction', + action: (element.history[0]).action, + }) + ); + expect(element).property('history').to.have.lengthOf(1); + }); + + it('can reset its log', () => { + element.dispatchEvent(newLogEvent({ kind: 'reset' })); + expect(element).property('log').to.be.empty; + expect(element).property('history').to.be.empty; + expect(element).to.have.property('editCount', -1); + }); + + it('renders a history message for the action', () => + expect(element.historyUI).to.contain.text('test')); + + describe('with a second action logged', () => { + beforeEach(() => { + element.dispatchEvent( + newLogEvent({ + kind: 'info', + title: 'test info', + }) + ); + element.dispatchEvent( + newLogEvent({ + kind: 'action', + title: 'test MockAction', + action: MockAction.del, + }) + ); + }); + + it('has a previous action', () => + expect(element).to.have.property('previousAction', 0)); + it('has an edit count', () => + expect(element).to.have.property('editCount', 1)); + it('has no next action', () => + expect(element).to.have.property('nextAction', -1)); + + describe('with an action undone', () => { + beforeEach(() => element.undo()); + + it('has no previous action', () => + expect(element).to.have.property('previousAction', -1)); + it('has an edit count', () => + expect(element).to.have.property('editCount', 0)); + it('has a next action', () => + expect(element).to.have.property('nextAction', 1)); + + it('can redo', () => expect(element).property('canRedo').to.be.true); + + it('removes the undone action when a new action is logged', () => { + element.dispatchEvent( + newLogEvent({ + kind: 'action', + title: 'test MockAction', + action: MockAction.mov, + }) + ); + expect(element).property('log').to.have.lengthOf(1); + expect(element).property('history').to.have.lengthOf(2); + expect(element).to.have.property('editCount', 1); + expect(element).to.have.property('nextAction', -1); + }); + + describe('with the second action undone', () => { + beforeEach(() => element.undo()); + + it('cannot undo any funther', () => + expect(element.undo()).to.be.false); + }); + + describe('with the action redone', () => { + beforeEach(() => element.redo()); + + it('has a previous action', () => + expect(element).to.have.property('previousAction', 0)); + it('has an edit count', () => + expect(element).to.have.property('editCount', 1)); + it('has no next action', () => + expect(element).to.have.property('nextAction', -1)); + + it('cannot redo any further', () => + expect(element.redo()).to.be.false); + }); + }); + }); + }); + + describe('with an issue incoming', () => { + beforeEach(async () => { + element.dispatchEvent( + newIssueEvent({ + validatorId: '/src/validators/ValidateSchema.js', + title: 'test run 1', + }) + ); + element.requestUpdate(); + await element.updateComplete; + element.requestUpdate(); + await element.updateComplete; + }); + + it('saves the issue to diagnose', () => { + expect(element.diagnoses.get('/src/validators/ValidateSchema.js')).to + .exist; + const issue = element.diagnoses.get( + '/src/validators/ValidateSchema.js' + )![0]; + expect(issue.title).to.equal('test run 1'); + }); + + it('does not contain issues from another validator', () => + expect(element.diagnoses.has('/src/validators/ValidateTemplates.js')).to + .be.false); + + describe('with another issue coming in - new validator', () => { + beforeEach(() => { + element.dispatchEvent( + newIssueEvent({ + validatorId: '/src/validators/ValidateTemplates.js', + title: 'test run 3', + }) + ); + }); + + it('keeps old issues from the other validator', () => { + expect(element.diagnoses.get('/src/validators/ValidateSchema.js')).to + .exist; + expect( + element.diagnoses.get('/src/validators/ValidateSchema.js')!.length + ).to.equal(1); + const issue = element.diagnoses.get( + '/src/validators/ValidateSchema.js' + )![0]; + expect(issue.title).to.equal('test run 1'); + }); + + it('in parallel saves the issues of the new validator', () => { + expect(element.diagnoses.get('/src/validators/ValidateTemplates.js')).to + .exist; + expect( + element.diagnoses.get('/src/validators/ValidateTemplates.js')!.length + ).to.equal(1); + const issue = element.diagnoses.get( + '/src/validators/ValidateTemplates.js' + )![0]; + expect(issue.title).to.equal('test run 3'); + }); + }); + }); +}); diff --git a/packages/open-scd/test/unit/Plugging.test.ts b/packages/open-scd/test/unit/Plugging.test.ts new file mode 100644 index 0000000000..cbd9b6dfe2 --- /dev/null +++ b/packages/open-scd/test/unit/Plugging.test.ts @@ -0,0 +1,187 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import './mock-plugger.js'; +import { MockPlugger } from './mock-plugger.js'; + +import { TextField } from '@material/mwc-textfield'; + +describe('PluggingElement', () => { + let element: MockPlugger; + let doc: XMLDocument; + + afterEach(async () => { + await new Promise(resolve => setTimeout(resolve, 50)); // await animation + localStorage.clear(); + }); + beforeEach(async () => { + doc = await fetch('/test/testfiles/valid2007B4.scd') + .then(response => response.text()) + .then(str => new DOMParser().parseFromString(str, 'application/xml')); + element = ( + await fixture( + html`` + ) + ); + await element.updateComplete; + }); + + it('stores default plugins on load', () => + expect(element).property('editors').to.have.lengthOf(6)); + + describe('plugin manager dialog', () => { + let firstEditorPlugin: HTMLElement; + let resetAction: HTMLElement; + let primaryAction: HTMLElement; + + beforeEach(async () => { + element.pluginUI.show(); + await element.pluginUI.updateComplete; + firstEditorPlugin = ( + element.pluginList.querySelector( + 'mwc-check-list-item:not([noninteractive])' + ) + ); + + resetAction = ( + element.pluginUI.querySelector('mwc-button[slot="secondaryAction"]') + ); + primaryAction = ( + element.pluginUI.querySelector('mwc-button[slot="primaryAction"]') + ); + }); + + it('disables deselected plugins', async () => { + firstEditorPlugin.click(); + await element.updateComplete; + expect(element).property('editors').to.have.lengthOf(5); + }); + + it('enables selected plugins', async () => { + (element.pluginList.firstElementChild).click(); + await element.updateComplete; + (element.pluginList.firstElementChild).click(); + await element.updateComplete; + expect(element).property('editors').to.have.lengthOf(6); + }); + + it('resets plugins to default on reset button click', async () => { + (element.pluginList.firstElementChild).click(); + await element.updateComplete; + resetAction.click(); + await element.updateComplete; + expect(element).property('editors').to.have.lengthOf(6); + }); + + it('opens the custom plugin dialog on add button click', async () => { + primaryAction.click(); + await element.updateComplete; + expect(element) + .property('pluginDownloadUI') + .to.have.property('open', true); + }); + }); + + describe('add custom plugin dialog', () => { + let src: TextField; + let name: TextField; + let primaryAction: HTMLElement; + let menuKindOption: HTMLElement; + let validatorKindOption: HTMLElement; + + beforeEach(async () => { + src = ( + element.pluginDownloadUI.querySelector('#pluginSrcInput') + ); + name = ( + element.pluginDownloadUI.querySelector('#pluginNameInput') + ); + primaryAction = ( + element.pluginDownloadUI.querySelector( + 'mwc-button[slot="primaryAction"]' + ) + ); + element.pluginDownloadUI.show(); + await element.pluginDownloadUI.updateComplete; + menuKindOption = ( + element.pluginDownloadUI.querySelector( + '#pluginKindList > mwc-radio-list-item[id="menu"]' + ) + ); + validatorKindOption = ( + element.pluginDownloadUI.querySelector( + '#pluginKindList > mwc-radio-list-item[id="validator"]' + ) + ); + }); + + it('requires a name and a valid URL to add a plugin', async () => { + primaryAction.click(); + expect(element.pluginDownloadUI).to.have.property('open', true); + + src.value = 'http://example.com/plugin.js'; + await src.updateComplete; + primaryAction.click(); + expect(element.pluginDownloadUI).to.have.property('open', true); + + src.value = 'notaURL'; + name.value = 'testName'; + await src.updateComplete; + await name.updateComplete; + primaryAction.click(); + expect(element.pluginDownloadUI).to.have.property('open', true); + + src.value = 'http://example.com/plugin.js'; + await src.updateComplete; + primaryAction.click(); + expect(element.pluginDownloadUI).to.have.property('open', false); + }); + + it('adds a new editor kind plugin on add button click', async () => { + src.value = 'http://example.com/plugin.js'; + name.value = 'testName'; + await src.updateComplete; + await name.updateComplete; + primaryAction.click(); + await element.updateComplete; + expect(element.editors).to.have.lengthOf(7); + }); + it('adds a new menu kind plugin on add button click', async () => { + const lengthMenuKindPlugins = element.menuEntries.length; + src.value = 'http://example.com/plugin.js'; + name.value = 'testName'; + menuKindOption.click(); + await src.updateComplete; + await name.updateComplete; + primaryAction.click(); + await element.updateComplete; + expect(element.menuEntries).to.have.lengthOf(lengthMenuKindPlugins + 1); + }); + it('sets requireDoc and position for new menu kind plugin', async () => { + src.value = 'http://example.com/plugin.js'; + name.value = 'testName'; + menuKindOption.click(); + await src.updateComplete; + await name.updateComplete; + primaryAction.click(); + await element.updateComplete; + + expect( + element.menuEntries[element.menuEntries.length - 1] + ).to.have.property('requireDoc'); + expect( + element.menuEntries[element.menuEntries.length - 1] + ).to.have.property('position'); + }); + it('adds a new validator kind plugin on add button click', async () => { + expect(element.validators).to.have.lengthOf(2); + src.value = 'http://example.com/plugin.js'; + name.value = 'testName'; + validatorKindOption.click(); + await src.updateComplete; + await name.updateComplete; + primaryAction.click(); + await element.updateComplete; + expect(element.validators).to.have.lengthOf(3); + }); + }); +}); diff --git a/packages/open-scd/test/unit/Setting.test.ts b/packages/open-scd/test/unit/Setting.test.ts new file mode 100644 index 0000000000..5b6cfa2ed6 --- /dev/null +++ b/packages/open-scd/test/unit/Setting.test.ts @@ -0,0 +1,96 @@ +import { registerTranslateConfig, use } from 'lit-translate'; + +import { html, fixture, expect } from '@open-wc/testing'; + +import './mock-setter.js'; +import { MockSetter } from './mock-setter.js'; + +import { Button } from '@material/mwc-button'; +import { defaults } from '../../src/Setting.js'; + +describe('SettingElement', () => { + let element: MockSetter; + beforeEach(async () => { + localStorage.clear(); + element = await fixture(html``); + }); + + it('initially has default settings', () => + expect(element).to.have.deep.property('settings', defaults)); + + it('stores settings to localStorage', () => { + element.setSetting('theme', 'dark'); + expect(localStorage.getItem('theme')).to.equal('dark'); + }); + + it('retrieves settings from localStorage', () => { + localStorage.setItem('language', 'de'); + expect(element.settings).to.have.property('language', 'de'); + }); + + it('saves chosen settings on save button click', async () => { + element.settingsUI.show(); + element.darkThemeUI.checked = true; + await element.darkThemeUI.updateComplete; + await (

    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

    _ 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 SYT_{{QN5GB$em6A0000dHT^mO literal 0 HcmV?d00001 diff --git a/packages/open-scd/public/google/fonts/roboto-v27-latin-regular.ttf b/packages/open-scd/public/google/fonts/roboto-v27-latin-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..637971a1b6c48c4c6ee0dae18ab83bb1f5b2dcb2 GIT binary patch literal 36216 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 literal 0 HcmV?d00001 diff --git a/packages/open-scd/public/google/fonts/roboto-v27-latin-regular.woff b/packages/open-scd/public/google/fonts/roboto-v27-latin-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..86b386372664a278c839b4a6fedbf6a05b396b70 GIT binary patch literal 20332 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 Z@IjO83?{s=KqX^`zGvsj4^tdfk^ttt3T6NR literal 0 HcmV?d00001 diff --git a/packages/open-scd/public/google/fonts/roboto-v27-latin-regular.woff2 b/packages/open-scd/public/google/fonts/roboto-v27-latin-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ebe1795f85a661c205e4a4612eaf47d56273e68e GIT binary patch literal 15688 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 z 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